UPX脱壳总结

我近期研究了一下UPX壳的脱壳方法,下面给出脱壳示例:

UPX作为一款元老级PE加密壳,在以前的那个年代盛行,著名病毒【熊猫烧香】就是使用这款加密壳。
现在我们一起来脱UPX壳来揭开它的神秘面纱。
首先,PEiD载入含UPX壳的程序,结果如下:

UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo

然后用OD载入,OEP如下:

0040E8C0 >  60              PUSHAD
0040E8C1    BE 15B04000     MOV ESI,UPX.0040B015
0040E8C6    8DBE EB5FFFFF   LEA EDI,DWORD PTR DS:[ESI+FFFF5FEB]
0040E8CC    57              PUSH EDI
0040E8CD    83CD FF         OR EBP,FFFFFFFF
0040E8D0    EB 10           JMP SHORT UPX.0040E8E2
0040E8D2    90              NOP
0040E8D3    90              NOP
0040E8D4    90              NOP
0040E8D5    90              NOP
0040E8D6    90              NOP
0040E8D7    90              NOP

然后单步跟踪……直到大跳转:

0040EA0F  - E9 B826FFFF     JMP UPX.004010CC
0040EA14    0000            ADD BYTE PTR DS:[EAX],AL
0040EA16    0000            ADD BYTE PTR DS:[EAX],AL
0040EA18    0000            ADD BYTE PTR DS:[EAX],AL
0040EA1A    0000            ADD BYTE PTR DS:[EAX],AL
0040EA1C    0000            ADD BYTE PTR DS:[EAX],AL
0040EA1E    0000            ADD BYTE PTR DS:[EAX],AL
0040EA20    0000            ADD BYTE PTR DS:[EAX],AL

跟踪到这里,发现后面均为填充位,于是跟进跳转:

004010CC    55              PUSH EBP
004010CD    8BEC            MOV EBP,ESP
004010CF    83EC 44         SUB ESP,44
004010D2    56              PUSH ESI
004010D3    FF15 E4634000   CALL DWORD PTR DS:[4063E4]               ; kernel32.GetCommandLineA
004010D9    8BF0            MOV ESI,EAX
004010DB    8A00            MOV AL,BYTE PTR DS:[EAX]
004010DD    3C 22           CMP AL,22
004010DF    75 1B           JNZ SHORT UPX.004010FC
004010E1    56              PUSH ESI
004010E2    FF15 F4644000   CALL DWORD PTR DS:[4064F4]               ; USER32.CharNextA
004010E8    8BF0            MOV ESI,EAX
004010EA    8A00            MOV AL,BYTE PTR DS:[EAX]

发现熟悉的Win32API了,程序入口就在这里了。

果断使用OllyDump,

EIP作为OEP,脱壳,

将新PE程序保存为aaa.exe,

然后运行aaa.exe,

结果与脱壳前一样,脱壳成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章