且行且远
分类: 其他类别 由 ssfighter 于 2006年8月12日 发表

虽然感觉起来不是很难,但是倒是颇花了我一番工夫啊,就是到最后我都不知道在主窗口显示完整IP的关键跳在哪里,只好直接改了取IP的偏移值,而且竟然好用,看来还是有点运气的成分的。

说说思路吧,首先分析IP可能是从服务器端传过来是完整的,然后到客户端再判断用户的等级,然后手动把IP后两位用.*.*来代替。当然也有可能是发送自己的等级到服务器,然后再由服务器直接返回已经隐藏IP的字符串,这种就比较麻烦了,需要伪造发送数据包。庆幸的是,Maze目前采用的方法是前者。

首先找到ASCII字符串参考.*.*,全都设上断点,OD载入启动后,单击Maze邻居,这时被断下,顺着堆栈返回上层调用,往上翻,可以看到这里:

004A28C3 . 83F8 09 cmp eax, 9
004A28C6 0F8D 6B010000 jge 004A2A37

没有仔细分析,估计这里可能是对等级的一个判断,那么把这条指令改成jmp强制跳转即可,这样就可以跳过隐藏IP后两位的程序段了,再启动程序,发现在左侧Maze邻居里面,IP已经显示的是完整的了。用同样的方法可以把独立站点、优秀站点等全都改成显示完整IP。

但是这还没有完,当打开一个用户的时候,显示在主窗口的IP仍然是隐藏了后两位的,遗憾的是我一直都没有找到这部分的关键跳,用了另外一种方法解决的。仍然是用刚才的断点,双击任意一个用户打开,被断下,Ctrl+F9返回,慢慢F8向下跟,可以来到这里:

004D436F . 83F8 FF cmp eax, -1
004D4372 . 75 48 jnz short 004D43BC
004D4374 8B4424 30 mov eax, [esp+30]
004D4378 . 3BC5 cmp eax, ebp
004D437A . 75 05 jnz short 004D4381
004D437C . B8 90DA5400 mov eax, 0054DA90
004D4381 > 50 push eax

注意4D4374这句,从[esp+30]中取得已经隐藏后两位的IP地址,观察堆栈,发现在堆栈中还完整保存着完整的IP,地址是[esp+74],于是,把这条指令改成mov eax, [esp+74],保存,重启客户端,发现这样就可以在右侧主窗口上面也显示完整的IP了。

呵呵,还是挺简单的吧,不过还是花了我好长时间呢,之后又用NsPack压缩了一下,贴在这里吧。
http://www.newsmth.org/pc/pcdownload.php?fid=34777

下载之后覆盖原Maze文件即可,注意Maze版本是7.05正式版 6月16日



发表评论

昵称:  (必须)
邮件:  (必须)
网址: 
评论: