吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7047|回复: 13
收起左侧

读kissy的《也来谈谈POLYBOX的简单脱壳法》有感

[复制链接]
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看看:

1.GIF

哈,看到MZP标志了吧!

下面,我们就把这个区域给dump出来吧:

2.GIF

转存出来后保存为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发布这么精彩的文章,学习了,谢谢!希望以后多多分享,让我这种菜鸟能更好的学习!

上兴试炼品.rar

755 KB, 下载次数: 37, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jesy 发表于 2008-7-23 15:07
好文章啊来学习下啊。。。。。。。。。。
zx278212442 发表于 2008-7-23 15:36
mojingtai 发表于 2008-7-23 16:41
这个方法更简单一些。

问题是如何知道需要下BP WriteProcessMemory 这种断点,如何判断的?

谢谢
 楼主| ximo 发表于 2008-7-23 23:12
引用第4楼mojingtai于2008-07-23 16:41发表的:
这个方法更简单一些。

问题是如何知道需要下BP WriteProcessMemory 这种断点,如何判断的?

谢谢

这就需要你对一些常用的系统API有些了解吧,其次要了解壳的工作原理.
kissy已经说的很清楚,这个壳是先把资源写入内存,然后在内存中解密出来,然后运行,
很自然,我们就想到了写入内存的API,很容易想到,只要把写入内存的资源提取出来即为未加壳的程序
因此,很容易明白为什么下WriteProcessMemory断点,也很容易明白这样脱壳的原理了.
所以说,学习脱壳不是去死记脱壳的方法,而是要弄明白为什么要这样脱.
知其然更要知其所以然!这样你才能举一反三,才能更好的进步!
mojingtai 发表于 2008-7-23 23:39
引用第5楼ximo于2008-07-23 23:12发表的:


这就需要你对一些常用的系统API有些了解吧,其次要了解壳的工作原理.
kissy已经说的很清楚,这个壳是先把资源写入内存,然后在内存中解密出来,然后运行,
很自然,我们就想到了写入内存的API,很容易想到,只要把写入内存的资源提取出来即为未加壳的程序
.......

感谢 超哥的答复,现在脱壳是一切的开始,对于我这样半路出家(没有接受过系统的计算机、编程等知识的学习)的人来说,要达到你说的哪种程度真的是比较困难。很难得得到这么详细的答复指教。非常感谢。你的博客找到后,现在基本每天都要去看看,希望向你好好学习,希望今后能经常的得到你的指点,再次感谢。
石头学破解 发表于 2008-7-24 09:08
佩服!学习Ximo认真的态度和举一反三的能力。学习 -总结-领悟-进而举一反三真是一个好的学习方法的完美演绎啊,不过没有扎实的基础和深厚的内功举一反三是做不出来的,象我就是啊,看一些高深的有些地方都没看懂更别说举一反三了。
l72583662 发表于 2012-11-16 19:40
llflf带来了的大量的等等看看
l72583662 发表于 2012-11-16 19:41
了消息面草莓草莓
l72583662 发表于 2012-11-16 19:43
尝到了的劳动力的劳动力的的的{:1_903:}
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-20 23:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表