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,

結果與脫殼前一樣,脫殼成功!

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