去掉软件的注册提示框

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

WinRar在使用到期后,每次打开都会弹出如图1所示对话框窗口,十分烦人。但我这个穷学生想注册正版WinRar却是有心无力。只有想法去掉这个对话框,顺便当练练手。

图1 WinRar的注册提示窗口

一般来说,去掉注册提示窗口非常简单。有下面几种常见办法。

一、找到可执行文件中创建窗口的API函数(CreateWindowExA, CreateWindowExW, DialogBoxParamA等),更改其参数。让其调用失败就可以实现我们的目的了。

二、更改显示这个窗口的函数ShowWindow,让其调用失败。

三、用JMP(无条件转移),跳过窗口创建及显示

四、通过跟踪找到注册码。注册后就不会出现提示窗口了。

由于WinRar未注册版本不会有其它功能限制,用不着去找注册码注册,所以在这里,我打算用第一种方法去掉WinRar的提示窗口。

由于调用CreateWindowExA和CreateWindowExW创建窗口时,会传入窗口标题。而提示窗口的标题是“Please register”。先打开IDA反汇编WinRar主程序。汇编完成后,打开IDA的字符串参考窗口(需要IDA安装此插件)。查找“Please register”字符串,结果却没找到有此字符串......由此可以判断。WinRar应是将对话框窗口作为对话框资源编译到可执行文件中去的。

打开Visual Stdio.Net(或其它的可执行文件资源查看器),打开WinRar.exe文件,果然在对话框资源中找到了提示窗口,此资源名为“REMINDER”。如图2, 3,

图2 WinRar中的对话框资源

图3 注册对话框

现在再在IDA中打开字符串参考窗口,查到“REMINDER”字符串,果然找到~如图4

图4 IDA的字符串参考窗口

双击此字串,跳到其在.data段的存放处。在其名称上点右键,选择“跳转到操作数的交叉索引处”。在弹出来的对话框中可以看到程序中有二处引用到了这个字符串。双击窗口中的第一处引用地址。跳到第一处引时地址处。可以看到,“REMINDER”字符串地址是作为参数传给了DialogBoxParamA函数,而DialogBoxParamA函数正是创建对话框的API,呵呵,就是它了(图5)。这时,我们只需要用其它工具在436B22处将push offset aReminder改为push 0,将一个NULL传入DialogBoxParamA函数,这个函数就会调用失败。当然其后它也就不能正常显示了,就达到了去除的目的。

图5

打开rta(非常方便的可执行文件修改器,可惜只能以机器码形式修改),用rta打开WinRar.exe,并找到436B22处。将数据修改为6800000000(即为push 00000000的机器码),并保存,就大功告成了。(图6)

图6

现在再打开WinRar,呵呵,大功告成,提示窗口再也不出来烦我了。

这只是crack技术比较初级的应用,有兴趣的朋友可以自已试着来做一次。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有