--------------------------------------------------
仅供学习,请勿商用。引言:这几天在学“大字牌”也在学OD,无奈,网上的“大字牌”单机游戏太少,只有“中国字牌
V2.01”和“常德跑和字99”。网络版有黄金岛(收费)和南宁同城游戏版。这两个游戏都要注册的,反正在学OD,所以拿它
们开刀,“常德跑和字99版”的注册方法是字符对比,直接“超级字符串参考+”就能看到本机注册码。“中国字牌V2.01”
就难了,今天以它为例,谈谈分析。
软件名: 中国字牌 2.01
下载地址:http://www.onlinedown.net/soft/28798.htm
一、先试用软件
到注册窗口,见机器码为16位无法改,注册码为27位为NY-aaaa-bbbb-cccc-dddd-eeee。乱输入提示“注册码错误,请重新输
入”记住这串字,从这里入手。再看看游戏根目录有一个sysdata.ini。进去看到一些设置和注册码,看来该软件是从这里复
查注册码,不知道爆破行不行。
二、用OD打开“中国字牌.exe”
1.用“超级字符串参考+”找“注册码错误,请重新输入”。找到2个。
地址=0047827D 反汇编=MOV EDX,中国字牌.00478460 文本字串=注册码错误,请重新输入
地址=00477F85 反汇编=MOV EDX,中国字牌.004780C0 文本字串=注册码错误,请重新输入
并加个“标签”,方便等下用CTRL+N快速回来
2.分别到地址=0047827D和地址=00477F8看看,向上几行都有一个TEST AL AL和JNZ。先用爆破的方法看看是不是关键跳。先
加断点在这两个地址这前,如果断下,说明方向基本正解。再把JNZ改成JMP试试会不会出注册正确的窗口。(但该软件爆破
后只会发牌打不了牌)
00478263 > . A1 40FB4A00 MOV EAX,DWORD PTR DS:[4AFB40] ; 取机器码
00478268 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
0047826A . 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; 取注册码
0047826D . E8 3EF6FFFF CALL 004778B0 ; 算法入口
00478272 . 84C0 TEST AL,AL
00478274 75 1D JNZ SHORT 中国字牌.00478293 ;关键跳
00478276 . 6A 00 PUSH 0
00478278 . B9 48844700 MOV ECX,中国字牌.00478448 ; 系统信息
0047827D . BA 60844700 MOV EDX,中国字牌.00478460 ; 注册码错误,请重新输入
3.分析算法,我是第一次深入的一条一条的分析反汇编代码,所以用了几天时间,走了不少弯路。但弯路没有白走。
分析了机器码和注册码的位数校验代码,发现注册码只能为数字。
分析了提取四位数字串代码,发现它会把16位机器码分成4组,一组4个数,注册码也一样4位一组。
分析了每组4位数的运算代码,发现它是把每组10进制数转换成16进制存入并内存DS
分析了注册码记录代码。输入正确的注册码后,它会打开sysdata.ini写入正确的注册码,所以爆破后会把错误的注册码写入
sysdata.ini
最后我才分析到关键算法:
0047826D . E8 3EF6FFFF CALL 004778B0 ; 算法入口
在这里下断,断下后F7进入
进入后逐条分析,发现它还是位数位数校验、提取四位数字串等前面分析过的。所以跳过,直接从004778B0跳到004779B6
004779B6 > . 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30];EDX=注册码第一组数字的16进制表示
004779B9 . C1E2 03 SHL EDX,3 ;二进制左移3位(相当于10进制的*8)
004779BC . 8B4D E4 MOV ECX,DWORD PTR SS:[EBP-1C];ECX=机器码第一组数字的16进制表示
004779BF . 2BCA SUB ECX,EDX ;ECX=机器码-注册码
004779C1 . 2BC8 SUB ECX,EAX ;EAX=注册码最后一组第一个数可修改寄存器好分析下面
004779C3 . 74 0F JE SHORT 中国字牌.004779D4 ;相等就OK 不等就完蛋
004779C5 . 33DB XOR EBX,EBX
004779C7 . 33C0 XOR EAX,EAX
004779C9 . 5A POP EDX
004779CA . 59 POP ECX
004779CB . 59 POP ECX
004779CC . 64:8910 MOV DWORD PTR FS:[EAX],EDX
004779CF . E9 C8000000 JMP 中国字牌.00477A9C ;上面错误就从这跳走
004779D4 > 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40]
004779D7 . 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
004779DA . 8A52 01 MOV DL,BYTE PTR DS:[EDX+1]
004779DD . E8 52CDF8FF CALL 中国字牌.00404734
004779E2 . 8B45 C0 MOV EAX,DWORD PTR SS:[EBP-40]
004779E5 . E8 0A0DF9FF CALL 中国字牌.004086F4
004779EA . 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
004779ED . C1E2 03 SHL EDX,3 ; 左移3
004779F0 . 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18]
004779F3 . 2BCA SUB ECX,EDX
004779F5 . 2BC8 SUB ECX,EAX
004779F7 . 74 0F JE SHORT 中国字牌.00477A08
这里我只分析第一组注册码的算法,其它组的也差不多,不一一分析
4.得到算法:
算法:
机器码:aaaabbbbccccdddd 16位
注册码NY-XXXX-YYYY-ZZZZ-MMMM-ABCD
分四组算
1. aaaa和XXXX都先转成16进制,aaaa-(XXXX右移3位(相当于*8))=A
2. bbbb和YYYY都先转成16进制, bbbb-(YYYY右移3位(相当于*8))=B
3. cccc和ZZZZ都先转成16进制,cccc-(XXXX*6)=C
4. dddd和MMMM都先转成16进制,dddd-(MMMM*4)=D
5.做注册机。注册机我已经做好,但不知道看雪给不给上,所以这里先不上。
6.结束语,写的时候真的很简单,但请同我一样的新手还是去分析分析其它的代码才会有学习的作用。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法