科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道一步一步教你加密解密技术——压缩与脱壳(3)

一步一步教你加密解密技术——压缩与脱壳(3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

手动脱壳手动脱壳就是不借助自动脱壳工具,而是用动态调试工具SOFTICE或TRW2000来脱壳。

作者:看雪 来源:看雪 2008年10月16日

关键字: 压缩 脱壳 加密解密

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  ************************* 你在SICE中所见到的 *************************

  **Softice中断时,你会在这儿. 一直按F10走过这部分代码

  0041454F FFFF INVALID

  00414556 55 PUSH EBP

  00414557 8BEC MOV EBP,ESP

  00414559 56 PUSH ESI

  0041455A 57 PUSH EDI

  0041455B 756B JNZ 004145C8 (NO JUMP)

  0041455D 6800010000 PUSH 00000100

  00414562 E8D60B0000 CALL 0041513D

  00414567 83C404 ADD ESP,04

  0041456A 8B7508 MOV ESI,[EBP+08]

  0041456D A3B4F14000 MOV [0040F1B4],EAX

  00414572 85F6 TEST ESI,ESI

  00414574 7423 JZ 00414599 (JUMP)

  00414599 33FF XOR EDI,EDI

  0041459B 57 PUSH EDI

  0041459C 893D8C184100 MOV [0041188C],EDI

  004145A2 FF1510224100 CALL [KERNEL32!GetModuleHandleA]

  004145A8 8BF0 MOV ESI,EAX

  004145AA 68FF000000 PUSH 000000FF

  004145AF A1B4F14000 MOV EAX,[0040F1B4]

  004145B4 897D10 MOV [EBP+10],EDI

  004145B7 C7450C01000000 MOV DWORD PTR [EBP+0C],00000001

  004145BE 50 PUSH EAX

  004145BF 56 PUSH ESI

  004145C0 FF15F4214100 CALL [KERNEL32!GetModuleFileNameA]

  004145C6 EB03 JMP 004145CB (JUMP)

  004145CB E830EAFFFF CALL 00413000

  004145D0 FF7510 PUSH DWORD PTR [EBP+10]

  004145D3 FF750C PUSH DWORD PTR [EBP+0C]

  004145D6 56 PUSH ESI

  004145D7 E806000000 CALL 004145E2

  **当你走过这个位于004145D7的CALL, 压缩过的notepad.exe就自由运行了. 再次用

  symbol loader装入. 再次来到这个CALL时, 按F8追进去. 你将看到以下代码. 不

  过记着先BPX 004145D7.

  004145E2 64A100000000 MOV EAX,FS:[00000000]

  004145E8 55 PUSH EBP

  004145E9 8BEC MOV EBP,ESP

  004145EB 6AFF PUSH FF

  004145ED 6810E04000 PUSH 0040E010

  004145F2 68EC5D4100 PUSH 00415DEC

  004145F7 50 PUSH EAX

  004145F8 64892500000000 MOV FS:[00000000],ESP

  004145FF 83EC14 SUB ESP,14

  00414602 C745E401000000 MOV DWORD PTR [EBP-1C],00000001

  00414609 53 PUSH EBX

  0041460A 56 PUSH ESI

  0041460B 57 PUSH EDI

  0041460C 8965E8 MOV [EBP-18],ESP

  0041460F C745FC00000000 MOV DWORD PTR [EBP-04],00000000

  00414616 8B450C MOV EAX,[EBP+0C]

  00414619 83F801 CMP EAX,01

  0041461C 7510 JNZ 0041462E (NO JUMP)

  0041461E E886030000 CALL 004149A9

  00414623 FF05C0F14000 INC DWORD PTR [0040F1C0]

  00414629 E882F6FFFF CALL 00413CB0

  0041462E 8B35C0F14000 MOV ESI,[0040F1C0]

  00414634 85F6 TEST ESI,ESI

  00414636 0F848D000000 JZ 004146C9 (NO JUMP)

  0041463C 833DC4F1400000 CMP DWORD PTR [0040F1C4],00

  00414643 7526 JNZ 0041466B (NO JUMP)

  00414645 833D6417410000 CMP DWORD PTR [00411764],00

  0041464C 741D JZ 0041466B (NO JUMP)

  0041464E A164174100 MOV EAX,[00411764]

  **EAX现在的值是000010CC

  00414653 030588184100 ADD EAX,[00411888]

  **EAX现在的值是004010CC

  00414659 8945DC MOV [EBP-24],EAX

  **[EBP-24]现在含的是004010CC

  0041465C FF7510 PUSH DWORD PTR [EBP+10]

  0041465F FF750C PUSH DWORD PTR [EBP+0C]

  00414662 FF7508 PUSH DWORD PTR [EBP+08]

  00414665 FF55DC CALL [EBP-24]

  **假如你追过最后这个CALL,notepad.exe将再次自由运行.

  由上得知, 既然[EBP-24] = 004010CC, 最后这句代码就意味着压缩过的程序在

  CALL 004010CC. 如果你追进这个CALL, 你会发现notepad.exe很快就会运行了.

  假如你曾经追过更多shrinker v3.4压缩的程序, 你总会见到这个"CALL [EBP-24]".

  所以, 程序实际上正在进入已脱壳的程序的真正入口.

  再次装入压缩过的notepad.exe,中断之后,按F5,你将中断于004145D7行(这里你原来

  设过断点). 追进去直到你到达00414665行,这里程序正要进入已脱壳程序的真正入口.

  现在,键入以下命令:

  a eip (然后按回车)

  jmp eip (然后按回车)

  按下F5

  这样将改变00414665行的代码. 你会注意到在键入"jmp eip"并按下回车后,00414665的

  指令现在是一个jmp.这将有效地使程序"暂停". 按下F5使你回到window,你就可以dump

  已经脱壳的程序到你的硬盘了.

  现在又要用ProcDump了,在Task的列表中的第一个list上点击鼠标右键,然后选择"Refresh

  list". 在Task列表中找到notepad.exe,在它的上面点击鼠标右键.

  然后,选中"Dump (Full)",给脱壳的程序起名存盘.

  再在notepad.exe上点击鼠标右键,然后选中"Kill Task".

  _________________________________________________________________________

  改动程序入口值

  如果你记得的话, 脱壳的notepad.exe程序入口是004010CC.

  再次使用ProcDump的PE Editor功能, 打开已脱壳的notepad.exe.

  在"Header Infos"一项, 你会看见程序入口值是0001454F,这当然是错误的. 如果你试着

  不改动这个入口值而运行脱壳后的notepad.exe,程序将无法运行.

  改变入口值为Entry Poin=004010CC-基址(ImageBase ),点击"OK".

  现在, 运行脱壳后的notepad.exe吧,它应该正常运行了. 8)

  __________________________________________________________________________

  4、ASPack v1.083

  如用TRW2000调试,装载后,下命令:pnewsec就可中断到入口点。为了提高跟踪水平,下面以SOFTICE为例,讲述跟踪过程。

  _________________________________________________________________________

  寻找程序的入口点( Entry Point)

  用Symbol Loader打开Notepad-ASPACK.exe,点击Symbol loader的第二个图标("Load the currently open module")

  如SOFTICE 装载成功,它应中断在起始程序入口处。

  当跟踪时,你会经过许多条件跳转指令及循环指令,要用点技巧跳出这些圈子,其形式一般这样:

  *************************************

  aaaaaaaa

  ...

  wwwwwwww

  xxxxxxxx JNZ zzzzzzzz <-- 循环返回到aaaaaaaa

  yyyyyyyy JMP aaaaaaaa

  zzzzzzzz 新的指令

  如果你跟踪时,你将跳转到 aaaaaaa处多次,你可将光标移到 zzzzzzzz一行,按F7让指令直接跳到此处,可省不少时间。

  *************************************

  在跟踪过程会来到:

  167:0040D558 POPAD

  0167:0040D559 JNZ 0040D563 (JUMP)

  0167:0040D55B MOV EAX,00000001

  0167:0040D560 RET 000C

  0167:0040D563 PUSH EAX<--EAX的值就是入口点的值=4010CC

  0167:0040D564 RET <--返回到记事本的真正的入口点

  *************************************

  0167:004010CC PUSH EBP <--真正的入口点

  0167:004010CD MOV EBP,ESP

  0167:004010CF SUB ESP,00000044

  0167:004010D2 PUSH ESI

  经过0167:0040D564 RET 一行,程序将来到0167:004010CC刚完全解压的真正程序第一条指令处。

  *************************************

  当我们跟踪时发现POPAD或POPFD,就要提高警惕,一般入口点就在附近了,在此程序的原始入口点是004010CC

  在0167:0040D564 RET一行键入:

  a eip (然后按回车)

  jmp eip (然后按回车)

  F5

  这个方法是让程序挂起,按F5回到windows下。

  运行 Procdump,在Task的列表中的第一个list上点击鼠标右键,然后选择"Refresh

  list". 在Task列表中找到notepad.exe,在它的上面点击鼠标右键.

  然后,选中"Dump (Full)",给脱壳的程序起名存盘.

  再在notepad.exe上点击鼠标右键,然后选中"Kill Task".

  _________________________________________________________________________

  修正入口点

  脱壳的notepad.exe程序入口是004010CC.

  再次使用ProcDump的PE Editor功能, 打开已脱壳的notepad.exe.

  修正入口点值=4010CC-00400000(基址)=10CC

  点击"OK".

  现在, 运行脱壳后的notepad.exe吧,它应该正常运行了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章