13. OD-内嵌补丁,过期的软件DVD Menu Studio破解,switch函数,break等于KillTimer

版权声明:墨痕诉清风 https://blog.csdn.net/u012206617/article/details/88086443

内嵌补丁指在程序文件中把补丁代码写入文件里面达到破解的目的。

 查询KillTimer函数,意思是break的意思

eax不能等于3,等于4就会进入正确轨道

我们回溯cmp eax,3指令,回到跳转该指令的位置

直到最开始的switch位置,下断点

 这里是赋值ax的地方,下图

如果我们修改这行代码未mov eax,4,那么这行代码会覆盖下面两行代码,因为原本3个字节的指令变成了4个字节的指令。

这时候,我们就需要学到 内嵌补丁

拉到程序最后面

这些地方就是内嵌补码的书写位置

我们将mov eax,4写入这里,并把被覆盖的代码粘贴在这里

如何修改源代码未jmp到我们补码的位置 005E47D0

接下来内嵌补丁结束也要返回去源位置

改完后发现一个问题,程序进入死循环,永远退不出switch,无限弹出注册成功对话框

F8调试,发现只有eax等于B,switch最后一个选项才可以正常退出,否则持续死循环,必须找到break类似的退出

我们找到了跳出死循环的跳转指令及参数 

我们修改代码4改为0B

程序破解成功了。

第二种方法:

进入

按暂停,打开堆栈界面,K界面

因为先生成界面,后弹出neg窗口,使用我们判断从最后一个开始向前寻找条用的堆栈窗口。

按界面exit退出注册界面断点才开始继续,否则断点不会过call,判断此call就是验证对话框的运行函数体

确定此call就是验证对话框的函数体

然后我们向上寻找整个此函数体的开始部分,寻找push ebp,下断点

F8跟踪运行寻找关键跳转,跳出此验证对话框的跳转点,改为nop

破解成功

总结:1. 内嵌补丁是为了修改指令后覆盖源码的情况下,在最后面添加代码做程序的补码而使用的。

2. switch寻找跳出循环的break关键跳转位置。

猜你喜欢

转载自blog.csdn.net/u012206617/article/details/88086443