一、首先咱们将该文件放到OD插件文件夹里而后打开od加载发现不能加载。工具
二、此时咱们将该文件拖到OD,首先相似与exe文件的00401000咱们先走到10001000处,而后查找字符串加密
三、咱们在这找到关键跳转,在这咱们有两处跳转须要注意,这两处跳转实现的状况下最终到的是同一个位置,所以咱们将跳转语句直接改为jmp到该位置,这样咱们就实现了最终的目的插件
一、patch的原理很简单,在原先的代码实现过程当中,EP先将加密的OEP代码解码,而后在跳转到OEP处3d
二、patch运用的是一个洞穴代码,这个洞穴代码实现过程是先将解码后原先跳到OEP的跳转改跳到一个文件空白区域(即为洞穴区域),在所跳转的位置设置修补代码实现所预期的效果,最后在修补代码下面加上跳到OEP的代码实现内嵌patchblog
三、洞穴代码的设置一般有3种:设置到文件的空白区域、扩展最后节区后设置、添加新的节区后设置字符串
四、在这咱们须要注意一点:有些文件经过校验和计算方法来验证特定区域的代码是否被修改,所以咱们在修改代码以后必需要修改校验值或者比较部分。get
五、下面咱们用patch的思路分析一个程序,首先就是查壳,发现是upx的壳class
六、紧接着咱们能够用esp定律法找oep,这里首先单步,对应esp数据窗口跟随,而后下硬件访问断点,重载后运行到达以下位置。原理
七、而后咱们找到oep位置为00448bfd,在此作记录扩展
八、咱们打开软件查看有用字符串发现“失败”
九、咱们查找字符串找到失败的字符串
十、这里很简单就能看到关键跳转,咱们所须要作的知识将je改为jne,咱们记下该处地址004010f5,对应机器码为0F84 22000000,而jne对应机器码只需将84改为85
十一、咱们回到以前跳向oep的代码位置,发现下面有一段空白区域,这里咱们能够用来写洞穴代码。首先将jmp到oep的代码改为如图所示
十二、编辑该处代码,将004010f5处的数据中0f84改为0f85,分别有如下两种方式:
mov byte ptr ds:[004010F6],85
mov dWOrd ptr ds:[004010F5],0022850f
至于为何,应该不必多作解释吧。
1三、紧接着咱们的修补代码完成,以后咱们须要从新跳回到oep,如图
1四、这样,咱们就将内嵌补丁制做完成,保存修改后咱们看下效果如图:
一、本实例所用工具:OD、PEID
二、实例连接:连接:http://pan.baidu.com/s/1bpx8ybd 密码:cxf8