讀<>之動態計算目標地址

<<IDA pro權威指南>> p348頁,另外一種技巧經常使用於面向Windows的惡意軟件中,它配置一個異常處理程序,並有意觸發一個異常,而後在處理異常時操縱進程的寄存器狀態。工具

下面的例子被tElock反逆向工程工具用於隱藏程序的真實控制流。spa

00535FC2    E8 00000000     call    00535FC7
00535FC7    5D              pop     ebp                              ;至關於ebp = 00535FC7
00535FC8    8D45 46         lea     eax, dword ptr [ebp+46]          ;0053600D
00535FCB    45              inc     ebp
00535FCC    50              push    eax                              ; push 後,esp = 0018FB58
00535FCD    33C0            xor     eax, eax
00535FCF    64:FF30         push    dword ptr fs:[eax]               ; push 後,ESP = 0018FB54
00535FD2    64:8920         mov     dword ptr fs:[eax], esp          ;fs:[0] = 0018FB54
00535FD5    90              nop
00535FD6    F7F1            div     ecx                              ;引起除0異常
00535FD8    0000            add     byte ptr [eax], al
00535FDA    0000            add     byte ptr [eax], al
00535FDC    90              nop

執行完 00535FD6後,程序引起異常,堆棧以下:

能夠看到0018FB54棧上存放指向一個SEH記錄的指針指針

             0018FB58指向一個SE處理程序的指針code

而這個恰好知足_EXCEPTION_REGISTRATION_RECORD結構進程

0:003> dt _EXCEPTION_REGISTRATION_RECORDclass

ntdll!_EXCEPTION_REGISTRATION_RECORD軟件

   +0x000 Next             : Ptr32 _EXCEPTION_REGISTRATION_RECORD配置

   +0x004 Handler          : Ptr32     _EXCEPTION_DISPOSITION 技巧

也即0053600D爲事先註冊的SEH異常處理程序的地址,0018FB5C爲指向下一個SEH記錄的指針程序

這樣也達到了必須計算才能跟蹤程序流程的目的,隱藏了程序的真實控制流。

相關文章
相關標籤/搜索