你的位置:pcMing工作室 >> 资讯 >> 网络技术 >> 协议分析 >> 详细内容 在线投稿

关于OICQ的破解

排行榜 收藏 打印 发给朋友 举报 来源: 互联网   发布者:未知
热度95票  浏览10次 【共0条评论】【我要评论 时间:2010年4月08日 19:24

E9hW0l pW0c前言:pcMing工作室Q5Ffy#A-o
Oicq 作为Inet实时通讯应该是一个不错的选择,众多的用户群也证明了这点。(按照腾讯主页(www.tencent.com) 上的说话,截至目前,Oicq 用户已经突破 450 万,而且以每天30000的速度增加)在安全问题日益突出的今天,一个如此*广泛使用*的产品不去考虑安全方面的问题,显然是不明智的。而且这个考虑应该是在产品规划阶段就提上日程的。Oicq 显然没有把安全放在第一位,几个月前,安安(watchsea@sina.com)就已经指出了 Oicq 存放在本地的用户口令仅仅使用了微弱的加密手段。( build:220 中,Oicq声称已经将其修正)经过我们的分析测试,更加严重的问题还在后面。在发现了这些问题后,我们马上通知了腾讯公司,腾讯的反应很快,一夜间,Oicq 的版本就从220 升级到了 410 . 在其 whatnew 中,声称解决了这些问题。 我们立即对其进行了测试。应该看到,在 Oicq build 410 中,腾讯使用了某种加密协议,从而解决了明文传输的问题。应该说是一个很大的进步。因此本文分为两章,第一章针对 Oicq Build 220 及其以下版本。

