经过前几课的学习,我们现在开始正式开讲逆向分析。逆向分析技术是指通过分析反汇编代码来理解其代码功能,如各接口的数据结构等,然后用高级语言重新描述这段代码,逆向推出原软件的思路。下面从函数的调用、循环、控制语句等方面分析。
在高级语言中,子程序依懒于堆栈来传递参数。
例如test1(Par1,Par2,Par3:integer),按C,Psacal和StdCall的调用约定汇编代码如下:
函数调用
按StdCall约定调用函数test2(par1,par2),其堆栈建立情况如下:
Push ebp ;保护现场原先的EBP指针
Mov ebp,esp ;设置新的EBP指针,指向栈顶
Sub esp,xxx ;堆栈中留出点空间放局部变量
… …
Add esp,xxx ;释放局部变量占用的堆栈
Pop ebp ;恢复现场的ebp指针
Ret 8 ;返回
循环
如果确定某段代码是循环,就可以分析其计数器,一般是用ecx寄存器做计数器。
下面的汇编代码:
xor ecx,ecx;ecx清零 :00440000 inc ecx;计数 … … cmp ecx,05;循环4次 jbe 00440000;重复 |
上面的汇编代码用C语言描述有以下3种形式:
◆While(i<5){… …} ◆For(i=0;i<5;i++){… …} ◆i=0 Repeat i++; … Unitl(i>=5) |
控制语句
If …else语句:
Cmp byte prt[00221450],bl
Jne 00221590
Case语句:
汇编代码 |
高级语句 |
Mov eax,edi ; Sub eax,00000002 ; Je 00401 ; Sub eax,0000000E ; Jne 0040114E … |
Swith(K) { case’0x2’:…;break; case’0x10’:…;break; … Default: … } |
共3页: 1 [2] [3] 下一页 | |||||
|