03
2007
01

木子腾迅QQ显IP功能思路,较老的一篇文章

本文将教大家如何为腾迅QQ加上显示好友IP  地址的功能。基本原理就是通过修改QQ 的部分代码,使得它在运行过程中调用我们提供的代码来完成新增加的功能。如何添加这些代码是本教程所要教授你的,但在哪里添加和加什么代码这就需要一定的程序调试技术。所以,本教程里面所提供的修改地点和源代码都需要大家自己去琢磨为什么这么弄。当然,大家也可以照葫芦画瓢的跟着改,估计最近的几个版本都应该可以成功的。但是大家要做好准备,腾讯公司也能看到这个教程,他们一定会采取措施的。好了,现在开始我们的教程。
         第一步:预览。我们拿到一个新版本的QQ,应该先运行一次,用其他低版本的显示IP  的QQ 开看看这个版本到底版本号是多少。因为低版本的QQ 不认识新出来的QQ,所以它会将QQ 通讯协议的号码显示出来。我们可以看到这个版本的QQ 版本号是047B,先记录下来,等一下我们更新到源代码里面去。
      

第二步:移除广告。关闭新版QQ,使用16 位文件编辑器,如UltraEdit          打开QQ.exe  文件。打开后,我们看到的是乱码,此时,我们需要将编辑模式切换到 16  位编辑模式。然后,我们开始查找 89 45 FC 74 2B,并将其改为89 45 FC 90 90,保存后,我们删除QQ   安装目录内dat   目录下的ad.gif  文件。再运行QQ,是否发现QQ       已经没有广告了,并且永远不会再下载广告了?
    第三步:添加函数到 IMPORT 表。关闭 QQ ,从最近的一个版本的显里面复制出 ipsearcher.dll,QQ_Plugins.dll,qqwry.dat 到新版QQ  目录下面。然后打开LordPE,PE EDITOR,选中CQQApplication.dll。
点击Directories,点击Import Table  后面的"...",在上面的  里面点鼠标右键,点击Add  Import 。在dll  项输入:QQ_Plugins.dll,API 项输入:SetIP,然后点击"+",会提示一次不能打开QQWRY 之类的话,不用理会。然后OK,退出的时候记得save 一下。这样我们就把我们编写的QQ_Plugins.dll 里面的SetIP 函数,添加到了CQQApplication.dll 的Import 表里面了。
   第四步:修改CQQApplication.dll。这里我们要使用到IDA  了。IDA 是另外一个反汇编工具,比W32DASM 更加强大,反汇编的结果也更加好阅读。基本上这个工具是本星球最好的反汇编工具了,当然价格也......。我使用的是IDA4.5版,IDA4.17 也够用了。用IDA 打开CQQApplication.dll,选择Portable Executable for IBM PC,Intel 80x86 processors:MetaPC,然后开始反汇编。IDA 反汇编的效果很好所以反汇编速度很慢,够你玩一阵的了。趁IDA 在反汇编,我们设置一下。在Options 里面的Demangled names 里面选择names。在options 里面的General 里面的Number  of opcode bytes 里面填8。我的机器是1700+,大概3,4 分钟反汇编完成。在主界面里面选择Imports 页。你可以看到我们刚刚添加进去的SetIP 函数已经被识别到了。它前面有个数字10076017,这是程序加载后,这个地址里面保存的DOWRD 值就是SetIP
函数的入口地址,我们先记录下来。然后我们查找到SetForegroundWindow,双击它,我们被带回IDA  View-A。然后点在SetForegroundWindow 上,按ctrl-X。这样会打开一个窗口显示所有调用此函数的地方。
我们选择第2  个调用,双击它。我们就到了我们要进行修改的地方了。这个地方是我通过调试 踪得到的,发送消息
对话框被调用的时候就会执行过此地的代码。至于如何得到的这个地方一下子说不清,我研究了差不多一个星期才找
到。所以这里只告诉大家如何快速的找到这个地方,应该在以后的几个版本还适用。除非腾讯公司看到这篇教程,对
源代码做了修改。我们来仔细看看这里。
此处的地址是1000C499,代码是call ds:SetForegroundWindow,机器码是FF 15 E8 4A 04 10,其中值得我们注意的是
机器码的最后面4 位E84A0410,我们把顺序反过来一下就是10044AE8,你在哪里看到过这个数字没有?这个就是刚
才在Imports 页里面SetForegroundWindow 前面那个数字。我们要做的就是把这个数字改成我们的SetIP 前面的数字。
对应的机器码应该变成FF 15 17 60 07 10。我们再次使用LordPE 来修改。和开始的步骤一样,不过是打开
CQQApplication.dll,在FLC 页面里面就不是点offset 了,是要点VA,然后输入1000C499。编辑完了保存退出。这一
步不能错一点,错了以后执行QQ 就可能非法操作了。你如果有兴趣再反汇编一次这个文件你就会看到1000C499 这里
变成了call ds:SetIP 了。
   第五步:修改对话框资源。这一步使用ResHacker,打开QQres.dll。打开对话 资源。选择7015 号对话 ,打开,看看是不是很眼熟啊。我们就要修改这里。因为我在SetIP 里面让IP 地址显示在151 号EDIT 控件上,而原来的对话里面并没有这个控件,我们需要自己 加。显示IP 地址的地方就要覆盖掉原来显示广告的那个窗口。我们点一下那里,发现它是525 号BUTTON。最后面的四个数字就是坐标,我们记录下来。然后在对话 里面右键,点击插入控件(ctrl+I)。选择EDIT 控件,ID:151,坐标为103, 3, 159, 23,风格是ES_CENTER | ES_MULTILINE | ES_AUTOVSCROLL
| ES_READONLY | WS_CHILD | WS_VISIBLE | WS_TABSTOP ,然后点击编译脚本。这时我们看到多了一行
CONTROL "", 151,  EDIT,  ES_CENTER |  ES_MULTILINE |  ES_AUTOVSCROLL |  ES_READONLY |  WS_CHILD | WS_VISIBLE  | WS_TABSTOP,  103, 3,  159, 23 。如果你的 我的不一样,再看看哪里少选了或者多选了。然后我们把525 控件那一行最后的四个数字都改成0,让它变成最左上角的一个点,这样我们就不会点到它而被带到腾讯网站上去了。最后保存。
      现在你运行QQ,然后打开发送消息对话 ,你看到了什么?应该是有显示出ip 地址吧。但是我们现在还是使用的老版本的QQ_Plugins.dll,里面还不能识别出我们新版本的QQ,所以我们还要修改一下QQ_Plugins.dll  的源代码。源代码如何修改,大家看看源代码就知道了,非常简单的,照葫芦画瓢。需要的数据就是我们第一步得到的047B。修改完源代码,编译好以后覆盖原来的QQ_Plugins.dll,这样我们就为腾迅QQ 添加了显示好友IP  地址的功能了。
   本文中将用到如下工具:
   Resource Hacker、LordPE、IDA、UltraEdit、MASM32
« 上一篇: 无语,新年伊始扔了50... 下一篇: 韩国语字母发音技巧(Korea... »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。