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),就应该可以注册成功了!

  修改如下:

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

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

OD调试9—实例:深入分析代码完成软件破解的更多相关文章

  1. OD调试6—使未注册版软件的功能得以实现

    OD调试6—使未注册版软件的功能得以实现 本节使用的软件下载链接 (想动手试验的朋友可以下载来试试) 继续开始我OD调试教程的学习笔记. 本次试验对真正的程序进行逆向.(之前的都是为破解而专门设计的小 ...

  2. OD调试学习笔记7—去除未注册版软件的使用次数限制

    OD调试学习笔记7—去除未注册版软件的使用次数限制 本节使用的软件链接 (想自己试验下的可以下载) 一:破解的思路 仔细观察一个程序,我们会发现,无论在怎么加密,无论加密哪里,这个程序加密的目的就是需 ...

  3. OD调试篇3-小软件破解1

    OD调试篇3-小软件破解1 要求如下图该软件需要改5个地方,其中1.2是软件未注册而设定限定的添加个数,3.4.5是软件显示的一些未注册的信息. 一. 1.按1运行程序,添加用户添加第五个时出现提示, ...

  4. OD调试4--去除NAG窗口

    OD调试4--去除NAG窗口 nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口.软件设计者可能认为当用户忍受不了试用版中的这些烦人的窗口时,就会考虑购买正式版本. 一 ...

  5. OD调试1--第一个win32程序

    OD调试一:第一个Win32程序的修改 在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误.而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果.由于 ...

  6. alert一般用来调试客户端的javascript代码,以及更好的调试方法

    alert一般用来调试客户端的javascript代码 调试利器--console.log 如今主流浏览器(Chrome,IE8及后续版本,FireFox,Opera等)都支持控制台功能. Chrom ...

  7. 逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

    上一篇:逆向---02.je & jmp & jnz .OD调试 基础知识:(栗子中也会说的)栗子:链接: https://pan.baidu.com/s/1qZbbTvQ 密码: i ...

  8. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  9. OD调试篇7--笔记及解题报告

    MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows AP ...

随机推荐

  1. JavaScript学习笔记(三十八) 复制属性继承

    复制属性继承(Inheritance by Copying Properties) 让我们看一下另一个继承模式—复制属性继承(inheritance by copying properties).在这 ...

  2. MySQL 使用索引扫描来做排序

    MySQL有两种方式可以生成有序的结果:通过排序操作:或者按照索引顺序扫描:如果EXPLAIN 出来的结果的type列的值为“index”,则说明MySQL使用了索引扫描来做排序(不要和Extra列的 ...

  3. 转载:mysql-Auto_increment值修改

    转载网址:http://libo93122.blog.163.com/blog/static/1221893820125282158745/ | 2012-03-13 11:19:10 | 2012- ...

  4. php基础之一

    php基础:1.php语言标记:<?php ?>2.输出语句:echo 'Hello','Hi'; //可输出多个字符串                 print 'World'; // ...

  5. CentOS 5设置服务器hostname、DNS和IP

    CentOS 5如何设置服务器主机名.DNS?设置主机名hostname编辑/etc/hostname文件写入:116.23.14.25 centostest.com其中116.23.14.25 表示 ...

  6. Asp.Net 控件radio 的简单使用

    js: <script type="text/javascript"> function ok() { document.getElementById("tx ...

  7. 用linux mail命令发送邮件[Linux]

    mail [-s 邮件标题] <<邮件地址1> [邮件地址2] [邮件地址3]> [ < 包含邮件内容的文件路径 ] <-- -f 发送邮件地址> [-F 显 ...

  8. <转>十分钟学会javascript

    本文转自国外知名网站Learn X in Y minutes. 由于格式的限制无法直接将Markdown转贴过来,所以只能用Iframe的方式. 本文适合有一定编程基础又对Javascript感兴趣的 ...

  9. Android 改变标题栏的背景色

    1:styles.xml <!-- Activity theme --> <style name="CustomTheme" parent="andro ...

  10. MySQL常用Json函数

    官方文档:JSON Functions Name Description JSON_APPEND() Append data to JSON document JSON_ARRAY() Create ...