【文章标题】: 突破封锁线:第三章--网络篇
【文章作者】: Austin
【作者邮箱】: austiny.cn@gmail.com
【软件名称】: 神州数码网络客户登陆程序
【软件大小】: 不重要
【加壳方式】: UltraProtect 1.x
【保护方式】: 加壳 网络封禁
【编写语言】: VC6.0
【使用工具】: T-Sniffer OllyDbg
【操作平台】: Windows2003
【软件介绍】: 神州数码小区宽带网络登陆客户端,诸多限制
【作者声明】: 技术交流中。。。
--------------------------------------------------------------------------------
【详细过程】
一、(广告)前情回顾
上一回讲到,从韩国回来,我们已经给DIGI做了一个彻底的整容。这次我们来看看它里面有些什么。。
二、(废话)里面当然是代码啦
说得很对,不过,这一章我们先不看代码。前面说过,DIGI是一个网络应用程序。我们来看看它的执行流程:
启动程序 --> 填写用户名、密码 --> 点击连接 --> 等待验证 --> 通过验证 --> 网络开通 --> 。。。 --> 下线
这过程当中DIGI要和服务器通讯很多次。我们的任务,就是找出它们到底说了些什么。
(007双手交叉持枪造型中,小花猫友情客串邦女郎背影。。。)
三、(窃听)其实就是抓包啦
根据TCP/IP协议,数据在网络中会以包为单位发送和接收。(只见一个个包在天空飞来飞去,猪说,好大的棉花糖)
我们使用抓包工具(嗅探器)来查看包的内容。
不多说,打开T-Sniffer(一个很小很小的嗅探器,到底有多小呢? --只比倭国稍微大一点点)
当然用专业工具Sniffer Pro,Ethereal也是可以的,不过杀鸡焉用牛刀,这把就是劫机幢大楼专用水果刀啦。
先设置嗅探选项:
协议: TCP UDP ICMP //所有协议都选上先
数据大小: 65535
显示风格: ASCII码
源端口: 0-65535 //所有端口都选上
目的端口: 0-65535 //同上
目标地址: 172.16.241.100 //这是服务器的地址
源地址: 0.0.0.0 //任意
嗅探接口: 192.168.0.177 //这是本机网络地址
然后开始抓包:
启动程序
填写用户名、密码
点击连接(抓到第一个包,包A)
源地址:192.168.0.177 端口:1741 目标地址:172.16.241.100 端口:3848 TTL:128 PacketSize:98
协议:UDP
0x80 0x15 0x3C 0xE4 0x42 0x3B 0xBC 0x52 0xB9 0xCA 0x8C 0x6D 0x56 0x7B 0x0D 0x9A ..<.B;.R...mV{..
0x1B 0xA4 0x80 0xA0 0x48 0x48 0xC9 0x48 0x59 0xD8 0xC8 0x01 0x21 0x68 0x58 0x58 ....HH.HY...!hXX
0x68 0x49 0xC8 0xD8 0xE8 0x91 0x20 0x00 0x04 0x27 0xFB 0xC6 0x50 0xA0 0xB1 0xC8 hI.... ..'..P...
0xD9 0x49 0x39 0xC8 0x59 0x39 0x58 0xC9 0x39 0xC8 0xD8 0x68 0x21 0x21 0xAC 0x3D .I9.Y9X.9..h!!.=
此时网络已经开通
一分钟后(又抓到一个,包B)
源地址:192.168.0.177 端口:1741 目标地址:172.16.241.100 端口:3848 TTL:128 PacketSize:87
协议:UDP
0x81 0xE9 0xAF 0x91 0x83 0x9B 0x69 0xFB 0x48 0x7C 0xC9 0x0C 0xCD 0x0E 0x38 0x6E ......i.H|....8n
0x57 0xAF 0x91 0x20 0x00 0x04 0x27 0xFB 0xC6 0x50 0x20 0x41 0x49 0xC9 0xD9 0x68 W.. ..'..P AI..h
0xD8 0x49 0x68 0xD9 0x58 0xE8 0xC9 0x48 0x58 0xC8 0x58 0xC9 0xA0 0xB1 0xC8 0xE8 .Ih.X..HX.X.....
三十秒后(还是包B)
源地址:192.168.0.177 端口:1741 目标地址:172.16.241.100 端口:3848 TTL:128 PacketSize:87
协议:UDP
0x81 0xE9 0xAF 0x91 0x83 0x9B 0x69 0xFB 0x48 0x7C 0xC9 0x0C 0xCD 0x0E 0x38 0x6E ......i.H|....8n
0x57 0xAF 0x91 0x20 0x00 0x04 0x27 0xFB 0xC6 0x50 0x20 0x41 0x49 0xC9 0xD9 0x68 W.. ..'..P AI..h
0xD8 0x49 0x68 0xD9 0x58 0xE8 0xC9 0x48 0x58 0xC8 0x58 0xC9 0xA0 0xB1 0xC8 0xE8 .Ih.X..HX.X.....
此后每隔三十秒,都会发出同样的数据包。
若干次后,选择断开网络(发出四个包,包C)
源地址:192.168.0.177 端口:3848 目标地址:172.16.241.100 端口:3848 TTL:128 PacketSize:87
协议:UDP
0x90 0xE9 0xF3 0xBE 0x68 0xDC 0xAC 0xC2 0xC9 0x67 0x68 0x2B 0x62 0xD1 0x4E 0x54 ....h....gh+b.NT
0x0E 0x3D 0x91 0x20 0x00 0x04 0x27 0xFB 0xC6 0x50 0x20 0x41 0x49 0xC9 0xD9 0x68 .=. ..'..P AI..h
0xD8 0x49 0x68 0xD9 0x58 0xE8 0xC9 0x48 0x58 0xC8 0x58 0xC9 0xA0 0xB1 0xC8 0xE8 .Ih.X..HX.X.....
源地址:192.168.0.177 端口:3848 目标地址:172.16.241.100 端口:3848 TTL:128 PacketSize:87
协议:UDP
0x90 0xE9 0xF3 0xBE 0x68 0xDC 0xAC 0xC2 0xC9 0x67 0x68 0x2B 0x62 0xD1 0x4E 0x54 ....h....gh+b.NT
0x0E 0x3D 0x91 0x20 0x00 0x04 0x27 0xFB 0xC6 0x50 0x20 0x41 0x49 0xC9 0xD9 0x68 .=. ..'..P AI..h
0xD8 0x49 0x68 0xD9 0x58 0xE8 0xC9 0x48 0x58 0xC8 0x58 0xC9 0xA0 0xB1 0xC8 0xE8 .Ih.X..HX.X.....
源地址:192.168.0.177 端口:3848 目标地址:172.16.241.100 端口:3848 TTL:128 PacketSize:87
协议:UDP
0x90 0xE9 0xF3 0xBE 0x68 0xDC 0xAC 0xC2 0xC9 0x67 0x68 0x2B 0x62 0xD1 0x4E 0x54 ....h....gh+b.NT
0x0E 0x3D 0x91 0x20 0x00 0x04 0x27 0xFB 0xC6 0x50 0x20 0x41 0x49 0xC9 0xD9 0x68 .=. ..'..P AI..h
0xD8 0x49 0x68 0xD9 0x58 0xE8 0xC9 0x48 0x58 0xC8 0x58 0xC9 0xA0 0xB1 0xC8 0xE8 .Ih.X..HX.X.....
源地址:192.168.0.177 端口:3848 目标地址:172.16.241.100 端口:3848 TTL:128 PacketSize:87
协议:UDP
0x90 0xE9 0xF3 0xBE 0x68 0xDC 0xAC 0xC2 0xC9 0x67 0x68 0x2B 0x62 0xD1 0x4E 0x54 ....h....gh+b.NT
0x0E 0x3D 0x91 0x20 0x00 0x04 0x27 0xFB 0xC6 0x50 0x20 0x41 0x49 0xC9 0xD9 0x68 .=. ..'..P AI..h
0xD8 0x49 0x68 0xD9 0x58 0xE8 0xC9 0x48 0x58 0xC8 0x58 0xC9 0xA0 0xB1 0xC8 0xE8 .Ih.X..HX.X.....
此时网络断开。
四、(分析)不是人类语言,鉴定完毕
当然不是,以上的数据包中包含地址端口用户名密码等加密后的信息。(能直接看懂的人都去演Matrix了)
好在我们不需要确切的知道每个包的具体内容。下面分析一下:
连接的时候,DIGI发出包A,用于提交用户名密码等信息交给服务器验证,内容当然就是那些东东啦。
此后每隔一定的时间,DIGI会发出包B,内容不变,用于通知服务器保持网络连接。
事实证明,如果三分钟后收不到包B,服务器将切断网络连接。(此招在警匪片中绑匪常用)
最后断开连接时,DIGI发出4个包C,用于通知服务器断开连接。
五、(限制)。。,。。,嗯,确实没有"级"字
回忆一下DIGI对网络使用的限制:
1. 帐号与机器绑定(换机器不能登陆)
2. 限制共享网络连接(发现代理,强制下线)
3. 限制BT下载(强制下线)
4. 无法从路由后连接(拒绝登陆)
其中1和4的限制由包A来完成:
不是合适的机器(错误的用户名密码和MAC地址)或者非授权用户(也就是未缴费用户)将无法通过验证,
而路由器后的机器(错误的网络地址)也将无法通过验证。
2和3的限制由包B来完成:
运行过程中,DIGI会检测共享和BT下载,一旦发现,将不再发出包B,并发出包C强制下线。
至此,DIGI的工作流程已经昭然若揭。
1#. 收集信息(用户名密码mac地址网络地址等)打包
2#. 将包发至服务器
3#. 检测代理和BT等
4#. 向服务器发送保持连接包
5#. 下线
六、(成果)We are the world, we are the children.
好了,我们的目标是? -- (小朋友可爱状)没~有~蛀~牙~!!
有道理,不过别忘了要突破封锁线才行哦。
对DIGI实施九年制应试教育,把它变成:
1#. 收集信息(用户名密码mac地址网络地址等)打包 --> 伪造数据包
2#. 将包发至服务器 --> 将伪造包发至服务器
3#. 检测代理和BT等 --> 禁止检测
4#. 向服务器发送保持连接包 --> 这个当然
5#. 下线 --> 这个不变
经过这样一番改造,DIGI将对我们死心塌地,忠心耿耿,至死不渝。。。(口水流一地)
(插一句,这也是大多数网游外挂的工作原理)
(继续流)
--------------------------------------------------------------------------------
【经验总结】
至此,我们对DIGI进行了一次类似“黑箱”分析的体检,搞清楚了它的工作流程,并提出了改造方案。
网络分析中的关键点有:
1. 网络的开放性给我们提供了从外部观察程序的窗口 ................... 嗅探器
2. 网络是网络程序的优势也是劣势 .................................. 普遍适用
当然更多的网络分析会对包的内容进行解密和更细致的分析,此例简单,不再贽述。
突破封锁线:第三章--网络篇 [完]
谢谢您耐心的看到这里,在下一章--代码篇中,将详细讲述改造应用程序和加入自己dll到程序中。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年05月03日 20:22:25
[课程]Linux pwn 探索篇!