课前自泼凉水:

前两课的介绍的方法,不管是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. BERT(Bidirectional Encoder Representations from Transformers)

    BERT的新语言表示模型,它代表Transformer的双向编码器表示.与最近的其他语言表示模型不同,BERT旨在通过联合调节所有层中的上下文来预先训练深度双向表示.因此,预训练的BERT表示可以通过 ...

  2. Vue-箭头函数

    03-箭头函数   箭头函数 基本语法: ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; ...

  3. CodeSampler DX9 Full-screen initialization

    D3D新手,请轻拍. 最近在学CodeSampler上的DX9范例.编译环境是VS2012.搭编译环境用了一两天,另行开文吐槽(有时间的话). 本文讲讲Full-screen initializati ...

  4. 打造自己Django博客日记

    本教程使用的开发环境 本教程写作时开发环境的系统平台为 Windows 10 (64 位),Python 版本为 3.5.2 (64 位),Django 版本为 1.10.6. 建议尽可能地与教程的开 ...

  5. linux 硬盘

    df -hT 查看格式 各种文件 mount命令 可以挂载那些块设备:光盘.磁盘分区.U盘 光盘:文件系统:iso9660 iso文件文件系统:iso9660 iso文件可以进行挂载的 mount c ...

  6. java笔试之输出

    1. public class foo { private static void testMethod(){ System.out.println("testMethod"); ...

  7. Servlet发送邮件遇到的问题SMTPSendFailedException 554

    接到通知,一个接收用户请求的邮箱有段时间收不到邮件了.当时想着这么简单的功能,就没有加上日志记录.重写程序后,日志记下的报错是:SMTP的SMTPSendFailedException 554  co ...

  8. CDN随笔

    CDN的理解:(1)CDN (内容分发网络)加速用户获取数据的 系统(2)部署在离用户最近的网络节点上(3)命中CDN 不需要访问后端服务器(4)互联网公司自己搭建或租用

  9. Qt Creator快捷键设置

    QT Creator 下载地址 http://download.qt.io/ 一.快捷键配置方法: 进入“工具->选项->环境->键盘”即可配置快捷键. 二.常用默认快捷键:   编 ...

  10. delphi压缩与解压_不需要特别的控件

    unit unzip; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...