經過前幾課的學習,我們現在開始正式開講逆向分析。逆向分析技術是指通過分析反匯編代碼來理解其代碼功能,如各接口的數據結構等,然后用高級語言重新描述這段代碼,逆向推出原軟件的思路。下面從函數的調用、循環、控制語句等方面分析。
在高級語言中,子程序依懶于堆棧來傳遞參數。
例如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] 下一頁 | |||||
|