内存补丁

今天所用到的示例程序仍然是《Shark恒零基础百集VIP破解教程》中的示例程序:

打开软件发现需要注册,点击试用,发现有“(未注册)”的提示字符串:

载入OD前先查壳:

发现无壳,接着载入OD,搜索字符串“注册”:

所以先转到该处看一看:

向上溯源,查找是否有跳转跳过这一段,在较远处发现一个很大的跳转刚好能够跳过这一段,先下断:

将程序断在此处,发现跳转实现:

修改标志位,使其不实现,运行程序,证一下猜想:

运行程序后,发现猜想正确。

接下来就是对这一跳转进行处理了,处理前先看一看OD反汇编窗口各个板块表示的内容:其中hex数据表示的是反汇编列中指令对应得机器码(两位hex数据代表一个指令长度)

制作内存补丁用到的工具是:

依次点击:其他-制作内存补丁。

进入一下界面:

其中,程序名称项需要导入需要修改的程序,消息标题和启动提示可自行设置。

点击添加按钮,添加内存信息:

1、修改地址:需要对程序进行修改代码段的首地址(十六进制数)

2、修改长度:指令对应机器码的长度(两位十六进制数算一个长度)

3、原始指令:要修改部分指令对应hex数据中的机器码

4、修改指令:修改后的指令对应hex数据中的机器码

添加内容如下:

对于修改后的指令,由于此处需要将跳转nop掉,所以先修改一下,查看对应的机器码:

发现修改后是909090909090,填入数据,生成内存补丁:

打开生成的文件,出现提示框(这里需要注意的是生成的文件需要和原文件放在同一目录下):

点击确定,发现软件提示已注册。

总结:内存补丁其实就是对相应地址的指令进行修改,进而达到想要的结果,和直接在OD的反汇编窗口修改相应的指令是一样的效果。

对于该程序,也可以通过堆栈找到关键跳。

将原程序载入OD,运行程序,输入假码,点击确定后不关闭窗口:

接着回到OD,暂停程序:

转到堆栈窗口:

发先函数mvsbvm60.rtcMsgBox,该函数是来自程序(天泽医院.0046E741)的调用,而不是系统模块(user32,msvbvm60)的调用。显示该函数调用,来到反汇编窗口:

在上方发现“序列号错误”的字符串,向上溯源,看看是否有跳转跳过这一段:

在0x0046E6D8处发现跳转,下断,重新载入程序,输入假码,让程序在这里断下:

发现此处跳转不实现,先修改标志位让其实现验证猜想:

猜想正确,接下来就是修改该处跳转,这里尝试用内存补丁:

双击保存的补丁:

输入假码注册后提示注册成功:


 
 
 

猜你喜欢

转载自blog.csdn.net/song_10/article/details/84678468