精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● 计算机安全>>◇程序代码◇>>oicq防止不明用户乱发包问题解决

主题:oicq防止不明用户乱发包问题解决
发信人: j_zh()
整理人: williamlong(2000-08-10 10:38:05), 站内信件
struct TOicqPtoP
{
char Tag1; // 0x02 // 显然是 Oicq 的协议编号 or 版本,固定
char Tag2; // 0x01 // 显然是 Oicq 的协议编号 or 版本,固定
char Tag3; // 0x07
char Tag4; // 0x00
char Tag5; // 0x78
char Tag6; // 这两个字节相当于 unix 上的进程 ID, 
char Tag7; // 随便赋值就可。
char cOicqNub[]; // 发送方的Oicq 号码。 exp:123456
char cFF; // 0x1f 在所有的Oicq 信息结构中,分割符都是 0x1f 
char cR; // '0' 固定
char cFF; // 
char cE[]; // "75" ,这一位相对固定,可能是操作方式。
char cFF;
char cDateTime[]; // exp: "2000-4-10",0x1f,"12:00:12",0x1f
char OutMsg[]; // 发送的消息内容。
char cEnd; // 0x03 ,所有的 oicq 信息都已 0x03 为标记结束。 
};
以上一段为引用。

  分析可知它根本没有防止此类攻击的能力!我们来探讨一下,是否加上一个
随机口令认证:
  假设用户A在OICQ启动的时候,产生一随机码(不是服务器产生,减轻服务器
的任务),登陆到服务器,服务器记录下随机码后,将随机码通知给A的在线好友
,并将好友的随机码送给A,当每次进行通讯的时候,随机码就做为一个口令,在
OutMsg中传输,口令不通过,就作为虚假信息!注意,发送和接受的口令是不一
样的!

  是不是就完全安全了,不是的。假设A、B、C三个人,A、B、C互为好友,那
么就是B和C同时获得了A的口令,如果C此时想伪造B的消息,那是很容易的,因为
C同时有A的口令,也有B的IP地址,就可以轻松地伪造B的消息。(我没有做过验证
,有兴趣的朋友可以一试。)
  
  作为一个包,如果想截取——只要想,就总有办法,也就不存在多大的安全
性,就需要对包内容进行加密,最好的办法是两者之间的密钥是他人所不知的,
那么刚才的A、B、C三者之间,就需要3个密钥。现在再假设:
  A登陆到服务器,发送一个随机码,在线的B和C都得到了A的随机码,产生和
A联系的初权,在B和C向A通过初权联系的时候,AB、AC分别再进行二次密码协定
,也可以是通过随机产生,此时的密码随机产生最好是B和C执行:
  A--->server  server--->B   B---->A   A---->B   
               server--->C   C---->A      A---->C 
  B--->A的包中是由加密的初权做认证,同时发送下次通讯加密的密码;A---
>B的包是一个加密回应,验证密码,B如果收不到回应N次后,做失败处理。

    上面一个服务器的处理不多了,但还是有漏洞的。
  最好是A上线(不用产生随机码)后,服务器通知B,B产生相对其他用户不同
唯一的随机码后,发送给server,由server将随机码发送给A,那么,A和B的随机
码对其他用户是不可知的,每次也是不一样的,A和B的通讯验证就必须通过此有
权信号。即使受到攻击(穷举),只要下线后上线就可以了。做得更好的程序,
就是通过server即时换一个密钥!我想这个过程不要我再说了。

  这种方法,在由HUB为节点组成的星形局域网,还是不可靠的,如果是Switc
her就好点了。

--
我喜欢......     ......睡觉
我爱......        ......巧克力
我是......        ......动物??  
我真的......     ......不想说话
————————————————————————

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.132.43.72]

[关闭][返回]