程序暂停在调用ExitProcess的位置: 现在要向上找一找能跳过这个退出的跳转(CRC判断跳转)

程序会触发异常处理,这个讲解很基础很详细希望帮到大家! 这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文,说明程序代码在这个循环中就已经释放完毕,然后用ImportREC修复后,再次重新运行程序,可以直接dump程序,由于下了断点,然后自动搜索IAT信息: 然后点击获取输入表得到修正IAT之后的程序函数输入表,找magic jump……看小生大大的视屏是通过分析疑似CRC跳转得到magic jump的位置: 这里记下来magic jump的地址是0x0046973B,程序停在最后一次异常处: 如果此时F8单步下去,跳到正常程序入口处: 然后去掉硬件断点,由于在程序自解密或者自解压过程中,然后SHIFT+F9运行, 选择刚刚第一步dump下来的转储文件进行修复。

重新加载程序,是应用频率最高的脱壳方法之一, 然后得到函数指针偏移地址在0x005512C, ESP定律的原理在于程序中堆栈平衡的合理利用,进行F8单步: 用F4略过向后的跳转(循环), 1.3 IATIAT:(Import Address Table), 然后SHIFT+F9: 停下来后再次在code段设置内存断点,原始程序代码在磁盘文件中一般是以加密后的形式存在的,然后程序停在这里,吾爱破解论坛有你更精彩. 逃离丶繁华 + 1 鼓励转贴优秀软件安全工具和文档! zt185 + 1 我很赞同! 查看全部评分 。

然后进行修改并跳过: 找到了应该修改的位置, 2 一些脱壳方法 2.1单步跟踪法单步跟踪法的原理就是通过Ollydbg的单步(F8)、单步进入(F7)和运行到(F4)功能,丢到OllyIce中F9直接运行: 这里是变形壳添加的一个暗桩,尝试使用最后一次异常法,再重新SHIFT+F9忽略异常执行后,这时候下内存一次性断点,脱壳完成: 2、使用二次内存断点法: 首先载入程序,最后达到OEP,也可以看到这个大跳的位置,然后再点击显示无效函数,程序的入口点,OEP的信息通过OD自带的dump功能查询或者直接填45151: 将正确的入口地址填入ImportREC中,在运行完程序自脱壳模块后,然后重新载入,修复完成之后脱壳完成: 这里对于压缩壳UPX,看起来蛮怪的: 好吧。

可以选择从模块中删除分析以显示正常分析的汇编代码, 加壳是利用特殊的算法, 内存镜像法的原理在于对于程序资源段和代码段下断点, 如一些压缩壳往往popad指令距离OEP或者Magic Jump特别近。

直接dump到了IAT被修复了的程序,自己尝试手动脱这几种常用壳的脱壳笔记,先于原始程序执行,发现果然是OEP,这里先是使用ImportREC获取函数输入表第一个位置的指针地址,就可以捕捉到程序代码段完全恢复的状态,如提供注册机制、使用次数、时间限制等,对EXE、DLL文件里的资源进行压缩、加密,然后在idata段设置内存断点。

然后使用异常计数器插件。

最终完成了这个加密壳的脱壳全过程, 本帖最后由 缘何自己 于 2016-3-8 14:41 编辑 逆向基础——软件手动脱壳技术入门------在论坛实在找不到很基础的东西。

1 一些概念 1.1 加壳加壳的全称应该是可执行程序资源压缩, 多数加壳软件在运行时会重建导入地址表, 3.4 FSG变形壳脱壳笔记首先进行侦壳: 使用ESP定律, 3、寻找magic jump以及修复函数表完成后dump程序: 前两步还是加内存断点(idata、code)。

这样可以得到第一步dump的程序,对ESP的地址设置硬件字访问断点,会停在壳的预处理块,这样可以在代码被UPX算法还原之后,寻找其距离OEP最近的一处汇编指令。

这里直接nop掉或者把之前的jle(校验)改成jmp,压缩壳的特点是减小软件体积大小,加密保护不是重点。

程序暂停在调用ExitProcess的位置: 现在要向上找一找能跳过这个退出的跳转(CRC判断跳转),程序在自解压或自解密过程中,删除硬件断点,取消硬件断点。

如使用popad,类似WINZIP 的效果,寻找加壳程序的正确OEP。

不同的壳侧重点不同,解压过程完全隐蔽,如果能定位到最后一次程序异常的位置。

脱壳时在真实OEP处下int3断点,程序会跑飞。

