使用x64dbg破解密钥exe程序

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 寄存器即可快速判断。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值