偶电脑不知道咋地了!不能更新!没办法,只能将就分析了!
游戏:热血江湖
版本:1703版
有无壳:无
算法:程序涉及到的加密算法有SHA-1,MD4,MD5,AES等
登录机制:
登陆部分的代码是程序运行后直到用户开始登陆才动态解密加载进来的,这部分代码中含有关键的密码加密代码。
但他的基地址是不固定的,每次重启程序后都不一样。另一个头疼的是,不能半路attach到这个进程里,程序做了反跟踪
处理,使得调试比较困难。目前登陆的过程是这样的:
1,进入游戏登录画面,用户输入的用户名是明码的,密码则是被他的一个系统钩子先拿到然后做了转换,具体的没看
大致上应该是建立了一个映射表来存这些字符,最终内存中能看到的只有以0x21为起始的字节,比如我输入654321,他的内存
中看到的就是0x21,0x22,0x23,0x24,0x25,0x26,而如果输入的是abcd,他内存中则是0x21,0x22,0x23,0x24,所以密码
的明码只能通过对照表读出来。
*1700版以前,这部分是没有的。密码就是明码存放的。而且地址也是相对固定的。
2,用户输入完用户名和密码点击登陆后,程序就会动态解密出关键部分代码,用IDA看不出这段代码的,可能只是一段DATA,
不是code,这时候程序就会对密码加密,目前只对密码做了加密,(*1700版以前,这部分是没有的)。加密的核心是MD5算法,
之后又使用了他们自己的一个根据时间来加密的算法,目前还没有公布出名字,外界也没有见到过。
3,使用用户名和密码构造认证封包,格式如下:
00 80 44 00 08 00 70 72 6F 67 72 61 6D 78 28 00 32 36 30 35 36 36 39 65 32 64 62 36 37 35 64 61 38 34 32 62 32 31 31 36 32 66 66 64 39 64 39 33 65 35 35 62 30 65 30 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| c | plen ulen |----user name-------| plen |=============加密后的密码,长度是40字节==============================================================================| panding
服务器会根据用户名在数据库找到密码,然后是用同样的算法计算出40字节,比对是否一致,其中因为加密过程中使用时间相关的信息,
所以发送以前发送过的封包同样会失败,一模一样的也会失败。失败了的话,服务器就会发回如下封包:
01 80 04 00 0A 00 03 00
| c | plen | |
如果多次验证失败返回的是:
01 80 plen + 一串汉字(说你的密码错误了,将被锁住一段时间)+时间
如果验证成功则返回:
01 80 0F 00 00 00 29 00 08 00 70 72 6F 67 72 61 6D 78 00
| c | plen ulen | uname |
4, 发送下一个封包,通知服务器列出服务器列表内容:
16 80 00 00
| c |
5,。。。。
还有一个很严重的问题!映射表偶搞不定哈哈!
请各位观众继续等待下一篇文章 热血江湖最新版本 分析!(有时间在搞哈・~)
朽木 QQ:96262
03-25-2007
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!