当前位置: 首页 > article >正文

浅谈显 ipqq 发展历程 【附显 ipqq原理】

               

声明,本文章未经过疯狂绅士与runjin的同意不得转载。


浅谈IPQQ软件的技术发展轨迹

疯狂绅士、RunJin

摘要:本文先给出了IPQQ的界定,并介绍了不同历史时期具有里程碑意义的IPQQ。根据几个具有里程碑意义的IPQQ,作者简要的分析了其技术特点,并以此阐述IPQQ软件的发展轨迹。

关键字:   IPQQ、破解、木子QQ、外挂、珊瑚虫外挂

一、IPQQ历史回顾
QQ作为国内用户量最大的IM,专门针对其发布一些附加功能是一个古老的话题。在QQ的弹出窗口上显示发消息用户IP的变种QQ成为大家最常用的工具,这种工具我们称为IPQQ。
1999年,IPQQ的始祖出现了,是在QQ的前身OICQ时候出现的。邹丹制作的破解版,可以说形式上开创了一个时代。尽管时间过去了好几年,邹丹创立的模式几乎成为了一种标准——密界的标准,以后所有QQ显IP的方式都是继承邹丹显示IP的方式。
邹丹的这一举动,在当时引起了一大片争议声。邹丹也收到了腾讯的律师函,邹丹考虑再三后,退出了为制作IPQQ的行列。 
接下来又有好多个勇士站了出来,其中最有名的是木子。木子的软件非常流行,与邹丹的软件相比,它的框架更好,更稳定,同时支持不同版本的QQ。木子的这个框架影响了大量的刚出道的Cracker,包括本文的作者之一 ——RunJin,其发布的飘云版QQ在一段时期里面被人骂成了剽窃。期间有很多显IP的QQ,说白了都是参考木子的,其中绝大部分根本就是木子的版本,不过是改了几个字或很取巧的换上自己的标签而已。
珊瑚虫前身的出现又是一个里程碑,这东西由Cygwin捣腾出来的。先揭一下Cygwin的老底,此人与疯狂绅士同是水木清华黑客版版主。
珊瑚虫QQ外挂的原型是Cygwin大概用了两天写出来的。这东西的出现让腾讯大为挠头,因为这个软件本身并没有修改QQ的任何程序。它是一个单存的外挂形式,因此避免了相关的法律问题。要说明的是珊瑚虫的历史比木子更早。可以说,珊瑚虫就是紧接着邹丹的版本出现的。这个时期的珊瑚虫完全由soff制作,不过这个时候的珊瑚虫不是外挂形式,同时质量非常高,与一年后出现的木子版相比也毫不逊色。这也是后来Quaful和cygwin找到soff合作的原因。这个时期的珊瑚虫版本因为收到了腾讯的律师信而被迫中止,所以给了后来木子兴起的机会。
由于珊瑚虫外挂不涉及到版权问题,并且其性能优越,导致了珊瑚虫外挂的下载量急剧的增大,从一些网站的分析来看,它甚至超过了QQ本身的下载量。珊瑚虫的成功在于它不断的推出新版本,作者大致统计了一下,从珊瑚虫0.1版到现在的4.0beta版,珊瑚虫一共推出了61个版本(不包括4.0以下的测试版)。正是由于珊瑚虫不懈的努力,使得珊瑚虫外挂声名远扬。
也许是精力的问题,当珊瑚虫的第二任作者soff觉得天天追赶着QQ的新版本而被迫推出一个个新版本觉得实在是很无趣的时候,内心深处对珊瑚虫来一个大变化已经变得很迫切。在外挂思维以及GAIM与Luma QQ等思想的指引下,Soff考虑一种新的方式,这个方式的执行者是Qulful,Qulful卖命的写出了珊瑚虫QQ4.0。
珊瑚虫QQ4.0又是一个里程碑,简单的说,以前的版本只要耐心去检查QQ的内存,总能找到IP地址的入口。因此可以说在珊瑚虫4.0之前的显IP的版本大都是一个简单的Cracker过程,只要能看懂段刚(看雪)《加密与解密》一书,折腾出某个IPQQ不是一见很难的事情。就是做一个外挂形式的IPQQ也并非难事。而珊瑚虫4.0可以说从根本上解决这个问题,它直接截获的是QQ的网络包,从网络包中获取其IP地址的。
从上面的简单的回顾,我们可以看出IPQQ的几个里程碑。
1、邹丹,IPQQ的开山鼻祖,IPQQ形式的确立。
2、木子,IPQQ的中兴,确立其成为修改QQ函数的地址方式的IPQQ的霸主地位。
3、Cygwin,IPQQ的转折,以外挂的形式击败了修改函数地址方式,成为了近两年来事实上IPQQ的霸主。
4、Quaful,思路的拓展,IPQQ也许只是珊瑚虫外挂的一个简单运用而已。

