【文章标题】: ASPr 2.0.06.23 Alpha另一种法子脱壳(Import Recovery&补区段&Script)
【文章作者】: wynney
【下载地址】: http://bbs.pediy.com/attachment.php?attachmentid=5186
【操作平台】: XP SP2 64位双核
【作者声明】: ASPr 2.0Alpha两个分支的处理
--------------------------------------------------------------------------------
【详细过程】
一、前言
前几天似乎在论坛上看到一个程序就是2.0Alpha的,volx大侠的脚本不支持,遂连同1.31一并看了下,发现1.31和2.0Alpha
基本上差不多,稍有不同。
二、“探听军情”
忽略除了内存访问异常和指定异常之外的所有异常
到达最后一次异常后在Code段下断,Shift+F9,中断在Code段后
易发现输入表是Call类型的,而且有Stolen OEP,这就是我们要探听的军情了
三、输入表处理
请忽略所有异常
bp VirtualAlloc,Shift+F9,中断两次,取消断点
Alt+F9一次
接着
Ctrl+F9一次
Shift+F9
1、Ctrl+B:8A 00 FF 43 08
2、Ctrl+B:8B 54 24 0C 89 02 8B 44 24 0C 89 06 0F B7 44 24 04 01 43 08
3、Ctrl+B:53 8B D8 8B C3 E8 ?? ?? ?? ?? C6 03 E8 43 89 03 5B C3
以下是Patch代码
另外判断是Jmp还是Call类型的方法
Ctrl+B:8B 54 24 0C 89 02 8D 4C 24 0C 8A 54 24 07 8B C3
4、Ctrl+B:C6 03 E9 8D 53 01 89 02 8B 45 08 89 10 B8 05 00 00 00 5B 5D C2 04 00
四、到达伪OEP&补区段
做了上述2处Patch后,Shift+F9,中断在00A83767,删除断点,注意看ECX=00CE0178
这个地址就是Stolen Code的起始地址
Ctrl+G:00CE0178
补上这么几个区段
Region00920000-00928000.DMP
Region00AB0000-00AC8000.DMP
Region00BB0000-00C00000.DMP
Region00CE0000-00CE1000.DMP
修改虚拟地址后,最后只选上“验证PE”重建PE!
想完美恢复Stolen OEP的话,就根据程序语言特征从这里慢慢分析吧:)
五、ImportREC上阵
按照如图所示操作
如若想顺便解决下跨平台的问题的话,就纠正几个ntdll.dll函数为kernel32.dll函数
ntdll.dll kernel32.dll
*********************************************************
RtlUnwind RtlUnwind
RtlFreeHeap HeapFree
RtlAllocateHeap HeapAlloc
RtlGetLastWin32Error GetLastError
纠正OEP为8E0178,修复!
最后优化下文件吧
附上简单的修复脚本吧
请忽略所有异常,否则用不了,没测试其他平台如何
?
--------------------------------------------------------------------------------
【经验总结】
1、思路在于人想出来的:)
2、本想写一个支持1.31和2.0 Alpha的脚本的,写起来才发现,要做到通用还是蛮要点时间的,对Volx大侠的敬佩之情由然
而生啊
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年04月12日 wynney