课前自泼凉水:

前两课的介绍的方法,不管是NOP填充还是JUM的无条件跳转,其实都有极大的局限性。

甚至单纯就效果而言,几乎无用。

且不说利用OD搜索关键字本身就很难搜得到。

就现在的软件保护而言,也几乎不存在只有一处验证的情况。有几处,十几处,甚至更多处验证的情况并不特殊。

所以,这些课程包括之后的,多半也是熟悉一下原理罢了。摆正心态,抱着一个学习的态度就好。

基于上面的原因,这节课引入了两个概念:关键跳和关键CALL。

顾名思义,关键跳就是关乎验证密码或者注册码的最直接的一个je.如果找到这个je,且软件只有这一处验证的话,就很容易跳过验证。

而关键CALL的意义在于,JE是否实现跳转是取决于关键CALL的运算结果以及其返回值。

也就是说JE跳与不跳,CALL说了算。

而且,如果软件采取多处验证的方式,修改JE令其跳过一次验证是达不到破解目的的。

而软件中,有可能多个关乎验证的JE都是取决于同一个CALL,那么找到这个关键CALL,从它直接下手,效率和成功率都会高一些。

那么,如何去确定这个关键跳的位置呢

一步一步来。

第一步还是老规矩,看一下报错信息,然后导入OD查找关键字

搜索“注册”,双击找到的结果,返回反汇编窗口

看上图,最右侧的红圈标记就是搜索关键词“注册”得到结果

从这一行向上找,发现红圈标记的JE,点击一下发现,这个JE完整的跳过了注册成功提示的这部分代码(观察红线)。

确定这个JE就是一个关键跳。

再向上两行发现一个CALL,这个CALL下面有一个test al,al

这里注意下,JE上面会有一个关键CALL来决定这个JE是否跳转,这个关键CALL通常会是JE的上面的三个CALL中的一个

第二步  如何去确定哪一个是关键CALL呢?可以通过验证来确定!

在这一行下断点,然后F9运行软件,在弹出的软件注册界面填上用户名和注册码“111111111111111111111111111111”

程序到达断点暂停,按F8向下运行。此时程序到了CALL下面一行:test al,al

这一行什么意思呢?看下图右侧的寄存器窗口的第一行EXA 00000000

EAX的值一共是8个0,其中E的值是前4个0,AX表示后4个0.AX又分为AH和AL,AL就是最后两个0(如上图右上红圈所示)

test命令是逻辑与操作,test al,al 就是EAX的最后两位进行比较,0和0逻辑与操作的结果还是0

其结果会反映到Z标志位。如果AL为0,则Z标志位为1.AL若为非0,则Z标志位为0

如上图可以看到,AL的值是00,Z标志位为1.所以它下面的JE实现了跳转的。

就是因为CALL先把运行的结果给了AL,这个结果反映在Z标志位上,令它下面的JE实现了跳转的,跳过了验证成功的部分!

由此可以确定:设置断点位置的这个CALL就是决定JE跳转与否的关键CALL

(其实以后看见test语言就可以预判,然后下断点验证了)

第三步 修改关键CALL的结果

选中关键CALL那一行,按F7进入CALL内部,在第一行按下空格键,输入“MOV EAX,1”,然后“retn”跳出CALL

MOV EAX,1 意思是将1 赋值给EAX,RETN 是跳出CALL

这样,实际上这个CALL只运行了两行代码:赋值和跳出。后面的代码就不会执行了。实际上破解就完成了。

最后一步 保存修改并验证。

从破解好的软件进入,发现已经没有弹出注册界面了。点击注册发现,注册按钮已经变灰。

