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