OD调试 内嵌补丁(一般调试加壳)

内嵌补丁的核心是 在没有代码处(程序只是为了填满内存)写上代码(一般是赋值)利用程序跳出再跳回去实现(写的时候与源程序保持一点距离)
优势:解决在程序上直接写代码后面代码被覆盖的情况

跳出来跳出来
修改+跳回去修改+跳回去
OD调试技巧经验
1.判断跳转
不等于 跳转
等于 不跳转
2.有时间限制 在killTimer下断点
3.程序用switch语句判断输入是否正确
4.跳出switch语句
跳出switch
Resettoolbars Setting 意味着重新建立窗口,跳出循环
5.vc程序 初始是 push ebp
6.利用堆栈搜索破解

PS.
记录一个调试
利用堆栈找到dialog(弹窗)发现三次调用CALL
内嵌补丁 将循环次数写在 PE文件的数据区
利用nonawrite插件写汇编指令 跳出来再跳回去(注意:跳出来的命令修改后会覆盖下一句,写补丁时要加上这一句再跳回去)

记录一个调试
对话框分两种 模态(必须判断,想取消取消不了)和非模态(对话框可以切换)
利用exescope找到nag窗口的句柄(比如是103,16进制67) 在OD中搜索
push 0x67观察堆栈看函数从那个地址返回的()
模态和非模态
dialogboxparam 模态函数
createdialogparam 非模态函数)
这两个函数都是从后往前执行(由上图),所以执行句柄是最后一步操作,这就可以从后往前找到弹窗函数
然后跳转到那个地址,找跳转和比较

记录一个调试
目的去掉结尾的nag窗口(注册窗口)
exescope找到窗口句柄,在OD中搜索push 0x64(16进制),这次你会发现很多push 0x64 全部下断点,调试找到最后nag窗口的那个push 0x64 ,找到最近的跳转和比较 发现API函数RegQueryValueA (获取一个项(注册表:windows为程序提供的数据库用来记录程序的注册,进程等信息)的设置值)对应函数不同参数,找到注册名和密码存放的位置,找到验证函数,修改输入值,达到破解。

记录一个调试
注册机(程序或模块)利用给定的算法得到注册码(flag)
有输入框 寻找API函数getdlgitemtextA或者GetWindowTextA
在API函数下断点找到算法程序
下断点的方法 在命令行里输入
bp getdlgitemtextA(如下图)
下断点
找到算法程序,通常来说是将输入分割分割成一个一个的字母转化成ascal码再运算
(寄存器ecx 循环计数器 遍历拆分的这几个字符)

记录一次调试
程序反调试 利用CreateToolhelp32Snapshot获取当前进程的快照,再结合Process32First获取第一个程序进程的名字利用lstrcmpia函数与“OLLYDBG.EXE”(某调试程序)对比,达到反调试。(单纯的对比名字好像很弱(笑哭~2333))

为了心中的美好而战

发布了42 篇原创文章 · 获赞 17 · 访问量 4990

猜你喜欢

转载自blog.csdn.net/weixin_45055269/article/details/103006341
今日推荐