
可以达到不脱壳的妙用。含义:把补丁写入程序代码,就叫内嵌补丁
那我们先看看今天的程序
是一个写DVD目录的程序,点continue就可以进入使用了 发现一个还有29天 就过期了 ,点enter reg.code的时候,乱输出现not valid的窗口 ,当然我们改一下日期 ,它的continue就会灰掉 ,然后这个程序就不能用了,需要购买或者是注册码。
把时间改掉之后后改回来,发现还是灰色的 不能用了。 说明它把使用日期肯定写入了电脑的某个地方,可能是注册表之类的。
我们先查壳
发现 没有壳,是用VC6写的,那我们用OD载入,让程序跑起来
跑起来,试着输入一下注册码。发现OD没有反应。那我们输入好名字和注册码之后,不要点OK,返回程序,ctrl+n 搜索killtimer这个函数
设置完断点后,点击OK,然后就会发现程被断下来了,经过观察上面跳转,来到跳转的起初
正常的,这里传了个值给eax 只要把它改为4 这个程序就成功了,但是发现汇编之后,程序的代码都变了,于是要用到我们的内嵌补丁。什么是内嵌补丁呢?
有一些用机器码填充的地方,我们就可以利用这些地方,我们先到上面设置个书签
书签的作用就是可以随时回去,不至于跑丢了,那我们用二进制复制这两个代码
到我们刚刚想去的那个被机器码填充的地方 可以提前记录一下
相当于把这部分的代码转移到另一个地方实现
那我们保存一下 看看行不行
发现成功运行了,,,但是这个程序死掉了
我们可以具体单步来看看
发现只有成功执行到B才能够走出程序
于是我们把之前的修改再修改下 改为mov eax,0B 试着打开程序 发现OK了。
就是这样了。
OD调试15--16
原文:http://www.cnblogs.com/terryue/p/4951063.html