浅谈QQ显ip功能原理 qq盗号原理

QQ 显示 IP 已经是一个很老的话题了。这个功能我曾经在珊瑚 QQ 上面见过,后来有一

款民间编的QQ插件也提供了,但是那个插件好像在2009 年左右的时候就特别不靠谱了,经

常显示对方 IP 是什么美国、马来西亚之类的。由于时间长了,都习惯并且不再用了,也以

不再去追究这个问题了。不过直到看到真实有效的QQ显示IP插件再次出现之后,我又对这

个东西产生了浓厚的兴趣。

先说说查到聊天对象 IP 的意义吧。其实和人聊天过程中,如果能知道对方相对准确的

IP,比如地域等等,也是能够减少自己受骗的可能。比如,一个人和你聊天的时候,你明明

看到他的 IP 在北京,他确偏偏给你说自己在上海,就有必要多思量一下对方的诚信度了。

当然也可能是代理作祟,但是我们暂时就不考虑这么复杂了。

首先我看到能够显示 IP 的两款软件是赛博 QQ 和木头 QQ,不过这两个软件其实都是对

QQ 原始文件经过了一次重新打包,并且自制了一些DLL 放到包里面,每次运行它们的QQ的

时候就会自动加载这些 DLL,从而让你所看到的五花八门的“扩展”功能,显示 IP 就是其

中之一。然而,其实有时候我仅仅就是想要个显示 IP 的功能,但是却只能强迫我用他们的

改装版 QQ 是一个郁闷的事情。而且,比较不靠谱的是,在后来分析中我发现:这些改装版

的 QQ 对于腾讯 QQ 中的安全检查,如TSEH.DAT、TSEngine.DAT等安全检测模块的加载都有

干扰。这么做有两个危害:1、可能会导致安全检查失败,导致你下次运行QQ会强迫升级,

那些功能极有可能失效(不过好像他们干扰这个模块本来目的应该是防止这种现象的,这点

我有点诧异,可能腾讯的机制又改了吧);2、毕竟是 QQ 的安全更新和检查,干扰难免有不

良嫌疑。既然我就是要显示对方的IP,为什么不考虑单独提取这项功能呢?

另外早在我们发现这两款插件以前,我曾经和同学做过一些简单的实验。在实验室有两

台实验用的主机A和 B,我用的是A 机并且打开抓包软件 WireShark。QQ带有传输文件的功

能,我觉得那个功能应该是测试得到 IP 的最好机会,于是我向 B 机传输文件,并且让对方

接受,为了方便各种测试,我故意传输了个大的文件(至少不是瞬间传完的),然后在 cmd

中输入“netstat -ano”查看连接,但是并没有我想象中的同学IP说明至少不是TCP直连。

不过在 WireShark 中发现大量 UDP 的包,并且有同学的 IP,这就说明我们抓包的过程中应

该着重注意UDP的数据包。所以,尽管那两个QQ改版中,对方HOOK了所有的网络传输函数,

我们只需要着重看sendto函数。

sendto 函数的原型如下所示:int sendto (

SOCKET s,

const char FAR * buf,

int len,

int flags,

const struct sockaddr FAR * to,

int tolen

);

如果说我们要调查建立的连接,主要应该从参数to入手,那里面包含有IP的结构。

通过反汇编插件DLL的 sendto钩子函数的代码,我发现它将buf 与一个字符串为 0x03

0x00 0x01 0x00进行了匹配,如果是匹配的话,就会去求to 中的 IP 地址。

于是乎,我照着这个插件的办法,自己也同样 HOOK 了这个函数,通过测试和插件得到

了相同的效果,代码如下:

int __stdcall sendto_new (

SOCKET s,

charFAR * buf,

intlen,

intflags,

struct sockaddr FAR * to,

inttolen)

{

int iRet;

iRet = ((SENDTO)g_Proc_sendto)(s,buf,len,flags,to,tolen);

if( *(DWORD*)buf == 0x00010003 && iRet != -1)

{

//初始化获得IP的一些变量

struct in_addr IPAddr;

ULONG ulIPAddr = 0;

char szTestIP[20] = {0};

//获得IP地址

ulIPAddr = *(DWORD*)&to->sa_data[2];

memcpy(&IPAddr, &ulIPAddr, 4);

//如果你获得的IP和全局变量存的不一样,说明是新的窗口,新的IP

if( strcmp(szLastIP,inet_ntoa(IPAddr))!=0 )

{

strcpy(szLastIP, inet_ntoa(IPAddr));

PRINT("IP Address = %s",szLastIP);

PRINT("n");

}

浅谈QQ显ip功能原理 qq盗号原理
}

return iRet;

}

