首页
社区
课程
招聘
99奇迹2.6B破解全攻略[转贴]--关于网络验证...
2004-5-13 20:10 13999

99奇迹2.6B破解全攻略[转贴]--关于网络验证...

2004-5-13 20:10
13999
99奇迹2.6B破解全攻略

作者:石力[51pywg]
网址:www.51pywg.com

说明:51PYWG网为了广大游戏爱好者利益推出了各种游戏辅助工具!让所有玩家不至于用不上游戏辅助工具,买不起游戏辅助工具!但网站因此遭受到DOS攻击,服务器端口数据堵塞无法服务,在此表示歉意!
同时攻击者还谎称本站提供的程序有木马,为了辩明是非,同时也是和各位解密爱好都共同探讨技术,特发表此文,希望大家喜欢并支持51pywg的发展。如果对破解解密感兴趣的朋友,也可以来我们的论坛一起探讨。
还是那句话:时时关注51pywg,更多精彩等着你!

至于软件的脱壳问题,在此不过多说明,无非就是ARM的壳。如果大家有这样的朋友,可以让他们代劳一下了;)

一、将远程验证改为本地验证。
软件脱壳后,用ultraedit(或其它32位)工具将文件打开,查收字符串210.17.189.108或210.17.189.111,将其改为本地验证,即127.0.0.1,不足的地方添加内码0

由于原软件采用的是随机端口9825-9809,所以我们也还固定端口

0042AC39    81C2 61260000   ADD     EDX, 2661       //9825-9829  

改为:
0042AC39    90              NOP                                 
0042AC3A    BA 61260000     MOV EDX,2661           //改为固定的端口9825

二、验证服务器的编写
注:所有说明均以验证服务器角度。

1、客户端发来第一次数据(定长13个字节)
例:
0000  21 21 22 23 30 00 00 00 00 27 30 30 30             !!"#0....'000

将第5位(0x30)依次异或6-13位,得到结果(内存的显示结果):
30 30 30 30 17 00 00 00
其中,后四位代表客户端版本编号,0x17为2.6A版,0x15为2.6版

2、服务器发回第一次验证值(定长24字节)
24字节分成两部分,前16个字节为第二次验证数据的加密密钥,后8个字节为本次验证的合法性校验值!

a、前16位生成原理:
   随机生成四个值: 00000A18 00000F86 00007A1C 000027AC
   内存显示结果:18 0A 00 00 86 0F 00 00 1C 7A 00 00 AC 27 00 00
   
b、后8位生成原理:
   加密数据:
   30 30 30 30 17 00 00 00

将数据合并为24位待加密数据:
   18 0A 00 00 86 0F 00 00 1C 7A 00 00 AC 27 00 00
   30 30 30 30 17 00 00 00

然后用加密密钥(固定,内存显示结果)
   51 EA 98 26 FA 75 42 71 5E 72 FA 53 EC 43 AB 69
   ①2698EA51
   ②714275FA
   ③53FA725E
   ④69AB43EC

经过加密(具体加密原理,见三“加密函数”,分段加密,每次处理8位)
得到结果(内存显示结果):
   97 BA DB A9 6A C7 62 15 3B AB 0E 10 DA 93 55 27
   D1 F8 F5 63 C1 ED 9B 90
   
将此24位数据发送出去,第一次验证通过

