恶意软件逆向系列(一)教案.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
恶意软件逆向分析系列(一):在汇编语言中识别重要的代码结构老王隔壁的白帽子2016-04-14+5共69620人围观,发现9个不明物体网络安全这一系列的文章都是与恶意软件相关的课程,因此我们首先从PE和ELF文件的完整结构讲起。另一个比较重要的概念就是这些恶意程序是通过可理解的汇编代码执行的,而这些不同的代码在二进制层面的架构如何呢?在这篇文章中,我们将在汇编层面认识代码结构。注意:这篇文章的受众人群默认是对汇编语言有一定的掌握。如果基础不好的好也不必担心,我会以最简单方式来解释这些东西。变量范围代码中声明的用于保存常量或者字符串的东西叫做变量。变量的范围可以是全局变量也可以是局部变量。局部变量保存的是函数内部的值而全局变量可以在代码逻辑中的任何地方使用。当我们深入汇编代码的时候,全局变量表示的都是一些内存的地址,反之局部变量表示的是寄存器ebp的偏移值 。对于不熟悉汇编语言开始的人,汇编语言函数开头的指令类似这样:push ebpmovebp,espebp设置新的函数的栈帧,第二条指令将ebp设置为基址。由于栈的生长方式是向上地址递减,这就意味着局部变量可以通过类似moveax,[ebp-4]存取,即将ebp-4内的四个字节移动至eax中。局部变量由于不隶属于任意函数,所以如果通过ebp是无法引用这些变量的,而全局变量是指向的是内存地址,例如mov eax,dword_50CF60,全局变量地址为0x50CF60。条件语句If条件语句经常在代码中使用到。一个基本的if条件语句如下:对应的汇编代码如下:mov[ebp + var-4],1?mov[ebp+var_8],2?moveax,[ebp+var_4]?cmpeax,[ebp+var_8]?jnzshortloc_50101B?pushoffsetaequalsb;”a bareequal\n”?……?Pushoffsetanotequalb;”a barenotequal”?……注意cmp和’jnz-compare’、’jump if no zerm’指令对应于代码中的’if(a==b)。Cmp指令表示减去操作。因此,意思是比较两个变量,如果不相等则跳转至这个内存地址处,并且打印字符串”ab are not equal”,否则的话,如果变量相等,jnz指令将会被跳过,接着打印字符串”ab are equal”。如果内嵌多条if语句,你将会看到多个cmp,jnz/jz,接着在cmp后续会打印字符串或者其他的操作。?循环代码逻辑中的循环语句是用来迭代一些操作,并且一直执行到某一个条件满足为止。For循环是经常被使用到的。对于For循环搞清楚这4件事:初始化,比较,执行,增加/减少。for(inti=0;i10;i++)?{?Printf(“Current value of iis %d\n”,i);?}对应的汇编代码包含4个部分:mov[ebp+var_4],0?jmpshortloc_102345?loc_987654?moveax, [ebp+var_4]?addeax,1?mov[ebp+var_4],eax?loc_102345?cmp[ebp+var_4],Ah?jgeshortloc_23456?movecx,[ebp+var_4]?pushecx?pushoffsetiValue;”CurrentValueofiis %d\n”?callprintf?addesp, 8?jmploc_987654上述汇编代码我们可以看到,第一条指令是初始化,随后一个跳转,和10(Ah)进行比较,如果大于等于10则跳转至loc23456处,否则打印I的值,随后跳转至loc987654,i值加1,。接着再比较((i=1)=(i=10))。如果不是则值被打印出来再递增。这整个过程再继续一遍。While循环语句在代码中可以很轻易被追踪到。例如:?inti=0;?while(i10)?{?printf(“current value of I is %d\n”,i)?i++;?}汇编语言Mov[ebp+var_4], 0?Jmpshortloc_12345?Loc_123456:?moveax, [ebp+var_4]?addeax,1?mov[ebp_var_4],eax?Loc_102345:?cmp[ebp+var_4],Ah?jgeshortloc_234567?movecx,[ebp+var_4]?pushecx?pushoffsetiValue,” currentvalueofIis %d\n”?addesp,8?jmploc_1023456可以看到While循环的汇编代码,和for循环类似。Switch 语句Switch case 经常被程序使用到,通过值来进行判定。

文档评论(0)

502992 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档