【文章标题】: 征途辅助工具箱的注册算法分析
【文章作者】: talaqi
【下载地址】: 天空软件站
【保护方式】: 序列号+注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: PEID、OD
【操作平台】: WinXP
【软件介绍】: “征途辅助工具箱”是一款辅助玩征途游戏的工具箱
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1、首先用Peid查壳,无壳,Borland Delphi 6.0 - 7.0编写。
2、用OD载入程序,找到关键字“请输入注册码”,来到这里:
004E8B5E |. 8D4D E8 lea ecx,dword ptr ss:[ebp-18] ; 提示框(你的序列号是..)
004E8B61 |. BA 448D4E00 mov edx,gameTool.004E8D44
004E8B66 |. B8 508D4E00 mov eax,gameTool.004E8D50 ; 此处下断,F8 ←来到这里
004E8B6B |. E8 24DBF4FF call gameTool.00436694 ; 输入注册码
004E8B70 |. F6D8 neg al
004E8B72 |. 1BC0 sbb eax,eax
004E8B74 |. 85C0 test eax,eax ; 测试是否输入注册码
004E8B76 |. 0F84 E1000000 je gameTool.004E8C5D ; 没有就跳走
004E8B7C |. 8D45 E0 lea eax,dword ptr ss:[ebp-20]
004E8B7F |. 50 push eax
004E8B80 |. B9 05000000 mov ecx,5 ; ECX赋初值5
004E8B85 |. 33D2 xor edx,edx ; EDX清零
004E8B87 |. 8B83 10060000 mov eax,dword ptr ds:[ebx+610] ; 序列号送EAX
004E8B8D |. E8 D6BCF1FF call gameTool.00404868 ; 取出序列号的前5位
004E8B92 |. 6A 00 push 0
004E8B94 |. 6A 02 push 2
004E8B96 |. 8B45 E0 mov eax,dword ptr ss:[ebp-20] ; 序列号前5位送EAX
004E8B99 |. E8 4605F2FF call gameTool.004090E4 ; 转换成16进制形式
004E8B9E |. E8 41C7F1FF call gameTool.004052E4 ; 前5位的16进制*2,
; 记为a
004E8BA3 |. 8945 F0 mov dword ptr ss:[ebp-10],eax
004E8BA6 |. 8955 F4 mov dword ptr ss:[ebp-C],edx
004E8BA9 |. 8D45 E0 lea eax,dword ptr ss:[ebp-20]
004E8BAC |. 50 push eax
004E8BAD |. 8B83 10060000 mov eax,dword ptr ds:[ebx+610] ; 序列号再送EAX
004E8BB3 |. E8 50BAF1FF call gameTool.00404608
004E8BB8 |. 8BC8 mov ecx,eax ; 序列号位数送ECX
004E8BBA |. 83E9 05 sub ecx,5 ; ECX-5
004E8BBD |. BA 06000000 mov edx,6 ; EDX赋值为6
004E8BC2 |. 8B83 10060000 mov eax,dword ptr ds:[ebx+610] ; 序列号送回EAX
004E8BC8 |. E8 9BBCF1FF call gameTool.00404868 ; 取序列号的后4位,
; 即ECX-5=4
004E8BCD |. 6A 00 push 0
004E8BCF |. 6A 03 push 3
004E8BD1 |. 8B45 E0 mov eax,dword ptr ss:[ebp-20] ; 序列号后4位送EAX
004E8BD4 |. E8 0B05F2FF call gameTool.004090E4 ; 转换成16进制形式
004E8BD9 |. E8 06C7F1FF call gameTool.004052E4 ; 后4位的16进制*3
; 记为b
004E8BDE |. 0345 F0 add eax,dword ptr ss:[ebp-10] ; a+b,求和.记为c
004E8BE1 |. 1355 F4 adc edx,dword ptr ss:[ebp-C]
004E8BE4 |. 8945 F0 mov dword ptr ss:[ebp-10],eax
004E8BE7 |. 8955 F4 mov dword ptr ss:[ebp-C],edx
004E8BEA |. FF75 F4 push dword ptr ss:[ebp-C]
004E8BED |. FF75 F0 push dword ptr ss:[ebp-10]
004E8BF0 |. 8D45 E4 lea eax,dword ptr ss:[ebp-1C]
004E8BF3 |. E8 2804F2FF call gameTool.00409020
004E8BF8 |. 8B45 E4 mov eax,dword ptr ss:[ebp-1C] ; c的十进制送EAX
004E8BFB |. 8B55 E8 mov edx,dword ptr ss:[ebp-18] ; 试炼码送EDX
004E8BFE |. E8 51BBF1FF call gameTool.00404754 ; 关键CALL,跟进
004E8C03 |. 75 58 jnz short gameTool.004E8C5D ; 不相等则跳向OVER
(其余代码省略)
跟进关键CALL来到这里:
00404754 /$ 53 push ebx
00404755 |. 56 push esi
00404756 |. 57 push edi
00404757 |. 89C6 mov esi,eax ; c的十进制送ESI
00404759 |. 89D7 mov edi,edx ; 试炼码送EDI
0040475B |. 39D0 cmp eax,edx ; c与试炼码进行比较
0040475D |. 0F84 8F000000 je gameTool.004047F2 ; 相等则跳,必须跳,
; 跳到注册成功的地方
00404763 |. 85F6 test esi,esi
(中间代码省略)
004047F2 |> 5F pop edi
004047F3 |. 5E pop esi
004047F4 |. 5B pop ebx
004047F5 \. C3 retn
-----------------------------------------------------------------------------------------
【经验总结】
序列号前5位数的16进制*2+其余位数的16进制*3,求和。再转换为10进制数即为真正的注册码。
-----------------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
[课程]Android-CTF解题方法汇总!