上述四个里程碑中,由于邹丹的版本太久远,这里不作讨论,本文仅就后3个里程碑简单的来分析一下其技术思路,尤其是后两种。

二、木子显IPQQ版本原理简介
与所有的破解软件一样,都有一个原则——点穴。木子与其它所有的IPQQ一样,都是很偷懒的,都是试图只通过修改几个字节,就达到想要的效果。
对于IPQQ来说,能利用QQ原来的功能就利用原来的功能。这似乎是一条铁律。
木子IPQQ,在网上已经可以下载到它的代码。这里只讲解木子IPQQ的部分代码。
SetIP proc
          pushad
          ;=================取得IP地址==================;
          mov   eax,dword ptr [ebp-10h]
          push   offset dwIp
          push   offset szRecentip
          push   eax
          mov   ecx, [eax]
          call   dword ptr [ecx+34h]
          ;=================取得端口号==================;
……
          ;=================取得版本号==================;
……
not2003:           
下面我们再看飘云的IPQQ的代码。
pushad
          ; =================取得IP地址==================;
          mov   eax,dword ptr [ebp-14h]
          push   offset dwIp
          push   offset szRecentip
          push   eax
          mov   ecx,[eax]
          call   dword ptr [ecx+34h]
          cmp   dwIp,0 ;是否已经取得IP
          ……
上面给出了两个不同IPQQ的如何获得IP地址部分的,这两段代码是针对不同版本的QQ。黑体字表示上述的不同地方。
由此我们可以看到,要制作IPQQ核心是找到显示IP的那个函数的入口。这个函数的查找是个关键。而木子的出现其意义在于他给出了一个框架。因此很多后续的IPQQ就更偷懒,他们只是参考木子的版本,在取IP的原理上只要改动一点就可以了。
木子制作的IPQQ可以说是能利用QQ的功能就尽量利用QQ的功能。而很多后来者制作的IPQQ其原则是,能利用木子就尽量利用木子。上述给出的飘云的IPQQ代码就是一个例子。

三、珊瑚虫4.0以下版本原理。
“珊瑚虫最初版很简单的,也参考了之前别人修改的方法,比如版本库就是直接盗用木子的,不过这个版本库盗用不是技术盗用,不被人介意的。”这段话是珊瑚虫的作者Cygwin所说的。
珊瑚虫外挂版本与木子版本比起来最大的不同在于——其利用了钩子的技术,不知道其是否用到了win2k的SDK包,否则这段代码都可以直接参考。是在QQ运行的时候获得了其IP地址的。而不是象木子一样直接给出一个显IP的破解版本。然而,在取得IP的原理上,珊瑚虫和木子是基本相同和飘云的更是非常相象。
下面是珊瑚虫3.16的取IP部分反汇编代码:
mov eax,dword ptr ss:[esp+10]
lea ecx,dword ptr ss:[esp+1C]
push ecx
push DUMPED.01B8D9EC     ; ASCII对应的字符为"dwRecentIP"
mov edx,dword ptr ds:[eax]
push eax
call dword ptr ds:[edx+34]
………………………………………..
mov eax,dword ptr ss:[esp+10]
lea ecx,dword ptr ss:[esp+1C]
push ecx
push DUMPED.01B8D9D8     ; ASCII对应的字符为"dwC2CIP"
mov edx,dword ptr ds:[eax]
push eax
call dword ptr ds:[edx+34]
…………………………………..
mov eax,dword ptr ss:[esp+10]
lea ecx,dword ptr ss:[esp+1C]
push ecx
push DUMPED.01B8D9C8       ; ASCII对应的字符为 "dwIP"
mov edx,dword ptr ds:[eax]
push eax
call dword ptr ds:[edx+34]

