Forgot的unpackme 1.7的简单脱壳 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    【软件名称】:forgot的unpackme 1.7

    【下载地址】:见附件,

Forgot的unpackme 1.7的简单脱壳

    【脱壳声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!

    【操作系统】:winxp

    【脱壳工具】:OD等传统工具

    ———————————————————————————————————————————

    【脱壳过程】:

    forgot的unpackme 1.7 和pack v0.1.6的变化不大,只是加了IAT简单加密。另外和1.6一样加了入口代码修改,但修改字节并不多。

    如果看过我脱015版和016版的文章,那么可以省略相关的章节。

    第一步,找d-process处:

    用OD载入程序,忽略所有异常,bp WriteProcessMemory,F9运行程序,断下:

    77E41A94 > 55             PUSH EBP////断下。

    77E41A95   8BEC           MOV EBP,ESP

    77E41A97   51             PUSH ECX

    77E41A98   51             PUSH ECX

    77E41A99   8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]

    77E41A9C   53             PUSH EBX

    观察堆栈数据:

    0032797C  0032B349 /CALL 到 WriteProcessMemory 来自 0032B344

    00327980  00000034 |hProcess = 00000034

    00327984  0032CA56 |Address = 32CA56////重要!记下备用。

    00327988  0032C3C5 |Buffer = 0032C3C5

    0032798C  0000029A |BytesToWrite = 29A (666.)////重要!记下备用。

    00327990  00000000 pBytesWritten = NULL

    好,F9直接运行程序,等出现界面时,运行LordPE选中映像文件小的那个进程,然后部分DUMP,把从32CA56处开始大小为29A的数据DUMP下来,命名为32CA56.bin。

    第二步,变双进程为单进程:

    重新载入程序,bp CreateProcessA,运行程序,断下:

    77E41BBC > 55             PUSH EBP////断在这儿。

    77E41BBD   8BEC           MOV EBP,ESP

    77E41BBF   6A 00          PUSH 0

    77E41BC1   FF75 2C        PUSH DWORD PTR SS:[EBP+2C]

    77E41BC4   FF75 28        PUSH DWORD PTR SS:[EBP+28]

    77E41BC7   FF75 24        PUSH DWORD PTR SS:[EBP+24]

    观察堆栈数据:

    00327968  0032A22C /CALL 到 CreateProcessA 来自 0032A227

    0032796C  00328F99 |ModuleFileName = "C:Documents and Settingscsjwaman桌面\1.71.7.exe"

    00327970  0032A21D |CommandLine = "X"////调试标志。

    00327974  00000000 |pProcessSecurity = NULL

    00327978  00000000 |pThreadSecurity = NULL

    0032797C  00000000 |InheritHandles = FALSE

    00327980  00000003 |CreationFlags = DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS

    00327984  00000000 |pEnvironment = NULL

    00327988  00000000 |CurrentDir = NULL

    0032798C  00327CF4 |pStartupInfo = 00327CF4

    00327990  00327CE4 pProcessInfo = 00327CE4

    重新载入程序,bp GetCommandLineA,运行程序,断下:

    77E5E358 > A1 1476EB77    MOV EAX,DWORD PTR DS:[77EB7614]////断在这里。取消断点。

    77E5E35D   C3             RETN////返回。

    返回到:

    0032837C   68 9F6F56B6    PUSH B6566F9F

    00328381   50             PUSH EAX

    00328382   E8 5D000000    CALL 003283E4

    00328387   EB FF          JMP SHORT 00328388

    00328389   71 78          JNO SHORT 00328403

    0032838B   C2 5000        RETN 50

    0032838E ^ EB D3          JMP SHORT 00328363

    00328390   5B             POP EBX

    00328391   F3:            PREFIX REP:      ; 多余的前缀

    搜索二进制字符“803e58”,找到:

    00328617 ^71 EB          JNO SHORT 00328604

    00328619 ^ EB FA          JMP SHORT 00328615

    0032861B ^ EB 80          JMP SHORT 0032859D/////找到这里,

电脑资料

Forgot的unpackme 1.7的简单脱壳》(https://www.unjs.com)。这里有个花指令。

    0032861D   3E:58          POP EAX

    0032861F   0F84 8A410000  JE 0032C7AF

    00328625   68 9F6F56B6    PUSH B6566F9F

    0032862A   50             PUSH EAX

    0032862B   E8 5D000000    CALL 0032868D

    00328630   EB FF          JMP SHORT 00328631

    NOP掉花指令后:

    0032861B   90             NOP

    0032861C   803E 58        CMP BYTE PTR DS:[ESI],58////58为调试标志。用于判断是否为子进程。

    0032861F   0F84 8A410000  JE 0032C7AF////此处改为JMP!可以变为单进程。

    00328625   68 9F6F56B6    PUSH B6566F9F

    0032862A   50             PUSH EAX

    0032862B   E8 5D000000    CALL 0032868D

    00A19217   90             NOP

    00A19218   803E 58        CMP BYTE PTR DS:[ESI],58

    00A1921B   0F84 CA3F0000  JE 00A1D1EB

    00A19221   68 9F6F56B6    PUSH B6566F9F

    00A19226   50             PUSH EAX

    00A19227   E8 5D000000    CALL 00A19289

    第三步,修补程序:

    修改上面这个跳转后,用十六进制工具把32CA56.bin的数据复盖掉OD的DUMP区从0032CA56处开始的29A个字节数据。

    第四步,查找入口:

    做完上述工作后,在OD的CPU窗口,Ctrl+G,输入0032CA56,点确定后来到:

    0032CA4D ^71 EB          JNO SHORT 0032CA3A

    0032CA4F ^ EB FA          JMP SHORT 0032CA4B

    0032CA51 ^ EB F0          JMP SHORT 0032CA43////NOP掉。

    0032CA53   0FC7C8         CMPXCHG8B EAX////NOP掉。

    0032CA56   FFC3           I

最新文章