去掉软件的注册提示框

类别:软件工程 点击:0 评论:0 推荐:

    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技术比较初级的应用,有兴趣的朋友可以自已试着来做一次。
  
  

本文地址:http://com.8s8s.com/it/it37134.htm