---恢复内容开始---

所谓暴力破解,就是通过修改汇编代码进而控制程序的运行流程,达到不需注册码也能正常使用软件的目的。相对于解出算法进而编写注册机,暴破的技术含量是比较低的。但也正是因为一本05年的杂志上介绍“暴力破解”的文章,让我入了这个大坑。近来想重拾调试器,就先从最简单的CrackMe入手,熟练一下各工具方法。

下载CrackMe3文件(我用的是看雪《加密与解密》中的CFF CrackMe #3 程序  http://pan.baidu.com/s/1dD9v9x3 )。

1.查看此程序是否加壳。加壳的话还得进行脱壳处理。将CrackMe拖到PEID上,显示用Delphi编写。无壳,甚好。

3.打开程序,看看注册码出现异常的时候有何提示。恩,输入错误的注册码,确认。显示了“Wrong Serial,try again!”。我们记下这一串字符,接下来用得到。

4.退出程序,打开OllyDbg,并载入此程序。(当年用的是W32Dasm,属于静态反汇编软件,支持WIN API,具有强大的串式参考功能。因此成为破解入门软件的最佳选择。这次用OllyDbg实施爆破,只是复习一下操作。爆破原理都是相同的)下图是OllyICE,是OllyDbg的汉化版。也一样好用。

载入程序后,出现如下界面:

title上面的“模块 — crackme3”标明了程序领空,我们当前是在crackme的代码内。

5.我们在反汇编窗口“右键——查找——所有参考文本字符串”:

然后会弹出一个文本字符串的对话框,继续“右键——查找文本”:

然后会弹出对话框,输入前面记下来的那串“Wrong Serial,try again!”。其实为了方便,可以只输入“Wrong”这个字符串,毕竟程序里带“Wrong”的字符不会太多,如下图:

点击“确定”后,会高亮查找结果,此时在对应字符串处“右键——反汇编窗口中跟随”,会在反汇编窗口中跳到对应此串字符的汇编指令:

看到上图的指令,分析一下程序流程:输入ID和注册码后,call调用子函数来判断注册码是否正确(00440F51处,call 00403B2C处的子函数),如果不正确,一个jnz跳到00440F72,弹出“Wrong Serial ,try again!”,提醒说你丫注册码是错的。

为了验证我们的想法,我们在call的前面按F2下个断点,然后一步步跟进,看看call了个什么函数过来:

然后F9让程序跑起来,输入假的ID “wwwwww” ,按下“注册”。此时程序自然要去call子函数来验证我们的注册码是否正确。可惜它还没走到call的那一步,就停在了我们设的断点上(可以看到信息窗口中的堆栈内容“wwwww”,不知会不会存在缓冲区溢出?XD):

然后按下几次F8单步步过,直到了00440F34 call指令,程序就要召唤子程序来检验注册码是否正确了!此时改为F7单步步入,跟踪到所call的函数(如图,此函数地址在00403B2C处):

跟进去之后,这就是用来验证注册码的程序(从 三个push压入堆栈 开始,到 三个pop弹出堆栈+retn 结束):

从代码中可以发现,程序将输入的注册码与内置的注册码用cmp指令做了比较。(cmp指令执行后,将对标志寄存器ZF产生影响。比如 CMP AX , BX ,当AX=BX时,ZF=1;AX!=BX时,ZF=0。)

也就是说,如果注册码与输入的字符串不相等,ZF=0。此时子程序返回,执行00440F39处的JNZ指令。因为输入的注册码不对,ZF=0,开始执行JNZ,跳转到00440F8C,弹出“Wrong Serial”对话框提示注册码错误。

这就是传说中的“关键跳”,如果将JNZ(ZF=0时就跳转)改为JE(ZF=1时就跳转),得到的结果就会正好相反,即错误的注册码反而会提示注册成功,对的注册码反而会提示错误。

6.那么现在找出那两个“关键跳”(输入ID时call了一下,然后一个jnz。输入注册码时又call了一下,再一个jnz。),如下图:

好,现在只剩下修改汇编代码了。双击对应的JNZ指令,弹出“汇编于此处”的对话框。将只需将“jnz”改为“je”,点击“汇编”即可。用同样的方法修改另一处“jnz”:

修改完毕,“右键——复制到可执行文件——所有修改“:

在弹出的对话框中点击“全部复制”:

然后在出现的新对话框中“右键——保存文件”,完毕。

此时打开新保存的文件,随意输入一个ID和注册码,点击“注册”,即弹出“注册成功”的对话框:

小结:本次主要是重温了OllyDbg的操作。爆破无外乎就是改变程序的验证流程,譬如将关键处的jne改为je,或者jmp,比较不优雅。更优雅的是揣摩出程序作者的验证算法,写出内存补丁或者注册机,这才是高大上的方法。无奈算法一类的是我的软肋,仍需努力啊。

软件破解入门(暴力破解CrackMe)的更多相关文章

  1. 记一次ctf比赛解密题的解决(可逆加密基本破解之暴力破解)

    题目是这个样子的: code.txt的内容是这样: 有点吓人木?233333 其实解密之后是这样的: 找到一点安慰没? 好了,废话不多说.讲解一下思路吧. 我们知道base64加密是属于可逆加密的.简 ...

  2. 新萌渗透测试入门DVWA 教程2:DWVA 的配置和暴力破解靶机

    啊呀,上周忘了更新了.开篇时分,简短的深表歉意. 好了,现在开始配置DWVS. 0x00 配置DWVS 首先输入密码登陆,用户名admin,密码password 进入界面后选择,DVWA Securi ...

  3. 010 Editor 8.0.1 之 暴力破解

    一.工具及软件介绍二.破解1.打开调试程序2.打开注册页面3.在弹出窗口API中下断4.点击注册按钮5.逐一进去观察6.找到正确的授权字符串7.找到函数头8.找到计算出EBX的CALL9.进入函数跟踪 ...

  4. sshd服务器搭建管理和防止暴力破解

    1.1 Linux服务前期环境准备,搭建一个RHEL7环境 1.2 sshd服务安装-ssh命令使用方法 1.3 sshd服务配置和管理 1.4 防止SSHD服务暴力破解的几种方式 1.1 Linux ...

  5. 使用C#winform编写渗透测试工具--暴力破解

    使用C#winform编写渗透测试工具--暴力破解 这篇文章主要介绍使用C#winform编写渗透测试工具--暴力破解.暴力破解是指通过利用大量猜测和穷举的方式来尝试获取用户口令的攻击方式.简单来说就 ...

  6. Brute Force(暴力(破解))

    一.攻击模块1:Brute Force(暴力破解) 暴力破解一般指穷举法,穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况 ...

  7. Python黑客编程2 入门demo--zip暴力破解

    Python黑客编程2 入门demo--zip暴力破解 上一篇文章,我们在Kali Linux中搭建了基本的Python开发环境,本篇文章为了拉近Python和大家的距离,我们写一个暴力破解zip包密 ...

  8. 安全性测试入门:DVWA系列研究(一):Brute Force暴力破解攻击和防御

    写在篇头: 随着国内的互联网产业日臻成熟,软件质量的要求越来越高,对测试团队和测试工程师提出了种种新的挑战. 传统的行业现象是90%的测试工程师被堆积在基本的功能.系统.黑盒测试,但是随着软件测试整体 ...

  9. 入门系列之使用fail2ban防御SSH服务器的暴力破解攻击

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由SQL GM发表于云+社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击--远程攻击者通过不同的密码来无限次地进行登录尝试.当 ...

随机推荐

  1. Qt中静态变量使用方法

    静态变量可以在各个页面之前使用 先定义一个用于存放静态变量的类 例如datavar 在datavar.h中添加如下代码 #ifndef DATAVAR_H #define DATAVAR_H #inc ...

  2. POJ2387(dijkstra堆优化)

    Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to get as much s ...

  3. samba服务,连接远程开发机

    到了新环境,自己的开发机需要通过跳板机连,每次登录跳板机都需要RSA动态密码.一开始让我迷惑的是,这有个跳板机,那怎么让本地代码和开发机代码同步呢.以前公司的情况,一个是不需要跳板机,在phpstor ...

  4. tcp为什么是三次握手

    刷知乎看到的,很可爱啊哈哈哈就顺手黏贴过来了 作者:大闲人柴毛毛链接:https://www.zhihu.com/question/24853633/answer/254224088来源:知乎著作权归 ...

  5. 序号生成算法odoo

    def get_sum_seq(self, cr, uid, ids, name, args=None, context=None): if not ids: return {} result={} ...

  6. CF1097F Alex and a TV Show 莫比乌斯反演、bitset

    传送门 发现自己对mobius反演的理解比较浅显-- 首先我们只需要维护每一个数的出现次数\(\mod 2\)的值,那么实际上我们只需要使用\(bitset\)进行维护,每一次加入一个数将其对应次数异 ...

  7. LiveCharts文档-4基本绘图-1基本线条图

    原文:LiveCharts文档-4基本绘图-1基本线条图 4基本绘图-1基本线条图 using System; using System.Windows.Forms; using System.Win ...

  8. LiveCharts文档-4基本绘图-2基本柱形图

    原文:LiveCharts文档-4基本绘图-2基本柱形图 4基本绘图-2基本柱形图 using System.Windows.Forms; using LiveCharts; using LiveCh ...

  9. zuul简单使用

    zuul路由的几个配置参数1.静态路由 zuul: routes: myroute1: path: /mypath/** url: http://localhost:8080 (注意这里url要htt ...

  10. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

    @翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...