注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风雨夜归人

专业收集资料,个人爱好!

 
 
 

日志

 
 

诛仙答题分析  

2009-11-14 19:10:33|  分类: 外挂学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

诛仙答题挂制作介绍材料,供参考

本文仅供程序爱好者学习交流之用,如有人用于其他用途,本人该不负责。

以下内容中S代表游戏服务器,C代表游戏客户端,X代表游戏外挂,MS代表自己做的外挂答题服务器,MC代表自己做的外挂专用答题程序

提问封包(S->C)解密后格式如下:

示例1

00000000h: 93 A7 5A 2C 2C C3 D9 00 00 00 01 73 BF 08 CB 00 ; 摟Z,,觅....s??

00000010h: 00 00 01 05 16 F7 8B EE 95 E5 4E 0B 4E A1 8B 97 ; .....鲖顣錘.N?

00000020h: 7B 19 95 EF 8B 84 76 2F 66 1F FF 0C 38 00 D7 00 ; {.曪媱v/f.?.?

00000030h: 35 00 3D 00 34 00 36 00 0C 39 00 0B FF 32 00 3D ; 5.=.4.6..9..?=

00000040h: 00 31 00 31 00 0C 37 00 D7 00 38 00 3D 00 35 00 ; .1.1..7.?8.=.5.

00000050h: 36 00 0A 37 00 0B FF 31 00 3D 00 38 00          ; 6..7..?=.8.

介绍下内容

93 A7 是标志位,表示是提问封包,其中93是所有防外挂的封包专用标志位,后面跟的A7代表是提问封包。

5A是封包长度,不包含93 A7 5A本身,也就是说,该字节后面的所有信息的字节数,大家可以数数从2C 2C 到最后的3D003800一共就是5AH个字节。

2C2Cc3D9是角色ID,00 00 00 01目前不清楚,下面会提到,73BF08CB是问题序号递增的,即使相同问题,只要时间不同,这个序号肯定不同。

00 00 00 01不确定,但是可能和前面那个00 00 00 01表示单选题,我没测试,这两个01里至少有一个是表示单选,有兴趣的可以试试看看究竟哪个表示单选。

05 表示问题+答案一共5条,也就是说问题1条,答案4条。

接下来就是同样的格式,第一个字节表示长度,然后紧跟数据:

16 表示问题是16H个字节 也就是

F7 8B EE 95 E5 4E 0B 4E A1 8B 97 ; .....鲖顣錘.N?

00000020h: 7B 19 95 EF 8B 84 76 2F 66 1F FF

0C表示第一个答案是0CH长 也就是

38 00 D7 00 ; {.曪媱v/f.?.?

00000030h: 35 00 3D 00 34 00 36 00

0C表示第二个答案是0CH长 也就是

  39 00 0B FF 32 00 3D ; 5.=.4.6..9..?=

00000040h: 00 31 00 31 00

0C表示第三个答案是0CH长 也就是

37 00 D7 00 38 00 3D 00 35 00 ; .1.1..7.?8.=.5.

00000050h: 36 00

0A表示第四个答案是0AH长 也就是

37 00 0B FF 31 00 3D 00 38 00          ; 6..7..?=.8.

以上就是问题封包的格式。

有人问,那么问题我怎么看不懂,对了,这里告诉大家,所有字符串都是Unicode编码的,如果想直接看成我们常用的GB码,需要调用系统提供的函数WideCharToMultiByte

下面说说回答封包(C->S)加密前格式

示例1

00000000h: 93 A8 14 2C 2C C3 D9 00 00 00 01 73 BF 08 CB 00 ; 摠.,,觅....s??

00000010h: 00 00 01 00 00 00 01                            ; .......

大家可能看出跟前面提问封包的关系了。

没错,跟提问封包前面部分很象。

93 A8表示是问题答案封包。

14是长度

然后接下去10H个字节就是和提问封包一摸一样的。

最后4个字节是00 00 00 01,表示答案。

答案的含义:

01=A

02=B

04=C

08=D

10=E

20=F

40=G

80=H

什么意思呢?懂二进制的朋友就知道了,这个答案是用位表示的,就是说可以表示多选题,目前都是单选,只有这么几个答案,如果将来有多选了,用位的或运算就可以了。

上面介绍完了封包格式,下面我简单介绍下网络远程答题的实现方法。

1。制作外挂X,用于截获所有服务器发送到客户端,也就是S->C的所有封包,如果发现了是提问封包,那么可以根据配置决定是否吃掉题目,然后把题目发送到远程的答题服务器MS。MS可以是本机或者局域网的机器,也可以在InterNet上。

2。MS接受来自X的信息,然后跟自己保存的答题库比较,看看是否有答案,如果有答案,直接把结果告诉X,然后X制作一个封包回给服务器S。

3。如果答题服务器MS接收到的问题信息找不到答案,那么就转发到专用答题客户端MC去,由值班人员负责选择答案,然后再把答案回给X。

4。专用答题客户端MC可以和专用答题服务器MC在一起,也可以不在一起,都采用TCP/IP通信就可以了。

以上就是简单介绍。

另外,还有一些其他方法,比如直接Call游戏里相应的回答问题的函数,也一样可以实现。

可能有朋友问,如何得到解密后的收到的封包,和加密前的待发送封包,这个问题网上有很多介绍的文章,我就不继续讲了,因为如果讲了就收不住了。

我把可以截获的游戏代码段的部分代码贴出来给大家看,大家可以根据我的代码去游戏程序寻找,每次更新后地址会变化,但是代码内容一般没变化的,只要搜索字符串就可以找到了。

这个是7月31日的版本的内容,一直用到8月10日左右没变化的。

这里是解密收到的封包的代码部分

0056E58C    57              push    edi

0056E58D    8975 E4        mov    [ebp-1C], esi

0056E590    8B4E 38        mov    ecx, [esi+38]

0056E593    8986 F4000000  mov    [esi+F4], eax

0056E599    8D5E 08        lea    ebx, [esi+8]

0056E59C    8965 F0        mov    [ebp-10], esp

0056E59F    8B11            mov    edx, [ecx]

0056E5A1    53              push    ebx

0056E5A2    FF52 0C        call    [edx+C]  //解密函数

0056E5A5    8B46 10        mov    eax, [esi+10]//这里已经得到的解密后的封包了

0056E5A8    8B4E 0C        mov    ecx, [esi+C]

0056E5AB    8B56 30        mov    edx, [esi+30]

0056E5AE    2BC1            sub    eax, ecx

0056E5B0    8D7E 28        lea    edi, [esi+28]

0056E5B3    50              push    eax

0056E5B4    51              push    ecx

0056E5B5    52              push    edx

0056E5B6    8BCF            mov    ecx, edi //从这里修改,7字节,可以跳转到自己的外挂处理程序去

0056E5B8    E8 336AECFF    call    elementc.00434FF0

0056E5BD    8B43 04        mov    eax, [ebx+4]

0056E5C0    8943 08        mov    [ebx+8], eax

0056E5C3    8B8E EC000000  mov    ecx, [esi+EC]

0056E5C9    8B57 04        mov    edx, [edi+4]

0056E5CC    33DB            xor    ebx, ebx

0056E5CE    8A41 28        mov    al, [ecx+28]

0056E5D1    3AC3            cmp    al, bl

0056E5D3    8B47 08        mov    eax, [edi+8]

0056E5D6    74 38          je      short elementc.0056E610

0056E5D8    2BC2            sub    eax, edx

0056E5DA    8D4E 5C        lea    ecx, [esi+5C]

0056E5DD    50              push    eax

0056E5DE    8B46 64        mov    eax, [esi+64]

0056E5E1    52              push    edx

这里是发包前加密用的代码部分

0056E94F    8BB7 C4000000  mov    esi, [edi+C4]

0056E955    8B47 20        mov    eax, [edi+20]

0056E958    8B4F 1C        mov    ecx, [edi+1C]

0056E95B    8D5F 18        lea    ebx, [edi+18]

0056E95E    8B6E 04        mov    ebp, [esi+4]

0056E961    8B56 08        mov    edx, [esi+8]

0056E964    2BC1            sub    eax, ecx

0056E966    8B4F 24        mov    ecx, [edi+24]

0056E969    2BC5            sub    eax, ebp

0056E96B    03C2            add    eax, edx

0056E96D    3BC1            cmp    eax, ecx

0056E96F    0F87 CA000000  ja      elementc.0056EA3F

0056E975    8B4F 3C        mov    ecx, [edi+3C]  //这里开始修改,共9字节,可以跳转到自己的外挂处理程序去

0056E978    56              push    esi

0056E979    8B11            mov    edx, [ecx]

0056E97B    FF52 0C        call    [edx+C] //加密函数

0056E97E    8B46 04        mov    eax, [esi+4]

0056E981    8B4E 08        mov    ecx, [esi+8]

0056E984    8B57 20        mov    edx, [edi+20]

0056E987    2BC8            sub    ecx, eax

0056E989    51              push    ecx

0056E98A    50              push    eax

0056E98B    52              push    edx

0056E98C    8BCB            mov    ecx, ebx

0056E98E    E8 5D66ECFF    call    elementc.00434FF0 //复制到发送缓冲区,由发送线程负责发送

0056E993    8B87 CC000000  mov    eax, [edi+CC]

0056E999    8B8F C4000000  mov    ecx, [edi+C4]

0056E99F    83E8 18        sub    eax, 18

0056E9A2    3BC8            cmp    ecx, eax

0056E9A4    74 26          je      short elementc.0056E9CC

0056E9A6    8B11            mov    edx, [ecx]

0056E9A8    6A 00          push    0

0056E9AA    FF12            call    [edx]

0056E9AC    8B87 C4000000  mov    eax, [edi+C4]

0056E9B2    83C0 18        add    eax, 18

0056E9B5    8987 C4000000  mov    [edi+C4], eax

0056E9BB    A1 A8CB9000    mov    eax, [90CBA8]

0056E9C0    8987 F4000000  mov    [edi+F4], eax

  评论这张
 
阅读(343)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017