8Gw!F [Z3t0pcMing工作室!q4F JX#L


0eSA c R-p`0第二章针对 Oicq Build 410 (截至目前最新版本) 应该看到,本文不带有任何地感情色彩,我们也是使用 Oicq 进行日常的 联络的.希望腾讯公司能尽快的解决这些问题。pcMing工作室!a&hn)L yL
- I -
6q?N){v |+~0-pcMing工作室Gn:|l3d1_
测试报告:
mFG gH#O0除开安全问题,Oicq 应该是一个很好的选择,其功能实用,不花哨。 但作为一个放在互连网上的产品,必须还要考虑到安全性。 Oicq 采用的是 server-client 模型,使用的是 UDP 协议。和 TCP 相比, UDP 本身就是不可靠的,可被轻易的伪造。使用 UDP 协议的软件必须自身在 两端进行可靠性检测。但和 TCP 相比,UDP 在资源占用上显然要 小许多,这也是 Icq,Oicq 选择 UDP 的一个主要原因。pcMing工作室'n}K(a A/w`j z6dH&P*b
经过分析,Oicq 在所有的传输过程中,任何数据都使用了明文发送,也就是 说,一个窃听者能直接的偷听到经过其的所有 OICQ 信息。这是一个不大不小的问题,象往常一样,你有两个选择,更低的资源占用率和更高的安全性。很难作出决定在二者之间。显然, Oicq 选择了前者。在Oicq中最常用的消息传送时,Oicq 采用了如下策略: 当二者能直接(点到点)通讯时,消息就直接的发送到对方,否则重试 N 次后通过Oicq 服务器转发。接受方在收到消息后返回一个回应信息,发送方就是通过这个信息来确认消息是否已经收到。
%O;^t:sqDK0消息的结构是:pcMing工作室2j7N7gr5E
(注意:本文中所有的 Oicq 协议结构是通过分析得来,不能保证其正确性)pcMing工作室R8?s.x0L+h@&a
struct TOicqPtoPpcMing工作室` Wn8Ee6E:DN{ K
{pcMing工作室&?*kw'l%td2B,d
char Tag1; // 0x02 // 显然是 Oicq 的协议编号 or 版本,固定
'JK~g)s6y0char Tag2; // 0x01 // 显然是 Oicq 的协议编号 or 版本,固定
,_B {.kb6`"AM2S0char Tag3; // 0x07
`m!MS(]1f0char Tag4; // 0x00
W&i9hA]0char Tag5; // 0x78pcMing工作室"YK/e{SJ
char Tag6; // 这两个字节相当于 unix 上的进程 ID,
uU iJ P2`{0char Tag7; // 随便赋值就可。pcMing工作室;fU RW0aSWq{
char cOicqNub[]; // 发送方的Oicq 号码。 exp:123456
0[$ICr`'n8X|ddH0char cFF; // 0x1f 在所有的Oicq 信息结构中,分割符都是 0x1fpcMing工作室3OlOgf#J6H+@
char cR; // '0' 固定
P x:[5rC#on6u0char cFF; //
ex8m~?DUl0char cE[]; // "75" ,这一位相对固定,可能是操作方式。pcMing工作室Y.n7^ }7bk3bt#U
char cFF;pcMing工作室-p/ttF#rs)XV~X)y
char cDateTime[]; // exp: "2000-4-10",0x1f,"12:00:12",0x1fpcMing工作室V.F${cr(t `1f
char OutMsg[]; // 发送的消息内容。pcMing工作室(EQ~G ek.q+p&A
char cEnd; // 0x03 ,所有的 oicq 信息都已 0x03 为标记结束。
.Q-IV LV0};
#D;Sp4R0DL(m0当接受方收到以上格式的 Udp Packet,就会显示有信息收到,完全没有其他的验证过程。也就是说,如果我从 linux 上发了个符合上述格式的 Udp packet,在 cOicqNub 处可填写任意的oicq 号码,也就是可以伪造了任何的 oicq 号码。(你看到Oicq 上显示号码为 1 的用户向你发信,不要吃惊。)pcMing工作室VAG*I6P)ZW7r X
例如:有 A, B ,C 三用户,Oicq 分别是:pcMing工作室+N[.saV y:T
A: 10000
X)\T#^C-k?)[8Q"F0B: 20000pcMing工作室z3pi~4i1|:|4u
C: 30000
] a~h:Hhsk%ah0已知 B 和 C 是好友,则 A 可以发送一个带有 B 号码的Udppacket 给 C, 在 C 处看来,完全就像是 B 亲自发给他的一样,但此时如果 C 点回复的话,信息会回到 B 的地址(IP)上。A 不能收到。也就是说 A 只能冒充B 发消息。如果此时 A 不停地发,就形成了 Oicq Flood,注意的是,此时Tag6,Tag7 两处要不停地
KHr8v:g&QS;w Z-x0变化,Oicq 对两个完全一样的信息只显示一次。严重的是,虽然Oicq 本身对发送的消息的长度做了限制,但这种限制是在发送方进行的,一旦发送的长度超过 2000 or >2000 个字节,接受方的 Oicq 就会发生缓冲区溢出,相当严重的远程溢出。pcMing工作室#IK |*La5o^'k
接下来就是谈谈怎样让 C 回复伪造消息时直接返回到 A 处。
]x&N+t8uq0运行 Oicq 时,过程如下:pcMing工作室9Wt+s3Ji Egj/l4v
start oicq.exe-> 上线 -> oicq 把口令发给 oicq server -> oicq server 返回其好友名单以及其对应的 IP (Oicq 把他存到本地内存中的一张表中) 当 Oicq 给相应的好友号码发送消息时,依据的地址就是这个 IP.
3Eq:j1S'j^#C"PB.F o0即首先与该 IP 联系,反复多次没有回音就通过服务器转发。

A$VF.Mz0r0pcMing工作室:a_ lZ7PZ;T

顶:5 踩:9
对本文中的事件或人物打分:
当前平均分:-0.78 (27次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.32 (22次打分)
【已经有32人表态】
9票
感动
3票
路过
3票
高兴
3票
难过
3票
搞笑
4票
愤怒
3票
无聊
4票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】

网络资源