3、客户端发来第二次验证数据(定长176位,包含帐号密码等信息)
其实这个数据也是用刚才随机生成四个值(00000A18 00000F86 00007A1C 000027AC)为密钥加密成的,
例:
0000  51 08 24 BC 97 2B AB C8 E2 C5 6E BA F6 2A 0E 4F    Q.$..+....n..*.O
0010  97 D6 CD 8D 83 24 B2 D6 E2 C5 6E BA F6 2A 0E 4F    .....$....n..*.O
0020  25 33 17 53 31 34 68 5E 5B 5F FB 06 B0 A9 1D 90    %3.S14h^[_......
0030  62 9E 41 1E 6B 68 06 C3 E2 C5 6E BA F6 2A 0E 4F    b.A.kh....n..*.O
0040  E2 C5 6E BA F6 2A 0E 4F E2 C5 6E BA F6 2A 0E 4F    ..n..*.O..n..*.O
0050  E2 C5 6E BA F6 2A 0E 4F E2 C5 6E BA F6 2A 0E 4F    ..n..*.O..n..*.O
0060  E2 C5 6E BA F6 2A 0E 4F E2 C5 6E BA F6 2A 0E 4F    ..n..*.O..n..*.O
0070  57 84 5A 57 A6 71 38 62 A8 97 0F 99 7B 0C 37 A5    W.ZW.q8b....{.7.
0080  E2 C5 6E BA F6 2A 0E 4F E2 C5 6E BA F6 2A 0E 4F    ..n..*.O..n..*.O
0090  E2 C5 6E BA F6 2A 0E 4F E2 C5 6E BA F6 2A 0E 4F    ..n..*.O..n..*.O
00A0  E2 C5 6E BA F6 2A 0E 4F E2 C5 6E BA F6 2A 0E 4F    ..n..*.O..n..*.O

服务器解密这段数据,正好是“加密函数”的逆运算(具体解密原理,见四“解密函数”)。也是分段解密,每次处理8位
解密密钥就是(四个刚才生成的随机值)
   18 0A 00 00 86 0F 00 00 1C 7A 00 00 AC 27 00 00

得到结果:
39 39 71 6A 00 00 00 00 00 00 00 00 00 00 00 00  99qj............
41 55 54 48 45 4E 00 00 00 00 00 00 00 00 00 00  AUTHEN..........
77 77 77 2E 39 39 71 6A 2E 63 6F 6D 00 00 00 00  www.99qj.com....
61 62 63 64 65 66 00 00 00 00 00 00 00 00 00 00  abcdef..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
63 6E 68 65 72 6F 30 30 37 00 00 00 00 00 00 00  51pywg..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

第一行为九九奇迹(外挂)的帐号
第二行为用于校验(固定)
第三行为九九奇迹(外挂)的密码
第四行为用于校验(固定)
第八行为奇迹(游戏)的帐号

4、服务器返回第二次验证数据(定长48位):
0000  A7 80 7E 44 AF E6 59 59 00 00 00 00 00 00 00 00    ..~D..YY........
0010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0020  32 2E 36 61 00 00 00 00 00 00 00 00 B1 C4 FD 4B    2.6a...........K

这里只有前8位有效,其余均为固定(对于2.6A版本而言)
前8位生成原理:
   加密数据(内存显示结果),即"SUCCESS"字符串
   53 55 43 43 45 53 53 00
   加密密钥(内存显示结果),还是刚才生成的4个随机值
   18 0A 00 00 86 0F 00 00 1C 7A 00 00 AC 27 00 00

加密原理与第二步的相同(详见“加密函数”文章),但这里不同的是这8位数据,用同样的密钥加密了6次
各次结果如下(内存显示结果):
53 55 43 43 45 53 53 00                          SUCCESS.
加密到
1F 02 83 77 0A 75 21 AC                          ?.u!?.

A1 7F ED 97 12 1B 45 64                          ??Ed..

7E 56 E9 2E 08 03 79 71                          ~V?

75 00 EA 55 76 87 A8 20                          u.暾v? ..

52 6D E1 B8 17 35 DC 12                          Rm岣5?
最后得到就是要的结果
A7 80 7E 44 AF E6 59 59

三、加密函数
举例:
加密数据(内存显示结果),第一次生成的4个随机数的前两个
   18 0A 00 00 86 0F 00 00
   ⑴00000A18
   ⑵00000F86
加密密钥(内存显示结果),程序固定
   51 EA 98 26 FA 75 42 71 5E 72 FA 53 EC 43 AB 69
   ①2698EA51
   ②714275FA
   ③53FA725E
   ④69AB43EC

程序代码段:
:0045099C 8B8640040000            mov eax, dword ptr [esi+00000440]
:004509A2 57                      push edi       //加密密钥
:004509A3 8D8CC63C020000          lea ecx, dword ptr [esi+8*eax+0000023C]
:004509AA 51                      push ecx       //加密数据
:004509AB E8803D0000              call 00454730  //加密函数(每次加密8个字节),F8跟进

-----------------F8跟进加密函数----------------------------
:00454730 83EC0C                  sub esp, 0000000C
:00454733 53                      push ebx
:00454734 55                      push ebp
:00454735 56                      push esi
:00454736 8B742420                mov esi, dword ptr [esp+20]
:0045473A 8B4C241C                mov ecx, dword ptr [esp+1C]
:0045473E 57                      push edi
:0045473F 8B3E                    mov edi, dword ptr [esi]   //①2698EA51
:00454741 33D2                    xor edx, edx
:00454743 8B01                    mov eax, dword ptr [ecx]   //⑴00000A18
:00454745 8B4904                  mov ecx, dword ptr [ecx+04]//⑵00000F86
:00454748 897C2410                mov dword ptr [esp+10], edi
:0045474C 8B7E04                  mov edi, dword ptr [esi+04]//②714275FA
:0045474F 897C2424                mov dword ptr [esp+24], edi
:00454753 8B7E08                  mov edi, dword ptr [esi+08]//③53FA725E
:00454756 8B760C                  mov esi, dword ptr [esi+0C]//④69AB43EC
:00454759 897C2418                mov dword ptr [esp+18], edi
:0045475D 89742414                mov dword ptr [esp+14], esi
:00454761 BF20000000              mov edi, 00000020   //计数器

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004547AB(C)
|
:00454766 8B5C2424                mov ebx, dword ptr [esp+24] //EBX=②714275FA
:0045476A 8B6C2410                mov ebp, dword ptr [esp+10] //EBP=①2698EA51
:0045476E 8BF1                    mov esi, ecx                //⑵00000F86
:00454770 81EA4786C861            sub edx, 61C88647  //0 - 61C88647 = 9E3779B9
:00454776 C1EE05                  shr esi, 05        //⑵00000F86 SHR 5 = 0000007C
:00454779 03F3                    add esi, ebx   //0000007C + ②714275FA = 71427676      
:0045477B 8BD9                    mov ebx, ecx
:0045477D C1E304                  shl ebx, 04        //⑵00000F86 SHL 4 = 0000F860      
:00454780 03DD                    add ebx, ebp   //0000F860 + ①2698EA51 = 2699E2B1
:00454782 8B6C2418                mov ebp, dword ptr [esp+18] //③53FA725E
:00454786 33F3                    xor esi, ebx   //71427676 XOR 2699E2B1 = 57DB94C7
:00454788 8D1C0A                  lea ebx, dword ptr [edx+ecx]//9E3779B9+00000F86=9E37893F
:0045478B 33F3                    xor esi, ebx   //57DB94C7 XOR 9E37893F = C9EC1DF8  
:0045478D 8B5C2414                mov ebx, dword ptr [esp+14] //④69AB43EC
:00454791 03C6                    add eax, esi   //C9EC1DF8 + 00000A18 = C9EC2810   
:00454793 8BF0                    mov esi, eax
:00454795 C1EE05                  shr esi, 05    //C9EC2810 SHR 5 = 064F6140
:00454798 03F3                    add esi, ebx   //064F6140 + ④69AB43EC = 6FFAA52C   
:0045479A 8BD8                    mov ebx, eax
:0045479C C1E304                  shl ebx, 04    //C9EC2810 SHL 4 = 9EC28100
:0045479F 03DD                    add ebx, ebp   //9EC28100 + ③53FA725E = F2BCF35E
:004547A1 33F3                    xor esi, ebx   //6FFAA52C XOR F2BCF35E = 9D465672   
:004547A3 8D1C02                  lea ebx, dword ptr [edx+eax]//9E3779B9 + C9EC2810 = 6823A1C9
:004547A6 33F3                    xor esi, ebx   //9D465672 XOR 6823A1C9 = F565F7BB
:004547A8 03CE                    add ecx, esi   //00000F86 + F565F7BB = F5660741
:004547AA 4F                      dec edi
:004547AB 75B9                    jne 00454766   //向上跳构成循环结构,共循环32(10进制)次
************************************************************
上面仅列出第一次循环时的结果,只需要的值,EAX=C9EC2810 ECX=F5660741
最后循环32次后。得到EAX=A9DBBA97   ECX=1562C76A
************************************************************
:004547AD 8B542420                mov edx, dword ptr [esp+20]
:004547B1 5F                      pop edi
:004547B2 5E                      pop esi
:004547B3 5D                      pop ebp
:004547B4 8902                    mov dword ptr [edx], eax
:004547B6 894A04                  mov dword ptr [edx+04], ecx  //放入内存后的结果
**********************************************************************
0047B8AC  97 BA DB A9 6A C7 62 15                          ?郓j氢...
**********************************************************************
:004547B9 5B                      pop ebx
:004547BA 83C40C                  add esp, 0000000C
:004547BD C3                      ret

到此完成8个字节的加密

四、解密函数
基本上就是将上便过程进行逆推,如果不对的地方还请指正

呵呵,现在大家发现了吧。原来破解是这么简单。

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞10
打赏
分享
最新回复 (26)
雪    币: 233
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
shaitan 1 2004-5-13 20:15
2
0
有兴趣的朋友自己试试吧,我是看不懂了
雪    币: 233
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
shaitan 1 2004-5-13 20:49
3
0
衣服给它脱了。点击下载:附件! 脱壳系统WIN XP

请朋友参加此文章学习的朋友将心得贴出来。谢谢
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhousi 2004-5-16 19:38
4
0
难,弄不懂。
雪    币: 227
活跃值: (130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iceplus 2004-5-16 19:40
5
0
感谢楼主的无私奉献精神
雪    币: 212
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
writer15 2004-5-16 19:51
6
0
不错,虽然是转的,但是支持一下。今晚去试试
雪    币: 217
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kanezhangwei 2004-5-16 21:38
7
0
希望以后还能看见:)
雪    币: 233
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
shaitan 1 2004-5-17 23:25
8
0
本地认证的破解版已经有下载了,不知道有没有朋友DIY了
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sjp.1 2004-5-20 19:16
9
0
真是太复杂了
雪    币: 12893
活跃值: (3773)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
LOCKLOSE 2 2004-5-20 19:50
10
0
不错哦,经典。很少看到分析封包数据的帖子哦~顶
雪    币: 209
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tyzam 2004-5-24 20:50
11
0
?主能不能砧下怎麽??阿
雪    币: 300
活跃值: (521)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
深海游侠 10 2004-5-28 03:49
12
0
不错的文章。
雪    币: 214
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yayafu 2004-6-2 13:46
13
0
我先试试脱壳,如果能脱,再破解看看
雪    币: 213
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xf3087 2004-7-18 20:00
14
0
真是好帖子!与实际联系紧密啊

可以问问楼主吗,你是从哪转来的帖?
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ahaisoft 2004-7-23 22:34
15
0
呵,我在玩奇迹
有谁知道它的最新版本是用什么加的壳啊,用peid看不出来.
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lingdu20 2004-7-24 12:09
16
0
楼主你的附件用peid查,有壳啊!
另外,如果验正码前面6位不同,怎么改?
雪    币: 2233
活跃值: (1865)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
benladen 2004-7-24 12:51
17
0
虽然看不懂,但是强贴。
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
flywyou 2004-7-24 19:48
18
0
请问改为本地验证后,怎样在本地发送原来服务器要发送的信息啊?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
软件商人 2004-7-25 08:41
19
0
呵呵!  我看作者是想气死 99奇迹的人啊。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qweerty 2004-7-25 08:56
20
0
不懂!!
有没有高手解释一下呢!
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
游戏而已 2004-7-26 01:41
21
0
最初由 flywyou 发布
请问改为本地验证后,怎样在本地发送原来服务器要发送的信息啊?


  我也想知道。。谁来解释一下呀。。
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
upxshell 2004-7-26 07:29
22
0
支持
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lingdu20 2004-10-25 03:03
23
0
那为高手能解释下+密与解密的过程,具体点,这里没看太明白!谢谢
雪    币: 12173
活跃值: (3337)
能力值: ( LV15,RANK:1565 )
在线值:
发帖
回帖
粉丝
AloneWolf 3 2004-10-25 08:47
24
0
好文....
虽然偶不玩奇迹...8过8顶8行....;) ;)
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
qiweixue 19 2004-10-25 12:09
25
0
楼主有阴谋
游客
登录 | 注册 方可回帖
返回