本帖最后由 baiyunem 于 2013-6-28 10:54 编辑
本人是个菜鸟,菜到什么水平?只能告诉你,我就学了Shark恒老大那10来课而已,知道什么水平了吧。。。所以可能写得很差,希望大家别笑我,
注册以来因为工作、生活等各种原因(也许是因为懒,囧),一直都没能入门,至于破解教程,什么黑鹰的、天草的硬盘放了一堆,但是一直没看。。。汗
这篇笔记是遇到带Overlay数据壳,在Google搜脱壳后如何处理附加数据,出来结果的第一篇就是这位大牛2004年写的文章,
http://www.pediy.com/kssd/pediy06/pediy6923.htm
除了看以外,我习惯上动手做一遍(发现写一遍更深刻哈,不过就是太累了),于是有了本文。
软件一, XX钢笔2.0先查壳
额,upx+overlay… 看大牛的文章知道是有overlay 的,只能用Shark 恒老大教的知识,一步步来了,碰下运气。用OD 载入程序,
ESP 定律下断后,程序断下在这
可以看到程序断在了ntdll 领空,于是我们执行到用户代码
OD这时提示我们,这软件可能有壳,不管,因为已经查过,的确是有壳的,点否就是了,然后程序一直运行下去
直到回到了程序领空,就停了下来 这时我们按esp 定律一步步跑下去,继续寻找我们需要的OEP 。直到
这里不能点00420978这行F4,否则会跳到系统领空,然后绕了几个圈绕晕你再回这里
我就在这里绕了几个圈,然后忽然发现exitprocess… 顿悟!420976 时不点00420978 这行,而是直接点下一行0042097E ,F4 ,于是程序来到0042097F 的jmp ,Shark 恒老大说的~ 大跳,嘿嘿
跳完以后就是一片光明,我等菜鸟心中一顿狂喜。。。OEP! 于是按照老大的教程Dump之 附加数据修复:
之前没经验,直接按大牛说的,打开LordPE ,点PE Editor ,选没修改过的原程序,然后点Sections
就可以看到区段数据(这完本文才发现PEID 的PE 区段右边的箭头就可以看到区段数据,囧)
很开心,果然和大牛写的数据一样(如果不一样,就要考虑有没有做错,不然的话这文章是学下去的。。。毕竟是04年的文章),
最后一个区段起始是8E00 ,大小1000 ,于是按大牛的教学,推测8E00+1000=9E00 为附加数据的起始,这时,我们使用WinHex 打开源程序,转到9E00
这时,我们就可以看到
这里应该就是附加数据的头了,然后我们选择从9E00 到文件结尾的数据
然后用WinHex打开修复好的文件,在文件结尾粘贴0字节(不知道在哪的看上图红框上一行),然后点新填充的那个字节,粘贴复制过来的附加数据 然后保存文件,再用peid 看一下文件
好像正常,运行一下,
额,强制更新,不给用。。。本想跳过验证的,结果太菜N次下来都没弄好,谁能教教我,囧rz… 算了,本来就是按大牛文章学overlay的,既然能运行,应该ok了吧^_^ 不纠结了继续往下学
软件二,某英语速记软件
额,这壳第一次见,不知道是不是强壳,反正直接上Shark恒老大的ESP定律,结果撞墙。。。于是上脚本,无果,N次听在系统领空后提示This is OEP,于是傻眼。无奈,求助万能的Google,终于找到了想要的。。。 程序载入后,停在系统领空
直接Alt+F9 跑出来,停在下图,然后按照谷哥来的办法,F8 往下走,
ESP 定律下断后,程序停到了下面这里
F8 大跳出去,于是我们看到了阳光
然后记下该记的,Dump 之
现在运行,显然不行。。。不过可以先查壳
脱掉了。。。大牛一句“脱壳我就不说了”,俺花了好长时间,泪流… 好吧,擦干泪继续看大牛教程, 用OD载入Dump后的文件,这时我就想,是否要修复,大牛没说,不过在大牛贴的数据里,发现了蛛丝马迹
有下横,额,那就先修复
ImpREC载入Dump出来的exe,按Shark恒老大的做法,自动查找IAT,获取输入表 我擦,一堆无效的,显然直接保存不行,Shark 老大没说咋办。。。额,又求谷哥去,发现有人提到1 级修复,于是发现右键有1 、2 、3 级修复,喜,于是一个个点开,右键选1 级修复,弄了好久,
忽然发现右边一堆按钮,灵光一闪,点无效函数,自动选上了所有无效的函数,然后在任意一个上面右键,选对应的修复,晕,全弄好了,看来我又浪费了不少时间。。。亏我还一个个点了好久
还好1 级就全部修好了… 转储,于是俺也有了_.exe ,继续看大牛的教程 准备修复overlay 先查区段,的确如大牛所说:4CA00+13724=60124
按照大牛说的,复制过去,和上一个软件一样粘贴到修复好的exe 末尾…
记下红框中的数字,这个是附加数据起始,到时候要用…然后另存
用od载入这个有附加数据的exe,下断SetFilePointer后,F9运行,断下后,看右下角堆栈[img=554,178][/img]
额。。。13C?和大牛的不一样,而且值这么小,应该不是,于是继续F9 ,再次断下,依然不是,心里凉了半截,反正到这步了,继续F9 好了
阳光啊~ 可耐的60124 ,我看到你了。按大牛说的,源程序同样办法也可以断下60124 ,我也试了,的确如此。 按大牛所说ATL+F9 到返回用户代码,找找这个数字的来源
大牛的代码里直接指名了7C92E4F4 是要点,也就是EDX 当前的值,然后我们按大牛的要求,找找什么时候给EDX 赋值的。因为当前所在是tern ,按F8 出来看看,
果然没几行代码,都没有EDX ,按提示,我们继续跑到retn 去
出来一瞧,眼花缭乱,果然在上几行,我们看到了edx 00493577 . 8B15 CC7A4A00mov edx,dword ptr ds:[0x4A7ACC] 按照Shark恒老大早几天写的走向大牛,这句意思就是将4A7ACC的数据写到edx去,也就是说,我们要去4A7ACC瞧瞧。重新载入程序,在左下角地址那右键,选转到,填入4A7ACC,点OK,去到以后,像ESP定律那样下断,不过那时候老大是用访问,我是选了硬件写入,感觉这样会更准确点(建议清掉之前的断点,不然可能你会又断在SetFilePointer上),F9以后,断在了这里
果然如大牛所说 0049349B . A3 CC7A4A00 mov dword ptr ds:[0x4A7ACC],eax EAX数据写入4A7ACC,但是往上看一句 00493496 . A1 D07A4A00 mov eax,dword ptr ds:[0x4A7AD0] 4A7AD0的数据写入EAX,也就是说,4A7ACC实际上是4A7AD0的数据,那我们就要找什么时候写入4A7AD0,于是重复一次刚才干的就是了 重载,转到,下断点,F9 ,我们来到
60124是我们要修改的,但是改多少,改之前附加在文件记下的954368,但是不能改954368,因为这个是十进制的,这里用的是十六进制的,所以要转化为E9000。保存文件,试一下吧,可以鸟~~
水平太菜,弄这文章都弄了很久,反复操作了好多次。。。唉,求老师,没有人问,往往小问题都要搜半天,撞墙都撞到满头包,囧rz...
原版软件下载地址
http://pan.baidu.com/share/link?shareid=1692980553&uk=3893310742
http://pan.baidu.com/share/link?shareid=1689701998&uk=3893310742
|