课前自泼凉水:
前两课的介绍的方法,不管是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的更多相关文章
-
破解之关键CALL与关键跳查找方法
找关键CALL和关键跳 方法一: 输入假码注册程序,记录下错误提示信息. OD载入程序--> 右键-->查找-->所有参考文本字串-->(右键-->查找文本,注:不要区分 ...
-
【Linux探索之旅】第一部分第三课:测试并安装Ubuntu
内容简介 1.第一部分第三课:测试并安装Ubuntu 2.第一部分第四课预告:磁盘分区 测试并安装Ubuntu 大家好,经过前两个比较偏理论(是否想起了带着瓜皮帽,手拿折扇的老学究,或者腐儒)的课程, ...
-
【原创 深度学习与TensorFlow 动手实践系列 - 3】第三课:卷积神经网络 - 基础篇
[原创 深度学习与TensorFlow 动手实践系列 - 3]第三课:卷积神经网络 - 基础篇 提纲: 1. 链式反向梯度传到 2. 卷积神经网络 - 卷积层 3. 卷积神经网络 - 功能层 4. 实 ...
-
CodeIgniter框架入门教程——第三课 URL及ajax
本文转载自:http://www.softeng.cn/?p=74 这节课讲一下CI框架的路由规则,以及如何在CI框架下实现ajax功能. 首先,先介绍CI框架的路由规则,因为CI框架是在PHP的基础 ...
-
shellKali Linux Web 渗透测试— 初级教程(第三课)
shellKali Linux Web 渗透测试— 初级教程(第三课) 文/玄魂 目录 shellKali Linux Web 渗透测试—初级教程(第三课) 课程目录 通过google hack寻找测 ...
-
BeagleBone Black 板第三课:Debian7.5系统安装和远程控制BBB板
BBB板第三课:Debian7.5系统安装和远程控制BBB板 由于BBB板系统是Debian 7.4.据说使用Debian系统能够实现非常多BBB板的无缝连接.能够更好的学习和控制BBB板,所以就决定 ...
-
【Linux探索之旅】第二部分第三课:文件和目录,组织不会亏待你
内容简介 1.第二部分第三课:文件和目录,组织不会亏待你 2.第二部分第四课预告:文件操纵,鼓掌之中 文件和目录,组织不会亏待你 上一次课我们讲了命令行,这将成为伴随我们接下来整个Linux课程的一个 ...
-
【C++探索之旅】第一部分第三课:第一个C++程序
内容简介 1.第一部分第三课:第一个C++程序 2.第一部分第四课预告:内存的使用 第一个C++程序 经过上两课之后,我们已经知道了什么是编程,编程的语言,编程的必要软件,C++是什么,我们也安装了适 ...
-
Linux云自动化运维第三课
Linux云自动化运维第三课 一.正则表达式 1.匹配符 * ###匹配0到任意字符 ? ###匹配单个字符 [[:alpha:]] ###匹配单个字母 [[:lower:]] ###匹配单个小写字母 ...
随机推荐
-
下载最新版本的Oracle Database
直接访问Oracle的官网就可以找到,鉴于Oracle经常改到下载面也我这里直接粘贴下载地址 http://www.oracle.com/technetwork/database/enterprise ...
-
bootstraps字体图标无法显示
使用bootstraps字体图标,必须在css的同级文件夹下,建立新的文件夹为fonts,放入一下文件. 在还是无法显示字体图标的情况下,可查看bootstraps.css中的 @font-face ...
-
sqlplus链接数据库报ORA-09925: Unable to create audit trail file
[localhost.localdomain]:[/oracle11/app/oracle11/product/11.2.0/dbhome_1/dbs]$ sqlplus / as sysdba SQ ...
-
CentOS下mysql安装和配置
1.卸载原有mysql [root@iZ25ka6ra32Z /]# rpm -qa | grep mysql 查看该操作系统上是否已经安装了mysql数据库.有的话,我们就通过 rpm -e 命令 ...
-
三维数组——与 宝玉QQ群讨论交流之二
宝玉 12:27:35 这几天看了大部分大家交的作业,发现一个主要问题还是卡在对三维数组的理解上,之前把三维数组类比成三维空间可能会造成误导 宝玉 12:27:45 其实鞠老师解释的很好: 三维数组 ...
-
Hdu2860-Regroup(种类并查集)
Problem Description When ALPC42 got to a panzer brigade, He was asked to build software to help them ...
-
Myeclipse8.5开发-插件安装二:安装findbugs方法
环境:Myeclipse8.5 step 1:首先从官网下载findbugs插件:http://downloads.sourceforge.net/project/findbugs/findbugs% ...
-
Android N多窗口支持
Android N 可以同时显示多个应用窗口. 在手机上,两个应用可以在"分屏"模式中左右并排或上下并排显示.例如,用户可以 在上面窗口聊QQ,下面窗口发送短信. 如图所示,两个a ...
-
Linux系统LVM基本使用
一.关于LVM的几个概念 1. LVM:逻辑卷管理器,是建立在物理存储设备上的一个抽象层,允许你生成逻辑存储卷, 与硬件相关的存储设置被其隐藏,你不用停止应用或卸载文件系统来调整卷大小 或迁移数据,可 ...
-
在docker中运行jenkins实现代码自动发布到测试服务器
在docker中运行jenkins 用的镜像是apline版:lts-alpine,并设置正确的时区. docker run --name jenkins_master -d \ -p 8081:80 ...