只是学习交流讨论,切勿其它用途。
此次分享以实际案例进行讲解,涉及:
- 暴力破解
- 真实注册码寻找
- 注册机编写
- 去除软件暗桩等知识点
x64dbg
Windows 的开源二进制调试器,用于恶意软件分析和对没有源代码的可执行文件进行反向工程。
Winhex
WinHex 本质上是一个通用十六进制编辑器。专为最低级别的数据处理而设计,作为计算机系统犯罪学(取证)调查的多功能工具,用于数据恢复和 IT 安全 - 在日常使用和紧急情况中。
keymaker2
KeyMake是一款功能强大的注册机编写器,该软件采用汇编模板为核心,可方便用户省去复杂的指令算法,从而快速制作出所需的注册机!
OllyDbg
Ollydbg是一款专业的反汇编调试工具,主要用于一些应用程序的编译操作,软件最擅长分析函数过程、循环语句、API调用、函数中参数的数目和import表等等
此节讲解如何通过修改汇编代码来跳过程序验证部分(俗称打补丁)的形式来过掉程序的最终校验
- 所用工具:
x64dbg
外加中文搜索插件(简体中文关键字:需搜索中文字符串) - 将要分析的程序用x64dbg载入
- 点击x64dbg运行按钮,运行程序,让其运行,使其可载入更多的信息用于分析,之后使用字符串搜索工具进行搜索
- 根据关键字查找有用信息
发现一些注册判断跳转,并在跳转处下断点,使其可以中断进行分析 - 注册信息没有填写齐全判断
00510465 | 74 1A | je jzyq.510481 |
00510467 | 8D95 70FFFFFF | lea edx,dword ptr ss:[ebp-90] |
0051046D | 8B83 10030000 | mov eax,dword ptr ds:[ebx+310] |
00510473 | E8 B80BF3FF | call jzyq.441030 |
00510478 | 83BD 70FFFFFF 00 | cmp dword ptr ss:[ebp-90],0 |
0051047F | 75 0F | jne jzyq.510490 |
00510481 | B8 A4065100 | mov eax,jzyq.5106A4 | 5106A4:"注册信息没有填写齐全
想不管输入什么都不提示“注册信息没有填写齐全”这个提示就要使00510465处的跳转不成立,
因原je为等于转移,但出现不等于时跳转不执行,故需二进制编辑废除此跳转, 0051047F处的跳转成立,因原jne为不等于转移,但出现不等于时跳转不执行,故需将其修改为jmp无条件转移指令
注意:因之前在je指令处下载过断点,若想修改指令需删除此处断点
- 注册码正确,感谢你的注册!判断
00510543 | 0F85 A3000000 | jne jzyq.5105EC |
00510549 | B8 D0065100 | mov eax,jzyq.5106D0 | 5106D0:"注册码正确,感谢你的注册!"
想不管输入什么都提示“注册码正确,感谢你的注册!”这个提示就要使00510543处的跳转不成立,
因原jne为不等于时转移,但出现等于时跳转不执行,故需二进制编辑废除此跳转
注意:此方法废除跳转指令后,其背景颜色变灰,显示信息为跳转不会执行
- 运行测试
修改完毕,填写任意注册信息,点击注册
填写任意信息,提示注册成功,显示已注册
思路:在软件运行时监测内存数据,查询是否有敏感或可利用信息
所用工具:Winhex
- 运行软件点击注册
订单号:112233
注册码:china123study
- 打开Winhex进行分析
点击工具—打开RAM内存—选择要查询的程序(jzyq)程序,字符串搜索(快捷键:Ctrl + F):china123study,开始未找到重点,F3继续查找看到关键点:036j5u499~f6242!,测试重新注册提示注册成功
得出如下正确注册信息
订单号:112233
注册码:036j5u499~f6242!
总结:程序根据输入的订单号在算出正确的注册码,并于输入的注册码进行对比相等提示注册成功反之注册失败
在关键判断("注册码正确,感谢你的注册!")处发现EDX存在正确的注册码与所输入的注册码进行对比,导致正确的注册码泄露,根据这一特点读取EDX数据,利用软件自身算码机制计算出正确的注册码并调取使用
所用工具:x64dbg、keymaker2
0051053E | E8 D546EFFF | call jzyq.404C18
- 使用生成的注册机在内存数据中读取出正确的注册码
所用工具:x64dbg、od、winhex
0040959B |. E8 9CDAFFFF CALL <JMP.&kernel32.DeleteFileA> ; \DeleteFileA
00409590 /$ 53 PUSH EBX
00409591 |. 8BD8 MOV EBX, EAX
00409593 |. 8BC3 MOV EAX, EBX
00409595 |. E8 32B7FFFF CALL jzyq.00404CCC
0040959A |. 50 PUSH EAX ; /FileName
0040959B |. E8 9CDAFFFF CALL <JMP.&kernel32.DeleteFileA> ; \DeleteFileA
004095A0 |. 83F8 01 CMP EAX, 0x1
004095A3 |. 1BC0 SBB EAX, EAX
004095A5 |. 40 INC EAX
004095A6 |. 5B POP EBX
004095A7 \. C3 RETN
- 发现有两次引用该删除功能
- 在这两次调用处下断点进行分析
004B01C2 |. E8 C993F5FF CALL jzyq.00409590
005181EB |. E8 A013EFFF CALL jzyq.00409590
先上寻找在程序入口处下个断点
005181CE |. 3D D0D61C00 CMP EAX, 0x1CD6D0
其中EAX数据未订单号的十进制信息
- 关键跳转大于1CD6D0(1890000)跳转不删除注册文件,小于1CD6D0(1890000)跳转不执行删除注册文件
- 订单号需大于1CD6D0(1890000)才不会触发暗桩删除注册文件(但程序关闭时执行判断)
解决办法: - 注册时填写的订单号大于1890000
- 或修改005181D3处的关键跳转使其必跳JG改为JMP
- 《飘云阁5.4教学视频》
请见附件
备注:PPT细节展示不是很多
《逆向分析-使用关键字进行功能破解》.part1.rar (8 MB)
《逆向分析-使用关键字进行功能破解》.part2.rar (8 MB)
《逆向分析-使用关键字进行功能破解》.part3.rar (4.8 MB)
靓图
- 前言
- 目录
- 内容