破解第三课 关键跳和关键CALL的更多相关文章

  1. 破解之关键CALL与关键跳查找方法

    找关键CALL和关键跳 方法一: 输入假码注册程序,记录下错误提示信息. OD载入程序--> 右键-->查找-->所有参考文本字串-->(右键-->查找文本,注:不要区分 ...

  2. 【Linux探索之旅】第一部分第三课:测试并安装Ubuntu

    内容简介 1.第一部分第三课:测试并安装Ubuntu 2.第一部分第四课预告:磁盘分区 测试并安装Ubuntu 大家好,经过前两个比较偏理论(是否想起了带着瓜皮帽,手拿折扇的老学究,或者腐儒)的课程, ...

  3. 【原创 深度学习与TensorFlow 动手实践系列 - 3】第三课:卷积神经网络 - 基础篇

    [原创 深度学习与TensorFlow 动手实践系列 - 3]第三课:卷积神经网络 - 基础篇 提纲: 1. 链式反向梯度传到 2. 卷积神经网络 - 卷积层 3. 卷积神经网络 - 功能层 4. 实 ...

  4. CodeIgniter框架入门教程——第三课 URL及ajax

    本文转载自:http://www.softeng.cn/?p=74 这节课讲一下CI框架的路由规则,以及如何在CI框架下实现ajax功能. 首先,先介绍CI框架的路由规则,因为CI框架是在PHP的基础 ...

  5. shellKali Linux Web 渗透测试— 初级教程(第三课)

    shellKali Linux Web 渗透测试— 初级教程(第三课) 文/玄魂 目录 shellKali Linux Web 渗透测试—初级教程(第三课) 课程目录 通过google hack寻找测 ...

  6. BeagleBone Black 板第三课:Debian7.5系统安装和远程控制BBB板

    BBB板第三课:Debian7.5系统安装和远程控制BBB板 由于BBB板系统是Debian 7.4.据说使用Debian系统能够实现非常多BBB板的无缝连接.能够更好的学习和控制BBB板,所以就决定 ...

  7. 【Linux探索之旅】第二部分第三课:文件和目录,组织不会亏待你

    内容简介 1.第二部分第三课:文件和目录,组织不会亏待你 2.第二部分第四课预告:文件操纵,鼓掌之中 文件和目录,组织不会亏待你 上一次课我们讲了命令行,这将成为伴随我们接下来整个Linux课程的一个 ...

  8. 【C++探索之旅】第一部分第三课:第一个C++程序

    内容简介 1.第一部分第三课:第一个C++程序 2.第一部分第四课预告:内存的使用 第一个C++程序 经过上两课之后,我们已经知道了什么是编程,编程的语言,编程的必要软件,C++是什么,我们也安装了适 ...

  9. Linux云自动化运维第三课

    Linux云自动化运维第三课 一.正则表达式 1.匹配符 * ###匹配0到任意字符 ? ###匹配单个字符 [[:alpha:]] ###匹配单个字母 [[:lower:]] ###匹配单个小写字母 ...

随机推荐

  1. matplotlib -- 基础知识

    matplotlib 组织图表的方式 最上层是一个 Figure 实例,包含了所有可见的和其他一些不可见的内容.该 Figure 实例包含了一个 Axes 实例的成员属性 Figure.axes,同时 ...

  2. X of a Kind in a Deck of Cards LT914

    In a deck of cards, each card has an integer written on it. Return true if and only if you can choos ...

  3. Python之PIL库

    Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...

  4. 常见的hbase jar

  5. java33

    1.面向接口编程:将实现类对象(键盘鼠标)赋值给接口类型的变量(USB) interface修饰的类名称 好处:调用时可以是一个方法体即可(实现通用编程) 2.内部类:在类中定义了一个类 ------ ...

  6. 口试C#概念

    C#概念 装箱拆箱: 值类型与引用类型:值类型:System.ValueType(继承自System.Object)引用类型:System.Object 反射:反射提供一种编程方式,让程序员可以在程序 ...

  7. Programming for Everyone !

    Hello Internet ! This blog is to store my algorithm practices. Since Evernote code blocks do not sho ...

  8. spo0lsv病毒分析

    1.样本概况 1.1 样本信息 病毒名称:spo0lsv.exe 所属家族:Worm MD5值:512301C535C88255C9A252FDF70B7A03 SHA1值:CA3A1070CFF31 ...

  9. web网页、手机app设计规范

    app设计规范 目前,很多APP设计师的APP Ui设计稿是先做iPhone6的,方便向上适配iPhone6Plus,也方便向下适配iPhone5和iPhone4的尺寸.这一节课也算是25学堂为大家精 ...

  10. JavaScriptDOM

    DOM简介 1.HTML DOM:网页被加载时,浏览器会创建文档对象模型 2.DOM操作HTML:改变HTML的元素.属性.CSS样式.对所有事件作出反应 DOM操作HTML 1.改变HTML输出流 ...