版权声明:墨痕诉清风 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关键跳转位置。