暴力破解法——通过关键字符串寻找“关键跳”实现程序破解

前言

在阅读《c++ 黑客编程解密与防范》的OllyDebug使用方法的那一节,作者举例一个非常简单的程序破解例子,但不知由于何种原因,博主去网上下载与书中示例相同的程序之后却无法复现书上的方法,经过一番摸索之后,终于成功将其实现。此文仅仅是博主用于记录这次程序破解过程的博文,无任何商业目的,另外,此博文内容非常简单易学,还请各位前辈们莫耻笑哈。


实验所需工具和材料

  • 逆向分析工具:OllyICE
    OllyDebug的加强版,内嵌了许多插件,功能更加强大。下载地址🔗(若提示恶意链接之类的不用管它,这是看雪学院的链接。)
  • 实验材料:易忧软件–超级字典生成器v3.2
  • 实验目的:使得软件变为“已注册”版本

图1 破解前

图2 破解后

实验过程

一、打开OllyICE并将实验材料易忧软件–超级字典生成器v3.2.exe直接拖入OllyICE
   打开后如下图所示。


图3 用OllyICE打开实验材料


二、寻找关键字符串
   在反汇编窗口(很多汇编代码的那个窗口)点击鼠标右键,再左键点击Find UNICODE


图4 寻找关键字符串(1)


   在弹出的字串串窗口中找到 易忧软件–超级字典生成器 v3.2(已注册) 字符串。为什么要找到这条字符串才能实现破解呢?我的理解是这样的:我们要使这个软件变成“已注册”版本,而注册之后它的程序界面会出现“已注册”这个标识,所以就可以从这里入手。


图5 寻找关键字符串(2)

三、对关键代码进行分析
   在上一步中,双击字符串后会跳转到图6所示的汇编代码处。


图6 双击关键字符串后跳转到关键代码处


   图7中红框处表示存在跳转,并且这个跳转是直接跳到地址004031AC处,从而导致地址004031A2的代码未被执行,关键字符串易忧软件–超级字典生成器 v3.2(已注册) 将不会在程序界面中显示出来,也就是说这种情况下运行的程序是“未注册”版的。

图7 关键字符串被跳过了


   在反汇编代码处向上翻,在图8可以看到有两个位置的汇编代码都是跳转语句,且都跳转到地址004031AC,所以我们必须得使这两个跳转语句不跳转。首先双击十六进制代码显示区添加断点,或着点击相应地址再按F2添加断点。

图8 有两个位置都是跳转语句


四、使跳转语句失效实现破解
   有两种方法可以使这两处跳转语句失效。(注意,必须使两处跳转失效,若存在任意一处跳转仍有效的话是无法实现破解的)
   方法一:jnz指令的意思是当ZF标志位为0时实现跳转,所以在我们设置断点之后,按F9运行程序进行调试并且当执行到这第一处跳转语句时,通过鼠标双击ZF位使其变为1使其不发生跳转,再按F9往下执行到第二处跳转语句,此时也向上述一样双击ZF位使其变为1从而使其不发生跳转,之后再按F9便会弹出“已注册”的程序。这样就破解完成了。

   按F9使程序执行到第一处跳转,双击ZF位使其置1:


图9 使第一处跳转失效


   再按F9使程序执行到第二处跳转,双击ZF位使其置1:


图10 使第二处跳转失效


   再按F9将会弹出“已注册”的程序:


图11 破解完成


   方法二:方法一中是通过修改ZF标志位而实现不跳转,我们也可以通过修改汇编代码而不修改ZF标志位而使其不跳转。很简单,只需将jnz指令修改为je指令则可。


图12 将两处都修改为je


   按三下F9就会弹出“已注册”程序界面了。破解完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章