X86逆向教程10:学会使用硬件断点

本节课我们将学习硬件断点的使用技巧,硬件断点是由硬件提供给我们的一组寄存器,我们可以对这些硬件寄存器设置相应的值,然后让硬件帮我们断在需要下断点的地址上面,这就是硬件断点,硬件断点依赖于寄存器,这些寄存器有个通用的名称,即调试寄存器,调试寄存器一共有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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP获取IP的多种方式解析

转自:http://developer.51cto.com/art/200911/164514.htm PHP获取IP的方法有许多种,我们今天向大家总结了六种方法,希望通过对这六种方法的学习,能够加深我们对PHP语言的进一步了解,巩固我们所掌握的知识。 PHP获取IP方…

html 监控键盘,后台监控鼠标和键盘(可监听全局的鼠标以及键盘按键)

资源下载此资源下载价格为3D币,请先登录资源文件列表MouseKeyboardLibrary/MouseKeyboardLibrary/app.config , 134MouseKeyboardLibrary/MouseKeyboardLibrary/bin/Debug/MouseKeyboardLibrary.exe , 23040MouseKeyboardLibrary/MouseKeyboardLibrary/bin/Debug/Mo…

SQL优化34条

我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享!(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名&#xff…

POJ 3258 River Hopscotch

题目链接:https://vjudge.net/problem/POJ-3258 题目大意 给定数轴上一个起点 0,终点 L,以及中间 N 个不同的点,现准备删除中间 N 个点中的 M 个,使得剩下来的点(包括起点和终点),相…

2021泉州高考学校成绩查询,2021泉州市地区高考成绩排名查询,泉州市高考各高中成绩喜报榜单...

距离2018年高考还有不到一个月的时间了,很多人在准备最后冲刺的同时,也在关心高考成绩。2018各地区高考成绩排名查询,高考各高中成绩喜报榜单尚未公布,下面是往年各地区高考成绩排名查询,高考各高中成绩喜报榜单,想要了解同学可以…

转载:CEO如何“养好CIO同时管好CIO”?

http://www.enet.com.cn/article/2010/1214/A20101214800028.shtml 在现代企业经营理论中,有个着名的“二八定律”,即人才对企业贡献而言,常常是20%的人做出了80%的企业效益。显而易见,这“20%”就是企业的骨干与核心。而这“20%”…

PL/SQL中模拟EBS上下文

有时,我们需要查询的表或视图,是具有OU屏蔽的,这时我们就需要模拟EBS中的上下文来实现查询数据。 BEGIN fnd_global.apps_initialize(user_id >1,resp_id > 2,resp_appl_id >3); mo_global.init(ONT); END; 上述参数的获取&#xff…

[html] 一般习惯把js写在</body>前,但有例外的情况吗?说说看

[html] 一般习惯把js写在前,但有例外的情况吗?说说看 js的放置位置有三种: (1)放在head标签内 (2)放在body标签内 (3)外部script个人简介 我是歌谣,欢迎和大…

计算机桌面设计总结及体会,计算机基础学习心得

计算机基础学习心得 相关内容:计算机硬件是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。下面是第一范文网带来的计算机硬件实习心得体会,欢迎欣赏。计算机硬件实习心得体会一:一、实习目的:1、练习和巩固识别…

POJ 2676 Sudoku【DancingLinks,数独】

http://poj.org/problem?id2676POJ 2676 Sudoku也是求解规模为9*9的数独问题&#xff0c;与POJ 3074 Sudoku相同的问题&#xff0c;只是修改了输入输出格式而已。。。所以也不废话了&#xff0c;嘿嘿。。。 #include<stdio.h> #include<string.h> const int MAX_C…

Unittest方法 -- 测试固件(TestFixture)

前置和后置 1.setUp&#xff1a;在写测试用例的时候&#xff0c;每次操作其实都是基于打开浏览器输入对应网址这些操作&#xff0c;这个就是执行用例的前置条件。2.tearDown&#xff1a;执行完用例后&#xff0c;为了不影响下一次用例的执行&#xff0c;一般有个数据还原的过程…

[html] 如何关闭HTML页面在IOS下的键盘首字母自动大写?

[html] 如何关闭HTML页面在IOS下的键盘首字母自动大写&#xff1f;&#xff1f; autocapitalize"none"或"off"个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一…

所谓语音合成 是计算机根据语言学,计算语言学完整1

计算语言学第一节计算语言学概说概念&#xff1a;计算语言学(computational linguistics)是用计算机研究和处理自然语言的一门新兴边缘学科。涉及语言学、计算机科学、数学等多个领域。旨在通过建立形式化的数学模型&#xff0c;来分析处理自然语言&#xff0c;并在计算机上用程…

再深入 HTTP Referer【转】

简言之&#xff0c;HTTP Referer是header的一部分&#xff0c;当浏览器向web服务器发送请求的时候&#xff0c;一般会带上Referer&#xff0c;告诉服务器我是从哪个页面链接过来的&#xff0c;服务器籍此可以获得一些信息用于处理。 比如从我主页上链接到一个朋友那里&#xff…

剑指:树的子结构

题目描述输入两棵二叉树 A、B&#xff0c;判断 B 是不是 A 的子结构。 我们规定空树不是任何树的子结构。 样例 树 A&#xff1a; 8 / \ 8 7 / \ 9 2 / \ 4 7 树 B&#xff1a; 8 / \ 9 2 返回 true ,因为 B 是 A 的子结构。 解法递归方式遍历&#xff1a; 在树 A 中找到和树 B…

[html] 页面的重绘和回流是什么?

[html] 页面的重绘和回流是什么&#xff1f; 由于节点的几何属性发生改变或者由于样式发生改变而不会影响布局的&#xff0c;称为重绘。回流是布局或者几何属性需要改变就称为回流。回流必定会发生重绘&#xff0c;重绘不一定会引发回流。个人简介 我是歌谣&#xff0c;欢迎和…

QT中IDirect3DDevice9的Present方法失败情况的处理笔记

这几天在试着使用QT做编辑器&#xff0c;然后打算使用Irrlicht作为渲染引擎。结果在集成的时候遇到了问题。 使用了Irrlicht论坛里面有人提供的QIrrlichtWidget&#xff0c;结果什么都画不出来。仔细跟踪了一下&#xff0c;结果是IDirect3DDevice9的Present函数返回了E_FAIL。 …

html5图片长按保存,一文彻底解决HTML5页面中长按保存图片功能

$.fn.longPress function(fn) {let timeout 0;const $this this;for (let i 0; i < $this.length; i) {$this[i].addEventListener(touchstart, () > {timeout setTimeout(fn, 800); // 长按时间超过800ms&#xff0c;则执行传入的方法}, false);$this[i].addEventL…

[html] 页面的重绘和回流是什么?

[html] 页面的重绘和回流是什么&#xff1f; 由于节点的几何属性发生改变或者由于样式发生改变而不会影响布局的&#xff0c;称为重绘。回流是布局或者几何属性需要改变就称为回流。回流必定会发生重绘&#xff0c;重绘不一定会引发回流。

(转)深入理解Java中的final关键字

转自&#xff1a;http://www.importnew.com/7553.html Java中的final关键字非常重要&#xff0c;它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字&#xff1f;将变量&#xff0c;方法和类声明为final代表了什么&#xff1f;使用final的好处是什么&…