接下来然后就是怎么触发这个代码了,我相信很多人都听说过“发表情探 IP”的说法

吧?另一篇《QQ密码保护原理》http://www.jybase.net/qqxiangguan/20111109594.html 事实上

这个表情不是 QQ 的默认表情(QQ 的默认表情其实是一种相当于转义字符的东

西),这个表情必须是图片,因为图片也是以文件的形式发的,也就是说如果你想要探测对

方的 IP,无论是“发图片”还是“传文件”都一样。

不过还有个问题就是,如何探测出来,你当前交互的对象是谁呢?这个功能我并没有从

插件去探寻,感觉有点复杂。于是我仍然用 WH_CBT 钩子来实现效果,主要检测窗口焦点和

激活,代码如下所示:

LRESULT __stdcall CBTProcess(int nCode, WPARAM wParam, LPARAM lParam)

{

char szClassName[MAX_PATH] = {0};

char szCaption[MAX_PATH] = {0};

char szString[MAX_PATH] = {0};

switch ( nCode )

{

//窗口销毁,可能是最小化

case HCBT_DESTROYWND:

CallNextHookEx(g_CBT_hhk, nCode, (WPARAM)wParam, lParam);

break;

//窗口激活

case HCBT_ACTIVATE:

//初始化MAX_PAYH长度的ClassName

memset(szClassName, 0, MAX_PATH);

GetClassName((HWND)wParam, szClassName, MAX_PATH);

GetWindowTextA((HWND)wParam, szCaption, MAX_PATH)

// 枚举,并且找到TX的QQ 主窗口,最后找到得到ID 号

if ( strcmp(szClassName, "TXGuiFoundation") == 0 )

{

//上一次全局变量的名称和这一次不一样的话,说明有新的窗口

if( strcmp(szLastUserName,szCaption)!=0 )

{

//初始化全局变量,开始重新激活窗口

memset(szLastUserName,0,MAX_PATH);

strcpy(szLastUserName,szString);

PRINT("窗口激活%s",szCaption);

}

}

return CallNextHookEx(g_CBT_hhk, nCode, (WPARAM)wParam, lParam);

break;

//设置窗口焦点的时候

case HCBT_SETFOCUS:

if ( (HWND)wParam != NULL && // 句柄不为空

IsWindow((HWND)wParam)// 窗口有效

)

{

//初始化

memset(szClassName, 0, MAX_PATH);

memset(szString, 0, MAX_PATH);

//寻找ClassName

GetClassName((HWND)wParam, szClassName, MAX_PATH);

if ( strcmp(szClassName, "TXGuiFoundation") == 0 )

{

GetWindowText( (HWND)wParam, szString, MAX_PATH);

//获得ID号,并且将其显示出来

if( strcmp(szLastUserName,szString)!=0 )

{

memset(szLastUserName,0,MAX_PATH);

strcpy(szLastUserName,szString);

PRINT("窗口焦点%s",szString);

}

}

}

return CallNextHookEx(g_CBT_hhk, nCode, (WPARAM)wParam, lParam);

break;

}

return CallNextHookEx(g_CBT_hhk, nCode, (WPARAM)wParam, lParam);

}

效果只能说是差强人意,毕竟我主要是为了在DbgView中打出信息,还没有做成型工具

的打算,示例图如图 2所示:

最后一个就是IP的查询了,这里软件是利用的向ip.qq.com发包进行询问,我们只要组

成一个形式如下的数据包,然后再收包中处理关键部分就可以了。数据包的形式如下:

POST /cgi-bin/searchip HTTP/1.1