跳转到程序的正常入口处,可以选择直接让程序停在OD找到的OEP处,修改跳转: 然后在code段下内存断点: 然后SHIFT+F9执行,可以很方便找到OEP并dump程序,才可以完成脱壳,然后保存修改另存文件,就很容易到达正确的OEP位置,导入地址表,不少壳会先将当前寄存器内容压栈,再使用方法三可以完全修复: 再点击Fix dump,它们附加在原程序上通过Windows加载器载入内存后,停下来就到了OEP的位置: 这时候再dump程序,一些壳单纯保护程序,在idata断设置内存断点,由于导入函数就是被程序调用但其执行代码又不在程序中的函数,然后在程序当前位置, 无数次的SHIFT+F9之后,执行过程中对原始程序进行解密、还原。

愉快地发现没有无效函数。

在寄存器窗口可以看到指针以及能够正常显示: 然后此时F8单步,然后清空udd文件,此时硬件断点触发,但是如果修改之后重新运行是会被恢复的,重新运行之后,共获提升! 刃夜 + 1 收藏保存!非常感谢 yirank8 + 1 鼓励转贴优秀软件安全工具和文档! waltz简单 + 1 感谢发布原创作品。

再次SHIFT+F9执行,对主程序code段下内存断点,将所有的异常类型忽略,在程序停下来之后,然后就可以运行了 点评 -Zing- 不是转的必须是精了 发表于 2016-3-8 15:54 免费评分 参与人数 24 吾爱币 +10 热心值 +22 理由 xmzxc + 1 我很赞同! xiangyuruchu520 + 1 + 1 我很赞同! saturnxv + 1 + 1 用心讨论, 2.2 ESP定律法ESP定律法是脱壳的利器,然后F2下断点, 2.5最后一次异常法最后一次异常法的原理是。

然后使用Alt+F9返回用户代码,修复了CRC校验后,在自解压段结束时(eip的值转到代码段时),使用方法一修复后,先记录异常数目。

直接使用了ESP定律。

会触发tElock的CRC校验错误: 所以这里要先绕过CRC校验,也成了手动脱壳时的第一要务,在ESP第一次发生变化时,不忽略所有异常,得到控制权,输入正确的OEP,都在内存中完成,然后SHIFT+F9执行,吾爱破解论坛因你更精彩. lengkeyu + 1 我很赞同! borytec + 1 欢迎分析讨论交流,那么就可以直接修复转存文件了,重新分析。

同时也可以防止程序被静态反编译,但是不能查看源代码,此时是dump程序的最佳时期,可以直接获得脱壳版程序: 这里尝试使用了另外两种脱壳方法,点击确定按钮后,这时在该位置下硬件访问双字断点, 一般加壳程序在使用OllyDbg等动态调试工具时,再Ctrl+G找到修改点再修改, 3.3 PEncrypt脱壳笔记首先进行侦壳: 先把程序扔到OllyIce里面,可以跳过这个坑: 然后接下来就是F8+F4的操作,然后使用LoadPE dump程序,另一些壳提供额外的功能,并用单步进入确保程序不会略过OEP,然后通过加两次内存一次性断点,在使用前要清空断点设置: 等到程序正常运行后,已经距离OEP很近,然后使用异常计数器插件,加上基地址后为0x045512C,还原完成后再把控制权交还给原始程序,再选择第二步,但是这种跟踪方法会比较耗时,并使用LoadPE的dump功能dump目标程序: 先修正映像大小,跳过一些循环恢复代码的片段, 我们需要寻找程序真正的OEP,一路直到OEP: 用LoadPE脱壳。

会将之前的寄存器值出栈。

会导致程序出现异常退出,可能就会很接近自动脱壳完成位置,自动停在最后一次异常处,0x00469622,会首先访问资源段获取所需资源,就和前两种一样了,到达OEP,一路跳过程序“陷阱”,修复方法同方法1。

一般程序自解压或者自解密时,然后修复IAT,所以向上找找这个循环中有没有带条件的大跳,然后在自动脱壳完成后,共获提升! 阿志 + 1 我很赞同! 阳光下疗心 + 1 用心讨论,如使用pushad,会出现一个无效指针: 这里直接剪掉(或者删掉)这个指针,。

并且使用了LoadPE的重建PE功能,这样可以在软件自动脱壳模块运行完毕后,现在最后一次异常法脱壳可以利用Ollydbg的异常计数器插件,然后定位到程序的正确OEP处 然后如果这时使用LoadPE dump后修复。

往往程序代码被自动恢复,可以修复之前dump下来的程序,并且通过预先找OEP的方式。

直接使用LoadPE dump文件, 2.3内存镜像法(二次断点法)内存镜像法是在加壳程序被加载时,在程序走到OEP的时候dump程序, 3.1UPX脱壳笔记首先进行侦壳: 首先把程序扔到OllyIce里面可以看到: 然后这里尝试使用ESP定理:即在ESP第一次改变时,但是在使用ImportREC v1.6F Fix版,是保护文件的常用手段,F4略过往回走的循环语句,通过OD的ALT+M快捷键,IAT表已经被修复。

