zoukankan      html  css  js  c++  java
  • OD调试9—实例:深入分析代码完成软件破解

    OD调试9—实例:深入分析代码完成软件破解

        爆破,是最初级的解决方案,不到万不得已,我们不直接修改JNZ通关。因为这样子的话,我们就享受不到破解、逆向的真正乐趣了。

      了解程序背后按照剧情发展经常会出的一些走法,逆向程序的算法,才能体会逆向的真正乐趣!

      所以,今天的主题是:是男人,就跟进去吧~

      这次还是使用一个比较简单的程序,不然太复杂的话,一步步跟进程序可能会把自己搞崩溃,脑子恐怕不够搞。大家凭自己的能力,能进入多少就进入多少,一分不少,一寸不多!能力是培养出来的,耐心!

      试验软件:MrBills.exe(一个扫描仪软件)

      软件下载链接:http://pan.baidu.com/s/1hq7rKpu

      运行起来看看:

     

        记住这句注册失败的提示信息。因为它可以作为一个关键的字符串来寻找。

      未注册版的软件一般会限制功能,注册完成后才让你使用所有功能。

     

      用OD打开这个可执行文件,开始分析:

    1 查找字符串:

      Cpu窗口右键->查找所有参考文本字符串->查找注册失败的提示信息”You have entered an xxxxxx”  (注意把进度条拉至文本子串最上方,因为它是从上往下查找的)

      查找结果如下图:

     

      双击该字串,跟随到cpu窗口代码处。

     

     

      在这里我们找到了上方一个突破口—跳转jnz,这里如果jnz跳转的话,就直接来到了注册成功处:”Thank you for registering!”,所以它是一个关键跳转。

    2 分析:

      (1)那么跳转jnz的条件判断是由谁引起的呢?

      是在它上方的test  al , al。因为这句会改变寄存器里标志位ZF的值(0或1)。

      test进行的是逻辑与运算(and),如果两个al为1的话,结果为1;两个为0的话,结果为0。它不改变al的值,只会修改标志位。

      此时通过eax寄存器可以看出al为0,所以ZF标志位为1,(运算结果为0时,标志位Z置1),进而jnz不会跳转,即来到注册失败处。

      由此我们就可以推理出,想办法把al的值由0变为1,就可以实现关键跳转,进而使软件注册成功了!!

      (2)那么al的值在哪里被修改过呢?或者说是谁决定了al的值呢?

      可以看到在test语句上方有一个call,我们在win32汇编语言里学过:Call调用函数进行一堆操作之后的返回值都存放在EAX里,也就是说这个call会影响到al的值。(al是eax的最低位/最后一个字节,eax是32位的,al是8位)

      那么这个call就是需要进入分析的,在该处下断点,重载后写入注册信息触发该断点,接着进入这个call里,来到下图:

     

      进入之后呢,不要盲目地按F8过,先观察下程序内容(很多朋友就一直F8走,寄存器也不看,下面地址也不看,进行了什么样的逻辑关系也不看,就是直接的走,然后就迷路了!)

      观察之后,我们发觉,又出现了两个相连call和test(如上图),这两个call也会影响到我们关注的al的值,所以注释上【需进入】,方便之后进入分析。下面进入第二个call里,如下图:

     

      进入第二个call里,发现了两个关于al的可疑之处(如上图),mov  bl,al  mov  al,bl  这两句是干啥呢?将al的值给bl,bl的值再还给al….??现在可以推想一下: bl可能是用来暂时保存数据的,al标志着是否已经被注册,它不希望被修改,所以将al保存在bl里面,经过一些操作后,再将bl赋给al。那么在这之前,决定al值得call或许就是一个关键点!我们接着进入上图中的第4个call,如下图:

     

     

           在这里走过一遍,发现al的值在这里被bl赋为0,这里就是修改的关键点了,将这个al的值修改为1的话,就应该注册成功了,我们先走出去,稍后再来一轮在这里进行修改。

      F8走出这里后回到第二个关键call的位置,如下图:

     

      继续往下走,我们要绕出去!

     

      好了,进到几个关键call里用火眼金睛巡视了一番后,终于找到了注册的关键所在,只要把第4个关键call里的al的值修改为1(原来为0),就应该可以注册成功了!

      修改如下:

     

      修改后点击运行:成功注册了了!!

     

      点击确定,软件变为了已注册版:

     

  • 相关阅读:
    使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
    便携版WinSCP在命令行下同步文件夹
    ffmpeg (ffprobe)分析文件关键帧时间点
    sqlite删除数据或者表后,回收数据库文件大小
    ubuntu 20.04下 freeswitch 配合 fail2ban 防恶意访问
    ffmpeg使用nvenc编码的结论记录
    PC版跑跑卡丁车 故事模式 亚瑟传说章节 卡美洛庆典 2阶段 心灵之眼 攻略
    There was an error loading or playing the video
    Nvidia RTX Voice 启动报错修复方法
    火狐浏览器 关闭跨域限制
  • 原文地址:https://www.cnblogs.com/yunji5566/p/4264739.html
Copyright © 2011-2022 走看看