本节课我们将学习硬件断点的使用技巧,硬件断点是由硬件提供给我们的一组寄存器,我们可以对这些硬件寄存器设置相应的值,然后让硬件帮我们断在需要下断点的地址上面,这就是硬件断点,硬件断点依赖于寄存器,这些寄存器有个通用的名称,即调试寄存器,调试寄存器一共有8个分别从Dr0-Dr7。在软件破解中硬件断点常用来寻找赋值或读取的原始位置。

硬件断点并不是OD等调试器的特有功能,调试器只是把用户的需求转换成特定的格式,并写入DRX寄存器组中,等待硬件返回执行结果,由于硬件断点是由CPU直接提供硬件级别的支持,所以硬件断点的效率是所有断点中最高的。

在OD等调试器中,除了硬件断点之外,还有个内存断点,内存断点通过修改内存页的属性并捕获异常来间接暂停被调试的程序运行,内存断点的效率大大低于硬件断点,但内存断点的自由性大于硬件断点,通常情况下能用硬件断点则不要使用内存断点,有时候容易卡成狗。

------------------------------------------------------------
本章难度:★★★★☆☆☆☆☆☆
课程课件:CM_10.zip
------------------------------------------------------------

1.老样子在进行破解实战之前,我们先来看一个CM小程序,先了解一下硬件断点的使用技巧,如下OD直接载入这个CM程序然后运行。

2.我们直接按下【Ctrl + B】,输入按钮事件特征码【FF 55 FC 5F 5E】,然后在CALL的位置下断点。

3.回到CM程序,点击【测试硬件写入断点】,OD断下后按下【F7】进入到CALL的内部,也就是按钮的按钮事件。

上图有CMP指令,该指令取出【4A25F0】中的数值,和0做了一次比较,从而影响了JNZ跳转,我们接下来就是找到是谁向这个内存地址写入的数据。

4.直接在数据窗口,按下【Ctrl +G】,输入内存地址【4A25F0】,会发现其中的数值是0。

5.选择数据窗口中的第一个DWORD数据,然后选择【断点】,【硬件写入】,【DWORD】,这里的DWORD是由CMP指令决定的,此处【CMP DWORD PTR】所以我们需要下一个DWORD断点。

6.下完断点后重新载入程序,然后运行程序会直接断下,你会发现一条【MOV DWORD 】这样的赋值语句,没错这就是源头。

实战:破解 HofoSetup 2019

免责声明:该教程仅用于技术交流,并无任何商业目的,您不得将下述内容用于商业或者非法用途,否则后果自负,如果您喜欢该程序,请支持正版软件,购买注册 ,得到更好的正版服务,如有侵权请邮件联系作者!

1.首先OD载入然后直接,【F9】运行程序,并记下关键字符串,这里我们记下【vip】这段。

2.直接在反汇编窗口,右键选择中文搜索,智能搜索字符串,并查找带有vip的字符串,这里我找到了如下字符串。

3.这里我们看到了关键的比较和关键的跳转,但并没有发现关键CALL,这里的CMP指令的意思是,取出[eax]寄存器地址里面的一个字节和0进行比较并影响关键的跳转,接下来我们将查找是谁向这个内存地址中写入了数据,也就是说我们要找到谁给[eax]寄存器赋值找它的源头。

4.直接在反汇编窗口中选择,数据窗口中跟随,选择内存地址,会发现数据窗口地址变了。

5.直接在数据窗口中右键选择,断点,硬件写入断点,字节型。

6.此时,取消其他的所有内存断点,只保留一个硬件写入断点,然后我们重新载入程序并运行起来。

7.运行后会断下多次,我们不用管直接再次运行,然后回到程序中,点击【添加自定义快捷方式】,此时OD会直接断下。

8.下方会发现OD自动断在了【0042128A】的位置上,也就是说是上一条命令写入的,我们从下向上分析一下代码。

【mov byte ptr [ebx+4D8],al  】将al中的数写入到,[ebx+4D8]的地址中去,0011F700+4D8=0011FBD8刚好是我们下硬件断点的地址处。

【setne al】 这条指令很有意思,经过我的测试,当al中的数值不为0时直接返回al=1,如果为零则al就等于0,此处al只会从【1,0】中取值。

【CALL CNsCode::CheckCode】 这一段应该就是验证我们是否为合法用户的关键CALL了,内部是计算的核心代码。

9.我们就直接跟在CALL的位置下一个断点,并删除硬件断点吧,找到了更近的我们就删除远的,然后点击运行,让程序运行起来。

10.回到程序,再次点击【添加自定义快捷方式】按钮,程序会断在刚才的CALL处,我们直接【F7】跟进去看看,嗯!果然是核心CALL,看下方这么多处调用了这个CALL来完成用户身份的验证。