Accept: Accept: */*

Cache-Control: no-cache

Connection: close

Content-Type: application/x-www-form-urlencoded

Content-Length:22

Host: ip.qq.com

Pragma: no-cache

Referer: http://ip.qq.com

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; )

searchip1=11.11.111.11

这里编程时需要注意,最好不要在sendto中实现它,因为过程比较长,会导致值无法及

时返回可能会出错。原作者的方法是采用的创建了个新的线程来实现,我就仅仅用Console

来实现演示了。关于发包以及网络部分的东西。详细代码见附件,这里不再多说了。效果如

图 3所示:

写到这里,至少还原显示IP的功能就基本上结束了,但是还有几个地方必须得说明一下,

或许也是对“显示IP”这个功能的一些强化性的建议和为了大家后续研究和更新的一些总结

吧:

(1)作者固定QQ的版本号,甚至以干扰安全升级的方式来运作,也是有道理的。前面我提

到过,QQ 一旦升级,这些软件的功能就很可能失效了,如果说你不以代码具体实现,单单

从数据包的角度去看,规律还是很明显的。当你往某人发图片(自定义表情)的时候,你们

之间会产生大量的UDP 的数据包而且形式相仿,开头可能都是0x03 0x00 0x01 0x00,但是

这个并非一层不变。

我后来更新了一次 QQ2011,果然那个插件失效了,但是我和一个网友聊天的时候,我

给他发了图片,仍然具有之前的那种规律,但是不再是0x03 0x00 0x01 0x00。具体图示如

图 4下所示:

所以这个值并非一层不变的,不过只要知道了这个原理,至少我们可以在必要时候进行

调整。

(2)并不是通过这种方式就一定能获得对方IP。这个具体深究我也大很清楚,不过好像和

对方的网络环境有关。但是还有一种情况就是,比如你已经发过一次图片了。这个是我在后

来测试中发现的,有些时候你给对方发图片,只有第一次你在数据包中可以获得大量的关于

你和他直接的 IP 进行的 UDP 通信,而之后就再也不会出现了(局域网这种情况特别明显,

一会再说)。所以,最好的准确探测对方IP 的办法就是在 DLL 已经注入的时候,再通过聊天

发送图片,如果说错掉了这个时机,很可能唯一的解决办法就是重新启动 QQ 了。另外需要

强调的是,发送图片探寻IP 的办法不能在对方隐身的状态中成功。

(3)局域网情况方面的改进。首先我用PT画了一个简单的图进行说明,图示如图 5所示:

如果说在局域网中,如果说我是 PC0,我向 WB-PC1 发送图片,其实数据会首先过一次

路由器(1841),而且这个时候你所抓到的 IP,其实应该是你网络的出口处 IP,而且这个

IP应该和你登陆www.ip138.com所显示的“你的IP地址”数值一样。换句话说,如果我们

获得的 IP 和自己出口是一样的情况的话,就可以基本确定你们是局域网了。另外,在后续

的交互中,基本上就是你们两个直连了,不会再经过路由了。甚至 QQ 在局域网中交互传输

文件有一个自己构建的原始IP包,协议都是自己定义的。

局域网也有一个类似广域网上 UDP 交互的特征码,我这个 QQ 版本是 0x03 0x1C,不过

我想不同的版本可能也不会一样。但是遗憾的是局域网的情况比较复杂,我之前说的并没有

考虑类似于VLAN 之类的,所谓的不经过路由似乎也武断了点,这个还需要去继续专研。

希望本文对大家实现QQ显示 IP并且做出更好的扩展功能有所帮助。

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/143575.html

更多阅读

让QQ显示好友的IP地址-qq显ip 查看qq好友ip地址

让QQ显示好友的IP地址-qq显ip——简介qq显好友上网ip的方法。让QQ显示好友的IP地址-qq显ip——工具/原料QQ软件/网络连接查看器让QQ显示好友的IP地址-qq显ip——方法/步骤让QQ显示好友的IP地址-qq显ip 1、这个方法不管是哪个QQ版

破解QQ2014显Ip、QQ显IP插件下载 qq旋风破解版插件

破解QQ2014显Ip、QQ显IP插件下载——简介现在企业更新太快了,还没有脱裤子,就已经更新到了第二集,虽然企鹅更新速度叫人惊叫,但是我们还是可以去掉广告和显示IP地址的破解QQ2014显Ip、QQ显IP插件下载——工具/原料准备好一个插件其次,下

浅谈数学作业的作用 浅谈数学作业的有效性

浅谈数学作业的作用作业是课堂教学的重要组成部分,也是课堂教学的延伸。作业既是教师了解学生一种方式,也是训练学生思维和培养学生能力的一种方式。但是,长期以来人们往往把作业的功能定位于“知识的巩固”与“技能的强化”上,导致作

转载 浅谈中医的“不传之秘” 转载 寻龙点穴秘笈

原文地址:浅谈中医的“不传之秘”作者:深圳梧桐山中医学堂浅谈中医的“不传之秘”导读中医不传之秘,不尽在药量,而在中医大家辩证精准,用药如用兵,老辣不拘一格,方显药量精奇,所谓“胆欲大而心欲细”,药量峻猛称奇非为“秘传”,琴心剑胆绝技

声明:《浅谈QQ显ip功能原理 qq盗号原理》为网友森挽情人分享!如侵犯到您的合法权益请联系我们删除