• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

在这节课中,我们将学习使用硬件断点的技巧。硬件断点是硬件提供给我们的一组寄存器。我们可以给这些硬件寄存器设置相应的值,然后让硬件帮我们去破解需要破解的地址。这是硬件断点,依赖于寄存器。这些寄存器有一个共同的名字,即调试寄存器。共有八个调试寄存器,从DR0到DR7。在软件破解中,经常使用硬件断点来寻找赋值或读取的原始位置。

硬件断点并不是像OD这样的调试器所独有的功能。调试器只是将用户的需求转换成特定的格式,写入DRX寄存器组,等待硬件返回执行结果。因为硬件断点是由CPU在硬件层面直接支持的,所以硬件断点的效率是所有断点中最高的。

在OD等调试器中,除了硬件断点,还有一个内存断点。内存断点通过修改内存页的属性和捕捉异常来间接挂起被调试的程序。内存断点的效率远低于硬件断点,但内存断点的自由度大于硬件断点。通常情况下,如果可以使用硬件断点,就不要使用内存断点。有时候很容易被卡成狗。

-

本章的难点:

课件:CM_10.zip

-

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

q3qb2amfvpo1662.png

2.我们直接按[Ctrl B],输入按钮事件特征码[FF 55 FC 5F 5E],然后在调用的位置做一个断点。

krjjl0axx2y1663.png

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

3j1roijcwbk1664.png

图中有一个CMP指令,把[4A25F0]中的值拿出来和0比较,从而影响JNZ跳转。我们的下一步是找出谁把数据写到这个内存地址。

4.直接在数据窗口,按[Ctrl G]键,输入内存地址[4A25F0],会发现值为0。

fdqwpsmkche1665.png

5.在数据窗口中选择第一个双字数据,然后选择[断点]、[硬件写入]、[双字]。这里的DWORD由CMP指令决定,这里的[CMP DWORD PTR]决定,所以我们需要下一个DWORD断点。

hypoobt1hbm1666.png

6.断点结束后,重新加载程序,然后正在运行的程序就直接被打断了。你会发现像[MOV德沃德]这样的赋值语句。没错,这就是源头。uuwguwwj5lp1667.png

实战:破解 HofoSetup 2019

声明:本教程仅供技术交流,无商业目的。您不得将以下内容用于商业或非法目的,否则后果自负。如果你喜欢这个节目,请支持正版软件,购买并注册,获得更好的正版服务。如有侵权,请通过邮件联系作者!

1.先OD load然后直接,[F9]运行程序,记下按键字符串。这里我们写下【vip】部分。

euqduzcg5gg1668.png

2.直接在反汇编窗口,右键选择中文搜索,智能搜索字符串,搜索一个带v的字符串

ip的字符串,这里我找到了如下字符串。

235qz5qf2w31669.png

 

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

4nbwimkjv251670.png

 

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

3xap2sdadhu1671.png

 

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

ph0mvcqvd3j1672.png

 

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

dd330a0iem11673.png

 

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

0ht1smixuwi1674.png

 

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

is1yx5evlt51675.png

【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的位置下一个断点,并删除硬件断点吧,找到了更近的我们就删除远的,然后点击运行,让程序运行起来。

cyimpw32flm1676.png

 

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

bpuy3zaeror1677.png

 

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

v1k0hcn45uu1678.png

 

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

plynroly0ce1679.png

 

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

corl0a0klxc1680.png

 

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now