欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

接上段。呀,弄错了名字,不是1212,是sworm。i am sorry! 你们先慢慢看,我先下了,网速太慢。 (3千字)

接上段。呀,弄错了名字,不是1212,是sworm。i am sorry! 你们先慢慢看,我先下了,网速太慢。 (3千字)

10、然后,我们继续跟踪,不远处就会到如下:
015F:004AAB53  B95B0B0000          MOV      ECX,00000B5B
015F:004AAB58  EB01                JMP      004AAB5B
015F:004AAB5A  EAF3AA61EB01EA      JMP      EA01:EB61AAF3
015F:004AAB61  FFE0                JMP      EAX                                <--在此处停下,此时EAX=OEP=401000
015F:004AAB63  0000                ADD      [EAX],AL
015F:004AAB65  0000                ADD      [EAX],AL
也许你看到的一部分代码和我的不一样,为什么?因为程序到此处时会打扫战场。把前后的代码全部清零掉了。只有简单的 JMP EAX 跳转到程序真正的入口处了。好了!说了这么多,到 JMP EAX 处我们停下,下指令
/dump 400000 AD000 c:\temp\dump.exe
当然,这以后要下指令
a eip /jmp eip
然后,用PEEditor把这个进程中止掉。(注意哦,不要让他继续运行,因为为了得到完整的.idata Section我们是对代码做了修改的)
11、前期工作我们完成,但这仅仅是个开始。开始我们繁重的修补工作。
用HEX WorkShop打开znzdatII.exe和dump.exe。把znzdatII.exe开始的 600 个字节替换到 dump.exe 头部的相同个数的字节。然后保存退出。
这是由于我们得到的 dump.exe 头部的 PE结构完全被破坏了。所以如果你直接用 PEditor 或者 ProcDump 无法得到正确的文件的原因之一。
12、用 PEditor 打开 dump.exe 修改 Entry Point = 000001000,(由前面跟踪时得知)。进入 directory 修改其中的 Import Table 为 94000。(这个由跟踪得知)。进入 sections ,右键执行其中的菜单命令 dumpfixer 使各个 Section 的 RS=VS,R0=V0。
13、最后还要启动我们的 HIEW 来修改其中的 JMP [xxxxxxxx] 指令其中的偏移。
查找 FF,25,当定位的地址反汇编时显示为许多一连串的 JMP [xxxxxxxxx] 指令时说明我们找到了地方。可以看到类似如下的代码:
000835AF: 5D                        pop ebp
000835B0: C20400                    ret 0004
000835B3: 90                        nop
000835B4: FF25DC005D00              jmp dword ptr [005D00DC]
000835BA: FF25E0005D00              jmp dword ptr [005D00E0]
000835C0: FF25E4005D00              jmp dword ptr [005D00E4]
000835C6: FF25E8005D00              jmp dword ptr [005D00E8]
000835CC: FF25A0025D00              jmp dword ptr [005D02A0]
000835D2: FF25A4025D00              jmp dword ptr [005D02A4]
000835D8: FF25A8025D00              jmp dword ptr [005D02A8]
可以看到偏移地址定位到跟踪时我们发现的申请的内存地址。(这也是许多加壳程序来防范脱壳的一种办法)。而这并不是程序Import Table应该指向的真实地址。我们对比一下该如何修改
内存空间首地址        005D0000
Import Table首地址    00494000    <-- Image Base+Import Table RVA=400000+94000=494000
所以 005D00DC 对应地址为 004940DC ,所以我们只需要修改每个偏移地址中的两个字节 5D00 = 4940,以此类推。由于这些 JMP 指令有许多
(我发现的情况它们都在文件偏移 835B4 - 83F12 空间内)。因此修改是个很繁重的工作。批处理修改时必须小心!以前我就是因为无意中错误地修改了不相关的一个字节,结果让我走了很多弯路,以为自己的这种脱壳方法无效。结果第二次重新测试成功。不过这已是一个月后的事了。现在写这篇文章想起当时来真是.......)
【后记】
由于 PE-SHiELD 0.2b2 版本并不是最新版本,所以可能大家都没有注意。但是我当时并没有发现脱壳机。而且ProcDump中Script对此无效。所以只好自己手动了。一来了解一下这个壳的特点。二来掌握一下脱壳方法,以便以后再遇到这类壳时也好有个防范。呵呵.......。新版的 PE-SHiELD 0.25 已经有了脱壳机,就不用我cao心了。(这论坛"看清楚"了,是我cao心了。不是我cao!!!还让我重发。:-()
[闲言闲语]
小丁丁,就别找Sun Bird[CCG]大哥来扁我一顿了。这篇文章作为向他老人家献上的"保护费"如何?

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功