软件逆向新手让AI给我当助手,让我3分钟破解了一个程序
|
admin
2026年9月29日 10:48
本文热度 165
|
免责声明
本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发。使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。
前面我们搭建了一个软件逆向的AI智能体:软件逆向破解新手借助AI自动逆向软件注册码
本节我们继续让AI帮我们分析和逆向一个软件,我们只管发号司令就行。
首先我们打开要破解的程序,看看界面和使用下功能。
这是我们自己编写的一个简单小程序。要求输入真实注册码完成注册。打开调试器x32dbg.exe,开启AI服务。
再打开TraeCode CN平台,接入MCP服务后。让AI干活吧。第一,给AI下命令。让它打开要调试的程序“请用x32dbg打开C盘目录it0365里的EXE程序”
已通过 x32dbg 成功打开该程序:
- 目标文件 :`C:\it0365\it0365.exe` (32 位 PE,镜像基址`0x00400000` ,入口点`0x00401840` )- 当前状态 :已暂停在系统断点处(EIP =`0x77E80DE3` ,位于 ntdll 区域),尚未运行到程序入口如需继续,可以告诉我:直接运行(F9)、单步到入口点 OEP、下断点,或查看反汇编/模块导入表等。
这里说明AI开始干活了,把调试的程序加载到了调试器里。我们运行它后,输入假密码。让AI继续干活。第二条指令:“被调试的程序,输入假的注册码会有“注册码错误”的提示,请根据错误提示找到关键逻辑下断点”
已根据"注册码错误"提示字符串定位到完整验证逻辑,并在关键位置下好断点。程序现已运行,请在窗口中输入任意假注册码点击确定,即会触发断点。
1. 内存搜索 GBK 字符串"注册码错误",命中 `0x00403020` (紧邻其旁的`0x00403030` 是"注册码正确!",`0x00403040` 处还存放着硬编码的正确码 `it0365` )2. 搜索`push 0x403020` 指令,定位到失败分支`0x004015A2` ,向上回溯找到验证函数(入口`0x00401540` )Assembly`0040154C mov eax,[edi+0x60] ; eax = 用户输入的注册码0040154F mov esi,0x403040 ; esi = 正确码 "it0365"00401554 ──循环逐字节比较两个字符串──0040155C jnz 0x0040157C ; 任一字符不同 → 不等00401581 test eax,eax ; 比较结果:0=相等,1=不等00401587 jnz 0x004015A2 ; ★关键跳转:不等则进入错误提示00401589 push "注册码正确!" ; 相等(不跳转)→ 成功分支004015A2 push "注册码错误!" ; 失败分支`
地址 作用 `0x0040154F` 比较开始前,可查看用户输入(eax)与正确码(esi 指向`0x403040` ) `0x00401587` 最关键的判断跳转 :ZF=1(eax=0)放行成功,ZF=0 则跳到错误提示。在此改 ZF=1 或将指令改为`jz` /`nop` 即可爆破 `0x004015A2` 错误分支入口,命中即说明注册码错误
你输入假注册码后,命中断点时告诉我,我可以继续帮你观察寄存器/内存,或直接修改标志位实现绕过。
可以看到AI非常准确的给我们定位了关键代码,连反汇编代码也给出了。并且对于的位置也下好了断点。
输入假注册码后,调试器中,程序正确被中断下来。我们接着给AI发生第三天指令:“请找出正确的注册码”。
已确认。当前断点处对比双方:
- 你输入的假码 (eax →`0x00A92410` ):`xuejiemi.com`- 程序内置正确码 (esi 将指向`0x00403040` ):`it0365`## 正确注册码# it0365依据:验证函数`0x00401540` 把用户输入与固定地址`0x00403040` 处的字符串逐字节比较,该内存内容为:`69 74 30 33 36 35 00 i t 0 3 6 5 \0`
完全一致时`0x00401587` 的`jnz` 不跳转,进入"注册码正确!"分支。
程序目前暂停在断点`0x0040154F` 。需要我继续运行(F9)让你重新输入`it0365` 验证成功提示吗?
根据AI提示,我们输入注册码 it0365再次执行,就出现了 注册码正确的 提示。验证通过,程序已运行并弹出成功提示。整个过程结果如下:
## 验证完成 ✅- 输入注册码: `it0365`- 在关键判断点`0x00401587` 处,比较结果 eax = 0(两字符串相等)- `jnz 0x004015A2` 不跳转 ,程序落到`0x00401589` 成功分支- 界面现已弹出 "注册码正确!" 提示正确注册码确认为 `it0365` 。
这已经是本会话第 3 次围绕 x32dbg 做"字符串提示 → 回溯关键跳转 → 下断点/验证"的同类逆向操作,后续如果经常处理这类小程序,可以把它沉淀成一个仅在本工作区可用的 Skill(自动搜索中文字符串、定位引用、识别成功/失败分支并在关键跳转下断),需要的话告诉我即可创建。
阅读原文:点击这里
该文章在 2026/9/29 10:49:14 编辑过