您的位置:首页 > 其它

OD笔记3 一次简单的尝试

2014-12-25 19:16 106 查看
今天看完鱼c论坛的OD教程之后,尝试用自己的思路做一做。

目标:     ①去除使用次数限制。

               ②去除退出时的广告。

思路:①先让使用次数达到上限,打开时出现注册对话框。这时在OD里暂停,通过查看堆栈调用,可以大致定位到判断节点。

②对照未达到使用上限的软件,观察①中节点附近的运行状况,并进行修改。

具体步骤:

1、      首先将软件反复运行,直至出现次数限制提示,如下:



2、      载入可执行文件,F9运行,出现上面的对话框之后暂停。

这时程序停在系统领空,等待接受消息。Ctrl+K查看堆栈内的函数调用,如下图:


从“调用来自”窗口可以看到,程序领域内的VisualSi.004899B3处调用了系统领空的MFC43模块,双击查看该位置。并按下F2设置下断点。对于使用次数是否为0的检测大概就在这之前。

往前观察,发现以下函数被调用:

RegQeurtValueExA()

RegCloseKey()

到这里猜到程序应该是根据注册表来判断是否达到使用限制,这也就将判断点定位到了一个区间内(从读注册表到出现提示注册对话框)。

 


下面对未到达使用上限的程序进行调试。定位到该区间内,并留意具体的每个跳转语句是否实现跳转,并在对应语句后面写下注释(Y代表跳转实现,N代表跳转未实现)。



这里我是在另外一台主机上进行的,因为在原先主机上,即使打开新的软件依然会提醒使用限制,因为注册表内容已经被修改。

然后返回已经被限制的程序,单步执行,对比上述区间内差异,同时修改。

应该跳转的时候未跳转,可以用无条件跳转指令jmp替换条件跳转指令;

不应该跳转的地方跳转了,可以用nop将跳转指令填充掉。

实际上修改的只有下面这一处。



修改完成保存上述修改,并在修改处作注释。运行结果ok。

二、去除退出时的烦人广告。

1、重新载入可执行文件,F9运行,退出程序,出现广告。暂停执行,这时程序应该停在系统领空,等待接受消息。与之前一样,Ctrl+K呼出堆栈,查看函数调用,如下图:



观察到在用户领空00480c24处调用了MFC24,双击跟进。



F2下断点。Ctrl+F2重新载入,执行到断点,单步执行,显示广告,关闭广告后,程序停在下一条语句。所以可以把整条语句用nop填掉,不影响程序退出。保存修改之后可以发现广告已经去除。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: