使用x64dbg破解密钥exe程序

1.背景软件案例是自己编写的一个简单案例,主要学习逆向思路和过程,虽然很简单,但是我破解了一天!!!这是破解成功的样子。哈哈很多外挂软件都是卡密的,大

1.背景

软件案例是自己编写的一个简单案例,主要学习逆向思路和过程,虽然很简单,但是我破解了一天!!!

这是破解成功的样子。哈哈很多外挂软件都是卡密的,大差不差,无非加了些壳子。

2.思路

windows软件都是面向消息机制的,当我们输入错误密钥后,他会弹框提示,密钥错误。我们可以根据这个弹框的消息API去打断点,我这边弹框断点是断的MessageBoxA / MessageBoxW(ANSI/Unicode 版本)这2个,然后可以端到MessageBoxW函数,断住后就可以向上回溯,找到密钥判断的逻辑了,一般都是CMP或者TEST后面跟着JMP等J型指令的 这块基本都是判断逻辑。是重点分析的对象。

3.逆向过程

1.这个是我的错误提示

根据错误提示去搜索 密钥错误的关键字,没搜到相关字符串,就直接用弹框API的方式去逆向回溯。

1.2 添加API断点命令

在界面左下角输入:bp MessageBoxW 然后回车 就打上了断点,可以切换到断点视图查看

1.3 打好断点后,我们随便输入一个密钥。触发断点

可以看到 断点断到的位置 就是弹框函数了。注意一定要写好注释,因为有的层级很深,不做好注释,很容易乱。

1.4我们切换到调用堆栈的视图
看看是谁调用了这个弹框API

可以看到也是一个用户函数调用了这个API ,我们双击下一条函数向上跟踪。

我后面写的有注释,可以看到是这个调用了。然后我们向上找,发现并没有相关的J型指令。那么我们可以直接断点到ret 返回的地方,然后看看判断逻辑是不是在更上层函数

1.5看到了相关的J型指令

进行相关的分析,发现这层也不是密钥判断逻辑,然后我们继续向上层函数返回然后分析,断点到ret 然后单步返回到上层函数。


返回上层后可以看到 这层也有很多J型指令,通过分析,也不是。继续返回ret 到上层函数。


到了这层可以看到,错误分支,是被JMP指令包含的,那就要重点分析了,通过断点调试发现,这块就是密钥比较逻辑,让程序正常跳过错误分支不就大功告成了吗,按照这个逻辑分析,可以发现走到JE的时候是会跳过JMP的,所以我们核心改下JE指令的标志位,让ZF等于0不跳过,就可以正常走到JMP呢。然后成功破解。

相关J型资料
在 x86/x64 汇编中,JE(Jump if Equal) 指令是否跳转取决于 CPU 状态标志寄存器(EFLAGS/RFLAGS) 中的 ZF(Zero Flag,零标志位):

  1. JE 的跳转条件
    JE 等同于 JZ(Jump if Zero),两者机器码相同,只是助记符不同。

跳转条件:
当 ZF = 1 时跳转(即前一条指令的结果为 0 或 比较相等时触发)。

JNE 看 ZF 标志位,ZF=0 时跳转。

调试时需检查前一条指令(如 CMP、TEST)是否使 ZF=0。

在 x64dbg 中直接观察 EFLAGS 寄存器即可快速判断。

这里不讲解相关指令用法,只说思路,不知道指令用法的查下就知道了。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1754007927a5108444.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信