第四十五章-ReCrypt v0.80脱壳(续) 本章是对上一章节的补充。 1.OllyGhost(DIY过的OllyDbg)(PS:OllyGhost压根没用上,在XP下运行会提示无法在NT系统运行,大家还是用原版OD吧) 2.OllyDump(OD的dump插件) 3.LordPE 4.Estricnina_v0.12 5.POKEMON_AntiAttach 信息收集: 在我们开始分析UnPackMe_ReCrypt0.80.exe之前,首先用LordPE查看一下该程序PE的信息。 直接选中该程序单击鼠标右键选择Load into PE editor(LordPE)(PS:还记得上一章节介绍过的这个系统菜单项吧) 这样我们LordPE的PE编辑器就直接打开了该程序,比较方便。 这些字段非常重要,因为很多壳在解密区段的过程中会修改这些字段。我们可以看到这里NumOfRvaAndSizes字段就被修改过了。 因为一般来说这个字段的值为0x10,不可能是0x7A0B5FD9这么大一个值。 这里NumOfRvaAndSizes这个字段的偏移是0xB4。 接下来我们需要定位该程序的OEP,这里我们使用PEID的Generic OEP Finder插件来定位。 将UnPackMe_ReCrypt0.80.exe拖拽到PEID中,单击PEID主界面右下方的右箭头按钮。 会弹出一个菜单,我们选中Plugins(插件)菜单,接着选中Generic OEP Finder菜单项。 不一会儿就会弹出一个消息框,显示OEP为0x401000。 好了,信息已经搜集完毕了。下面我们来展开攻击。 收集到的信息如下: 1.OEP 00401000 2.SizeOfImage 00006000 3.NumberOfRvaAndSizes 偏移0xB4, 我们修改为了0x10 攻击: 我们首先直接运行UnPackMe_ReCrypt0.80.exe,会发现该程序CPU占用率非常高。 下面我们需要用到Estricnina这款工具,使用这款工具我们可以挂起该壳所创建的3个线程。(PS:这一步不是必须的,但是挂起这3个线程,我们的电脑运行起来会顺畅一些,不会感觉那么卡了) 这里我们打开Estricnina主程序。 在进程列表中找到UnPackMe_ReCrypt0.80.exe对应的进程。 双击之。 可以看到有3个线程,分别选中这3个线程,并单击下方的Suspender(挂起)按钮。 我们可以看到这3个线程都挂起了。 好,这里我们可以看到这3个线程都被挂起了,我们再来看看该程序的CPU占用率,已经由%99减到了%0。 现在我们可以顺畅的使用我们的机器了。 攻击未被检测的内存块 下面我们需要用到POKEMON这款工具,通过这款工具我们可以绕过该壳的Anti Attach(反附加),我们还记得恢复的那个偏移0xB4处的NumOfRvaAndSizes这个字段的值吧。(其实没有必要恢复NumOfRvaAndSizes这个字段的值,恢复它仅仅是为了不让OD弹出那个无效PE格式的错误框而已) 我们选中UnPackMe_ReCrypt0.80.exe对应的进程,单击Anular protection AntiAttach按钮,会发现那个骷髅头在转动,骷髅头停止转动就表示完毕了。接下来,我们打开LordPE,定位到UnPackMe_ReCrypt0.80.exe所在进程。 我们可以看到LordPE的进程列表中显示的UnPackMe_ReCrypt0.80.exe所在进程的ImageSize为0x00001000,我们应该还记得该程序的ImageSize为0x00006000才对呀。这里为了更好的修复IAT,我们需要将这个ImageSize修正。 修复方法:我们在LordPE的进程列表窗口中选中UnPackMe_ReCrypt0.80.exe对应的进程,单击鼠标右键选择correct ImageSize。 我们可以看到ImageSize已经被成功修复为了0x00006000。 好了,我们已经搞定了一部分,继续。下面我们使用OD附加该进程。我们可以看到弹出了一个错误框提示无效的PE格式。 我们单击Aceptar(西班牙语:确定)按钮。断在了ntdll.DbgBreakPoint这个API函数中。 我们已经知道了OEP为0x00401000,我们直接在反汇编窗口中单击鼠标右键选择Go to Expression,输入401000。 我们可以看到转到了OEP处。我们选中第一条指令,单击鼠标右键。 选择New origin here,将EIP的值修改为0x401000。 我们可以看到寄存器窗口中的EIP寄存器的值已经被修改为了0x401000,也就是OEP。现在我们使用OllyDump插件来进行Dump。 首先我们将OEP的值填上,接着单击IAT AutoSearch按钮,自动定位IAT。我们可以看到IAT已经被定位到了,IAT起始地址的RVA为0x2000,大小为0x20,接着我们单击Get Imports按钮,获取导入表信息。可以看到获取到的IAT项都是有效的.接着单击Fix Dump修改刚刚dump出来的文件即可。 直接运行修复后的程序,报错了。我们将其拖拽到LordPE的Rebuild PE按钮上去(重建PE)。 完美运行。我们再来看一看脱壳后程序的CPU占用率。 恩,可以看到CPU暂用率为零,搞定。
本系列文章汉化版转载看雪论坛
感谢原作者:RicardoNarvaja(西班牙人)
感谢热心翻译的朋友: 1~3章译者:BGCoder 4~58章译者:安于此生
全集配套程序下载地址:
|