11.此时我们直接到CALL的断尾,看返回值返回了多少,直接单步【F8】,或者按下【Ctrl + F9】执行到返回,这里我们暂时不分析注册算法。

12.好了,回到CALL的断首,然后写入以下汇编代码,直接让其返回1。

13.直接点击OD的运行按钮,让程序跑起来,然后点击箭头指向的图标,选择【注册VIP用户按钮】,程序提示完成了注册。

写教程不容易,转载请加出处,您添加出处,是我创作的动力!

转载于:https://www.cnblogs.com/LyShark/p/11181812.html

X86逆向教程10:学会使用硬件断点相关推荐

  1. X86逆向教程15:OD脚本的编写技巧

    本章节我们将学习OD脚本的使用与编写技巧,脚本有啥用呢?脚本的用处非常的大,比如我们要对按钮事件进行批量下断点,此时使用自动化脚本将大大减小我们的工作量,再比如有些比较简单的压缩壳需要脱壳,此时我们也 ...

  2. X86逆向教程2:提取按钮通杀特征码

    本章我们将学习特征码的提取与定位,特征码是软件中一段固定的具有标志性的代码片段,特征码的用途非常广泛,最常见的就是杀毒软件的查杀了,查杀就是根据特征码定位技术实现的,再比如木马的免杀也是修改了特征码的 ...

  3. X86逆向教程6:易语言程序的DIY

    易语言程序在中国的用户量还是很大的,广泛用于外挂的开发,和一些小工具的编写,今天我们就来看下如何给易语言程序DIY,这里是用的易语言演示,当然这门技术也是可以应用到任何一门编译型语言中的,只要掌握合适 ...

  4. X86逆向教程9:通过关键常量破解

    本章将讲解一下关于关键全局变量的一些内容,关键的全局变量对于软件的破解非常的有用,找到了关键全局变量并改写它同样可以完成完美爆破一个程序,这里我将使用CM小例子来讲解搜索关键变量的一些技巧,最后我们来 ...

  5. X86逆向实战7:使用万能断点通杀

    免责声明: 该教程仅为个人学习笔记,并无任何商业目的,本人所发布的一切破解补丁.注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的:不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负 ...

  6. X86逆向教程12:内存补丁的制作

    本章我们将学习各种打补丁的方式,补丁在软件的破解过程中非常的重要,比如软件无法脱壳我们就只能通过打补丁的方式来破解程序,补丁原理就是当程序运行起来会被释放到内存并解码,然后补丁就通过地址或特征码定位到 ...

  7. Js逆向教程-10常见代码混淆

    作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!

  8. 小甲鱼 OllyDbg 教程系列 (四) : 逆向 VisualSite Designer 之 硬件断点

    去掉程序开始之前的界面:https://www.bilibili.com/video/av6889190?p=9 去掉关闭程序后的广告:https://www.bilibili.com/video/a ...

  9. [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. Mat对象与它各种用法
  2. start ssh-agent
  3. Dataset之Rotten Tomatoes:Rotten Tomatoes影评数据集简介、下载、使用方法之详细攻略
  4. 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)
  5. java 爬虫 百度新闻_基于HttpClient实现网络爬虫~以百度新闻为例
  6. c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码
  7. FFmpeg代码导读——HEVC在RTMP中的扩展
  8. luogu P1896 [SCOI2005]互不侵犯
  9. 安装win7系统不能开机启动服务器,win7系统开机启动项不能加载的原因分析及解决...
  10. 【jquery模仿net控件】初步GridView模型实现,及其简单应用
  11. Confirm的用法!
  12. c/c++多线程编程中最好不要加volatile
  13. 北京计算机组织专家对,全球顶级专家齐聚北京 探讨计算机产业“大挑战”
  14. 1091 N-自守数 (15分)
  15. 计算机设备安装属于劳务吗,​安装服务费属于劳务费吗
  16. AcWing 874. 筛法求欧拉函数(欧拉函数)
  17. Android Java类编写规范+优化建议
  18. Win10命令提示符在哪里 怎么打开命令提示符窗口
  19. qca9535 tftp32 刷机_【U-Boot】U-Boot 刷机方法大全
  20. mac更新系统后xcode问题

热门文章

  1. 【51单片机快速入门指南】4.4:I2C 读取HMC5883L / QMC5883L 磁力计
  2. 【机器视觉学习笔记】OpenCV C++的安装、配置及多版本共存 (VS2015)
  3. H264参数语法文档: SPS、PPS、IDR
  4. [react] 说说react diff的原理是什么
  5. [html] 你知道什么是反向链接吗?它有什么应用场景呢?
  6. 与歌谣通关前端面试题【CSS篇汇总目录】
  7. [css] 你知道的等高布局有多少种?写出来
  8. [css] inline、block、inline-block这三个属性值有什么区别?
  9. [css] 在rem下如何实现1像素?
  10. 工作335:uni-增加表单验证