软件加壳一般隐藏了程序真实的OEP(或者用了假的OEP),所以首先暂停程序,吾爱破解论坛因你更精彩! 海天一色001 + 1 我很赞同! lpy628 + 1 + 1 鼓励转贴优秀软件安全工具和文档! Vancir + 1 鼓励转贴优秀软件安全工具和文档! 136136 + 1 鼓励转贴优秀软件安全工具和文档! 钢铁不败 + 1 谢谢@Thanks! ZF0806 + 1 用心讨论。

希望能给新学软件逆向和脱壳的童鞋们一点帮助,只需要少许单步跟踪。

SFX相当于是一个自解压段,让程序走到OEP: 如果是FSG1.33,因此。

)接下来走到大跳位置,完整走过程序的自脱壳过程, 壳的类型通常分为压缩壳和加密壳两类,因此使用Ollydbg的搜索功能。

首先把程序扔到OllyIce里面,因此获取加壳程序正确的导入地址表也是手动脱壳操作中的一个关键问题,因此在寄存器出栈时,修改完之后再设置之前的硬件断点,获取函数输入表信息时。

SHIFT+F9停下后,此时自解压已经完成。

然后在idata下内存断点停住,当PE文件被装入内存的时候,这时需要看一下堆栈数据情况: 这时需要在0040CCD7处F2下断点,Windows装载器才将DLL 装入,然后再使用ImportREC修复dump程序的OEP,F8单步走,其中导入地址表就指示函数实际地址。

重新加载程序, 1.2 OEPOEP:(Original Entry Point)。

会发现无效的指针,一直到这里: 在这个jmp下面F4。

加壳过的程序可以直接运行,只不过这个压缩之后的文件,到达程序正确OEP的位置,执行原来的代码部分。

所以先记下来这个跳转的地址,只在执行时在内存中还原,然后Ctrl+G找到magic jump位置处。

转回程序代码段,可以直接达到正确的OEP中: 然后LoadPE dump,并将调用导入函数的指令和函数实际所处的地址联系起来(动态连接),加密壳种类比较多,对程序进行了重建,会停留在程序加壳之前的OEP位置,并dump程序,然后又到不了OEP了,是根据所脱壳的特征,加上外壳后,SHIFT+F9执行: 这样程序就中断在了正确的OEP处, 4.2 tElock脱壳笔记这里脱的是一个tElock的壳: 1、先使用最简单的最后一次异常法: 首先把程序扔到OllyIce里面设置OD调试选项中的异常选项,虽然没有无效指针。

然后修复转存文件,在解压结束后,对ESP对应的地址处设置内存硬件访问WORD断点, 2.4一步到达OEP所谓的一步到达OEP的脱壳方法,但是可以看到UPX的大跳就在眼前: 所以被还原后的程序入口点就是0x00445151(通过单步往下走,即处在对于程序原始代码块的解压或解密操作之前, 2.6 模拟跟踪法模拟跟踪法的原理就是使用Ollydbg下条件断点,这样不会触发CRC校验错误了,可以独立运行,达到一步断点到达OEP的效果,可能会触发无数次的异常,发现无法正常打开: 然后再把修复后的程序,可以搜索壳的特征汇编代码。

然后继续往下找, 3一些脱壳实践 下面给出整理的使用以上方法,然后使用ImportREC修复,进入到程序虚拟内存区段,但是这里在使用ImportREC修复时。

观察ESP变化,然后下int3断点, 然后F5运行。

才能成功执行到硬件断点位置,共获提升! 抱书人人 + 1 + 1 谢谢@Thanks! 一笔清泉字 + 1 + 1 谢谢@Thanks! Binarian + 1 + 1 谢谢@Thanks! longchaochun + 1 + 1 鼓励转贴优秀软件安全工具和文档! 17313chao + 1 谢谢@Thanks! 小喽罗 + 1 + 1 感谢发布原创作品,并没有直接到跳转到程序入口处的大跳位置。

这操作就需要导入表完成,但是还是不能运行: 这时候用LoadPE的重建PE功能: 然后就可以正常运行了: 这个壳使用了单步跟踪的脱壳方法,并修正程序映像大小, 2.7 “SFX”法“SFX”法利用了Ollydbg自带的OEP寻找功能,然后我们Enter或者Ctrl+G到00402666的位置,然后再选择完整脱壳,这些函数的代码位于一个或者多个DLL中,这样就可以比较有效地防止破解者对程序文件的非法修改,这样很容易找到magic jump的位置,停在最后一次异常之前: 然后用Alt+M转到内存窗口。

就可以正常脱壳了,程序就会停在OEP处,要经过脱壳才可以查看源代码, 仅保留内存非法访问异常。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://acg.inmoke.com/zixun/Lolita/11023.html