虽然寄存器的具体使用不同,但动态调试的时候就会发现,其调用的函数和飘云的是一样的。
珊瑚虫的原理可以用下面的话简要来表达。
1、     绕开原来的流程
2、     获取IP
3、     把自己的窗体挂上QQ的窗体
4、     把获取的IP显示在自己的窗体上
RunJin用softice 、OllyDbg在: win 2000 sp4 , win 98操作系统对 QQ2005贺岁版珊瑚虫外挂进行了分析。
由于win nt 平台和win9x 的差异,珊瑚虫外挂因系统的不同而分开两种工作原理。珊瑚外挂是给QQ的主程序QQ.exe外挂了一个Coralqq.dll,而完成这个工作的就是coralqq.exe .要加载一个dll文件必须是qq.exe。
在win2000/xp下coralqq.exe先创建QQ的进程,同时也就创建了QQ的暂停的主线程,接着往QQ进程的内存写入代码,修改Ntdll.NtTestAlert的代码让程序跳到附加代码处执行,在执行的过程中恢复Ntdll.NtTestAlert处被改了的代码,同时加载Coralqq.dll。
在win9x下,coralqq.exe先创建QQ的进程,同时也就创建了QQ的暂停的主线程,接着在QQ.exe的内存写数据,改写QQ.exe的oep从而达到改变程序流程的目的,让其先执行附加代码,加载Coralqq.dll,加载完后再跳到原来的QQ.exe的oep的下一条指令继续执行。详见RunJin的<<珊瑚虫外挂原理分析>>一文。
从RunJin的分析可以看出,珊瑚虫外挂想得很周到的,它绕开原来QQ的流程也是非常巧妙。当然如何高效的利用钩子大家可以去看相关的文章,这里不再详述。
可以这么说,珊瑚虫最大的特色是,用C++代替原来木子的部分代码。而这段代码的前面部分又是那么的巧妙的绕开了原来QQ的流程。
正如木子版本一样,越来越多的人利用上了一个原则——能用珊瑚虫的功能就尽量利用珊瑚虫的功能。
QQ狂人DIY版是把珊瑚虫外挂注入到QQ.exe里面,以实现直接点QQ.exe就可以直接

http://www.lryc.cn/news/2412893.html

相关文章:

  • android gallery效果,Android RecyclerView封装的Gallery效果控件,android galleryview
  • MOS管场效应管构成的基本放大电路(等效的过程、gm的推导、基本共漏源极输出器、基本共源、对比三极管)
  • 单片机交通灯的电路图以及代码_proteus单片机仿真精彩动图(第二弹)
  • 盒式交换机VSU配置(适用于非11.X软件平台)
  • 自定义springboot组件--基于redisson实现分布式锁
  • RabbitMQ--基础--02--原理
  • 【云服务器搭建游戏私服】全流程
  • android dat怎么打开方式,Android 5.0 system.new.dat解包工具及方法
  • Teleport Pro使用教程
  • 用R抓取拉手网深圳地区的美食数据--增加商店地址信息
  • Matlab中句柄类和值类的比较
  • flash builder 4 编译器参数
  • [转]Windows Shell 编程 第十三章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988004】...
  • Android4.4/CM11编译常见错误及解决方法!
  • steam服务器脱机怎么办/与Steam服务器通讯时发生错误解决方法
  • 代码的隐蔽威胁:泄露秘密和个人身份信息
  • 腾讯的web QQ接口
  • suse10 linux u盘安装,SUSE Linux Enterprise Server 11 SP3安装教程详解
  • Fedora 12 的两个问题的解决
  • 全志R128 SDK HAL 模块开发指南——Flash Controller
  • 51单片机温度检测及LCD1602显示
  • LGG7刷入第三方ROM,安卓11
  • 机器人三大定律的发展和演进概述
  • asp毕业设计——基于asp+access的网页设计辅导系统设计与实现(毕业论文+程序源码)——网页设计辅导系统
  • python输出指定目录下所有文件(全路径),并核对md5码
  • 手指检测心跳设计——传感器制作篇
  • QQ盗号软件后门分析与反击
  • SecureCRT的使用教程( 过程非常详细!!值得查看)
  • Ubuntu下载-最新版本Ubuntu Linux 7.10下载(转)
  • OLT操作命令集及排障