所谓暴力破解,就是通过修改汇编代码进而控制程序的运行流程,达到不需注册码也能正常使用软件的目的。相对于解出算法进而编写注册机,暴破的技术含量是比较低的。但也正是因为一本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,比较不优雅。更优雅的是揣摩出程序作者的验证算法,写出内存补丁或者注册机,这才是高大上的方法。无奈算法一类的是我的软肋,仍需努力啊。

转载于:https://www.cnblogs.com/codex/p/4051817.html

软件破解入门(暴力破解CrackMe)相关推荐

  1. CTF-Show密码学:ZIP文件密码破解【暴力破解】

    萌新 隐写23 题目内容: 文件的主人喜欢用生日做密码,而且还是个90后. 一.已知条件 在这个题目中,我们有以下已知条件: 文件的主人喜欢用生日做密码 - 这个条件告诉我们,密码可能是一个八位的纯数 ...

  2. 其它 以字典的方式 暴力破解 压缩文件密码

    以前加密了一个压缩文件,里面全是回忆的照片,结果密码搞忘记了,我勒个去,然后就在网上下载了个软件暴力破解,结果很明显,没有破解出来.然后自己就思索怎么破解. 一开始是加QQ群,让别人帮忙破解,仍然没有 ...

  3. 黑客暴力破解必备的12大逆向工具!设置再复杂的密码也没用!

    暴力破解攻击是最流行的密码破解方法之一,然而,它不仅仅是密码破解.暴力攻击还可用于发现Web应用程序中的隐藏页面和内容,在你成功之前,这种攻击基本上是"攻击一次尝试一次". 暴力破 ...

  4. IT知识百科:什么是暴力破解?

    暴力破解是一种常见的网络安全攻击方法,它利用计算机程序自动尝试大量的密码组合来破解密码.这种攻击方法通常用于获取未经授权的访问权限,如入侵网络系统或个人账户.在本文中,我们将探讨暴力破解的原理.工具和 ...

  5. 口令暴力破解--Telnet协议暴力破解、数据库暴力破解与远程桌面暴力破解

    Telnet协议暴力破解 Telnet Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力.要开始一个 ...

  6. FTP暴力破解登陆漏洞复现(Windows Server 2003)

    FTP暴力破解漏洞复现 0x01 漏洞简述 FTP弱口令,一般指使用FTP的用户的密码长度太短.复杂度不够.仅包含数字.或仅包含字母等,容易被黑客攻击,发生恶意文件上传或更严重的入侵行为. 知道FTP ...

  7. 暴力破解攻击工具汇总——字典很关键,肉鸡也关键

    lasercrack是一款爆力破解工具,ruby写的,现如今市面上常见的暴力工具如hydra,medusa都有着不错的破解效率. 破解RDP的软件也有很多,比如ncrack和Fast RDP Brut ...

  8. linux暴力破解工具

    对于 Linux 操作系统来说,一般通过 VNC.Teamviewer 和 SSH 等工具来进行远程管理,SSH 是 Secure Shell 的缩写,由 IETF 的网络小组(Network Wor ...

  9. 手把手教你一步一步暴力破解密码,学不会来找我

    目录 一.什么是暴力破解? 二.暴力破解弱口令实验 三.如何防御暴力破解攻击? 一.什么是暴力破解? 暴力破解也可称为穷举法.枚举法,是一种针对于密码的破译方法,将密码进行逐个推算直到找出真正的密码为 ...

最新文章

  1. 第二十三周微职位elk日志系统
  2. MySQL 5.7最新版本的2个bug
  3. Linux--内存结构
  4. 数组之冒泡排序、选择排序
  5. 电大免考英语计算机,关于电大本科课程中英语免修免考的条件
  6. mysql sqlite转换_数据库转换工具(SqliteToMysql)
  7. 转载(面向对象设计的原则)
  8. 报表session与应用session常识普及
  9. “小心!有人在偷看你手机!”谷歌搞了个被偷窥提醒算法
  10. sde执行revoke SELECT ANY TABLE from sde导致报ora-29900 运算符连接不存在错误
  11. 怎么将tflite部署在安卓上_手把手教程:如何从零开始训练 TF 模型并在安卓系统上运行...
  12. 中国电信5G技术控制云
  13. 斐讯k2路由虚拟服务器,斐讯K2P不死uboot分享带dhcp server功能
  14. IDA中类似VS的Call stack函数调用关系视图
  15. Linux AHCI驱动分析之设备初始化
  16. 手机app开发(新手教程)
  17. 网站建设的流程及步骤是什么?
  18. 量子物理史话 第四章 白云深处
  19. 计算机关闭账号用户控制好吗,Win10系统彻底关闭用户帐户控制的方法
  20. 关于pr的一些实用小知识

热门文章

  1. 棒棒糖图形 -《跟小海龟学Python》案例代码
  2. 低代码让乡村建设开启“智慧模式”
  3. MyBatis批量插入大量数据
  4. glog没有在-dir_log位置生成日志文件
  5. 字符串反转(C语言)
  6. 制作美联英语在线vip页面---师资模块
  7. uni-app:开发过程中的磕磕绊绊---经验总结
  8. 小虎卫app远程控制无人值守手机
  9. Oracle sql developer中调试存储过程
  10. script标签中async与defer的区别