E语言拼装脱壳图文教程
作者:hyperchem首先说下,某个大侠已经把E语言分析的很透彻了,不过俺的基础实在差,看不懂的说,这个拼装脱壳完全凭感觉的说,秉承着一个信念:让一切恢复原状。
试炼品使用E语言4.12写的,然后用VMProtect 1.8配合VMPHelper加的最强保护。应该算强了吧!
好了,开始脱壳。
OD里面当然是不好运行啦,我们直接运行。然后DUMP进程。
然后用LordPE保存data段和rsrc段备用
然后我们找一个E语言程序的程序作为模板程序,把包括文件头在内的text段和rdata段都拔下来。
然后用我们之前保存的data段和rsrc段拼上去(就是用十六进制打开,然后依次粘贴到后面),保存!
然后修正一下区段名和区段属性等信息并重建一下PE。
修正后的信息如下。
这个时候还是没有图标的说。容易,用LordPE打开Dump的文件,对照修正下下RVA就OK了~
这个时候呢 图标就出来了。
下一步,我们要重建一下输入表。
因为我的模板程序也是加壳以后脱壳的,所以原始的输入表早就不见了。
不用管,直接运行模板程序,然后用ImportREC获取IAT,然后修复我们刚才拼装后的程序。
这个是为什么呢? 因为我们之前用的就是模板程序的代码,所以直接用模板程序的IAT重建就可以啦!
OK,这样拼装后程序的基本骨架已经完成了。但是还是不能运行。继续我们的修复之旅。
先说一个经验吧,E语言程序初始化的时候会修改data段的一些数据,那么我们之前dump下来的data段就是被修改过的了,所以我们要找出被修改的数据,并还原它。当然,我们不能借助任何的已知的数据。
好了 OD载入修复好的程序。
打开内存镜像,然后对data段下“内存写入断点”,然后运行。
中断在这里。
中断的位置是E语言的核心库。
写入的指令是
rep movs dword ptr es:,dword ptr ds:
再看目标地址的数据,跟源地址的数据是一样的。那么也就是说,目标地址的数据是任意数据都可。我们把这里清零。
实际上这段是E语言用来运行的一段类似IAT的结构,是用核心库初始化的。
继续运行,会再次中断在这里,还是同样的处理方法。然后一直运行,直到中断在这里:
这里的修改就跟前面的不一样了。
注意这里的赋值指令是:
add dword ptr ds:,eax
而我们注意到,当前ecx里面的值其实初始化以后的值,如果再加上eax的话就肯定是不对的了。那么下面大家应该知道修正的方法了吧:
就是把当前的值减去eax中的值,然后修正到中。这样就可以了!
修正完成以后保存,然后程序就能运行啦!!至此脱壳完成!
修正的地方相对较多,就不一一列举了,大家自己试一下的说!
呵呵,支持大叔转帖,辛苦了! 太精采了.
目前程度僅能收藏! 果然强大.... 汗,我怎么一点看不懂!! http://www.jisuwg.com/jshj0622.rar
嘿嘿,你拼装下看,让你第一步就pass掉 学习了 很強大!
我要好好學習一下! 怎么用啊~ 我是个新手,不会:'( 这个不能,,支持一下,顶起来
页:
[1]
2