好友
阅读权限150
听众
最后登录1970-1-1
|
ximo
发表于 2008-7-23 13:57
读了kissy的也来谈谈POLYBOX的简单脱壳法,很有感受,觉得文章真的相当经典,对我也很有感触。
这个方法的确是个很好的方法。学习了一下,自己写做个整理,也算是学习的一些总结和收获,并发表出来,供大家参考学习!
按照kissy的说法,其实这个壳算个捆绑壳,也就是说,这个壳并没有修改程序的源代码,而是捆绑起来,在运行的时候从内存中解密出来并且运行。
因此,我们可以从这点开始着手。
OD载入后,我们下断点:
BP WriteProcessMemory ,F9运行,然后观察堆栈。
0012FDE4 0040201B/CALL 到 WriteProcessMemory 来自 _Project.00402016
0012FDE8 00000040|hProcess = 00000040 (window)
0012FDEC 00400000|Address = 400000
0012FDF0 00920000|Buffer = 00920000
0012FDF4 00000400|BytesToWrite = 400 (1024.)
0012FDF8 0012FF48\pBytesWritten = 0012FF48
很明显可以发现,写入400个字节到缓存地址:00920000
然后我们在数据窗口CTRL+G 00920000看看:
哈,看到MZP标志了吧!
下面,我们就把这个区域给dump出来吧:
转存出来后保存为dunped.exe文件!
OK,正常运行!不过有overlay,这就用FFI处理吧。具体处理方法不在赘述!
学习这个方法后,不仅让我想起了上兴壳,于是,自己动手加了一个记事本程序,用来实践了一下!
跟了一下,发现,上兴壳同样是这种伪壳。
于是,同样下断点:BP WriteProcessMemory
F9运行后,观察堆栈!
第一次:
0012FE38 00405868/CALL 到 WriteProcessMemory 来自 _Notepad.00405863
0012FE3C 00000044|hProcess = 00000044 (window)
0012FE40 7FFD3008|Address = 7FFD3008
0012FE44 0012FF34|Buffer = 0012FF34
0012FE48 00000004|BytesToWrite = 4
0012FE4C 0012FF38\pBytesWritten = 0012FF38
发现只写了4个字节的数据,明显不是。接着F9
第二次:
0012FE38 00405884/CALL 到 WriteProcessMemory 来自 _Notepad.0040587F
0012FE3C 00000044|hProcess = 00000044 (window)
0012FE40 00400000|Address = 400000
0012FE44 01430000|Buffer = 01430000
0012FE48 00195000|BytesToWrite = 195000 (1658880.)
0012FE4C 0012FF38\pBytesWritten = 0012FF38
这次就是了,在数据窗口跟随01430000后同样发现MZP标志
于是,同样方法转存出来,程序正常运行。
wonderful !!
到此结束!
不过,说明一下,上兴这个壳还可以这么处理.F9运行后,用PETools完整转存出来就OK了!
最后感谢kissy发布这么精彩的文章,学习了,谢谢!希望以后多多分享,让我这种菜鸟能更好的学习! |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|