感谢 1986.1024@163.com 在本站发布原创作品!
大家好 我是千里之外 很抱歉 前一个教程有未注册的字样 这次我已经弄好了 呵呵 好了 我们开始我们今天的课程
手脱UPX
工具 PEiD_0[1][1].94 OllyDBG
脱壳对象 QQ聊天记录察看器 5.3
好了 我们先来查下壳(这个软件本来是没有壳的 为了说明方便我加上了壳)
UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
我这里介绍3种脱壳的方法
1.基本方法
看我操作 首先不要分析 因为有壳分析也出不来什么结果
004AAC41 ^\72 ED JB SHORT QQ聊天记.004AAC30
这是个往回跳的 语句 我们不能让它回去 因为那样的 话我们就总在这个循环里出不去了
我们点下一行 然后按F4运行到所选的地方 好了 继续往下走
004AAC57 /73 0B JNB SHORT QQ聊天记.004AAC64
这是个往前跳的 但没有实现 我们要让它实现 因为我发现这样可以节省不少麻烦
实现的方法很简单 在这个语句处按回车 在按F4就实现了 这个跳转
004AAC72 ^\EB D4 JMP SHORT QQ聊天记.004AAC48
这个我们也不能叫它跳回去 我们点下一行 然后按F4运行到所选的地方
004AAC79 /72 11 JB SHORT QQ聊天记.004AAC8C
让这个往前跳的跳转实现 在这个语句处按回车 在按F4就实现了 这个跳转
004AAD30 ^\E2 D9 LOOPD SHORT QQ聊天记.004AAD0B
这也是个循环 我们要跳出去
004AAD6D 8903 MOV DWORD PTR DS:[EBX],EAX
004AAD6F 83C3 04 ADD EBX,4
004AAD72 ^ EB E1 JMP SHORT QQ聊天记.004AAD55
004AAD74 FF96 9CB70A00 CALL DWORD PTR DS:[ESI+AB79C]
004AAD7A 61 POPAD
004AAD7B ^ E9 5CB5FDFF JMP QQ聊天记.004862DC
004AAD80 98 CWDE
004AAD81 AD LODS DWORD PTR DS:[ESI]
004AAD82 4A DEC EDX
004AAD83 00A8 AD4A000C ADD BYTE PTR DS:[EAX+C004AAD],CH
004AAD89 97 XCHG EAX,EDI
004AAD8A 48 DEC EAX
004AAD8B 0000 ADD BYTE PTR DS:[EAX],AL
注意上面的语句 004AAD7A 61 POPAD
这是出栈的标志 我们很可能已经到了 程序的入口
004AAD7B ^ E9 5CB5FDFF JMP QQ聊天记.004862DC
这是一个大跳转 它跳到我们程序的入口点
004862DC 55 PUSH EBP
这就是程序的入口点 到这里 壳就脱完了
我们再来看看
Borland Delphi 6.0 - 7.0 可能你会问我你怎么知道这就是入口点
我可以告诉你 你可以先脱了试试 还有如果你在一个CALL处程序运行了 那么再从新载入 在那个CALL处F7跟进 然后F8步过
还有往往壳的出口点都有 POPAD这个指令 和一个大的跳转 我们可以根据这个来找壳的入口 这里引出我们的第二中方法
2.查找POPAD法
我们从新打开那个有壳的软件 右键查找命令 POPAD 看看是不是又来到我们刚刚的地方了 有时候 要多找几次 它下面有一个大跳转的就是了
3.ESP定律脱壳
这个其实我也不十分的明白 大家看我操作就可以了 这个方法我不常用 但为了大家能学的更全面 我也说说 看见没有只有ESP是亮着的
看到没有直接来到我们的跳转的地方了 呵呵 这个很快 但是我也不知道为什么
另外我告诉大家要学习一些汇编的知识 网上有一个中山大学的汇编教程大家有时间可以去看看
好了 教程就到这里吧 大家有什么问题 可以去77733.net的动画教程区发贴我会及时答复的
QQ506398911