利用WinPcap模拟网络包伪造飞秋闪屏报文
起因
不知道从什么时候开始,同事开始在飞秋上发闪屏振动了,后来变本加厉,成了每日一闪。老闪回去也比较麻烦,作为程序猿呢,有没有什么偷懒的办法呢?(同事负责用户体验,不大懂编程)。然后尝试了以下思路:
UI自动化
利用UISpy查看飞秋聊天窗口,悲催的发现找不到发送闪屏振动的按钮。
模拟鼠标事件
准备使用mouse_event发送鼠标事件来模拟闪屏振动的按下。但是一想,每次闪屏振动按钮所在的位置不一样,要是移动窗口或者改变窗口布局,都得重新设置坐标,麻烦,遂弃之。
伪造网络报文
以前就知道WinPcap和Wireshark,恰好前段时间又在博客园看到[c#]记一次实验室局域网的ARP欺骗 - Yosef Gao - 博客园,了解到C#下也有了相关的解析和发送工具。果断开始这个方案。
飞秋报文数据猜想
飞秋网络传输
我是知道飞秋聊天是用UDP,端口默认为2425。不知道也没关系,打开飞秋->设置->网络设置,然后你就会发现,飞秋已经明白的告诉我们了。
闪屏振动
首先打开的WireShark,设置过滤条件为udp.port==2425,然后向测试机发送一个闪屏振动试试看。
发现有两条消息,其中一条是本机发给对方的,另一条是对方发给本机的。
再发送几次闪屏振动,我们就可以大致猜出飞秋闪屏振动报文的规律,发送的报文格式为1_lbt6_0#128#(发送方MAC地址,16位)#0#0#0#4001#9:(猜测应该是序号, 具体不清楚):(发送方用户名):(发送方主机名)209:,收到的报文为1_lbt6_0#128#(发送方MAC地址,16位)#0#0#0#4001#9:(猜测应该是序号, 具体不清楚):(发送方用户名):(发送方主机名)210:。将发送的闪屏振动报文用WinPcap模拟数据包,居然在测试机上收到了闪屏振动(原先还以为猜测的序号字段会有影响)。
信息
向测试机发送一条信息后,发现有几条消息。
经过比较报文长度和来源之后,猜测其他几条较短的来自本机的报文为发送正在输入,停止输入等消息,而较长的为发送的信息。经过验证之后,也确实如此。而飞秋的信息报文应该是加过密的,无法直接从中猜出内容。
表情
表情与信息基本类似,但是表情貌似是经过压缩的。
文件
一般文件都会通过TCP传输,经过验证。发现果然如此,飞秋要发送的文件列表是通过UDP进行传输,而具体文件内容是通过TCP传输。
在UDP传输中,本方发送两条报文,对方发送两条报文。基本本方发送的第二条报文可以看到文件名。
在TCP报文中,除了TCP连接建立的三次握手和连接断开的四次握手以外,在其余的本机发送的报文中,可以清楚的看到报文的内容。
这是文本文件:
这是二进制文件:
二进制文件在UltraEdit查看:
说明
因为主要兴趣在研究闪屏振动,对其余功能只是简单查看了一下,并未深入研究。
代码实现
软件界面
最开始做成模拟闪屏振动但不需要填写任何报文信息,但是登录用户名无法通过网络取得,再加上也可以通过在发送报文字符串中填写其他从WireShark中复制过来的报文字符串来模拟其他报文(比如信息和表情),就做成了这种形式。
注意事项
要使用PacketDotNet.dll和SharpPcap.dll,需要安装WinPcap(我是直接安装了WireShark,里面含有WinPcap)。
下载链接
博客园:FeiqCheater
趣事
- 最开始时未加睡眠时间,一个while(true)发送闪屏振动报文,直接把设计师的飞秋给玩死了,多次重启无效,丫还以为是自己电脑出问题了。现在才明白DOS(拒绝服务攻击)的可怕。
- 可以伪装成其他人发送闪屏振动报文。 我就经常伪装成他人给设计师发闪屏,也伪装成设计师给他人发闪屏。
- 把自己的飞秋退出后,对方在收到飞秋的报文后,仍然有响应。
- 后来设计师学聪明了,经旁人指点,在飞秋中关闭了闪屏。
最新情况
进展
- 在网上可以查到一部分关于飞秋消息格式的消息,比如将飞秋攻击进行到底 - 龙月 - 博客园(粗看了一下,飞秋版本不一样),同时传说也可以直接发送飞鸽传书未加密的报文,但我并未经过验证。如果确实如此的话,则可以模拟伪造飞秋消息。
- 我想到可以在本机上模拟飞秋发出刷新好友列表的消息,然后再解析收到的包,这样就可以分析出好友列表,包括每个好友的用户名,IP地址,MAC地址等信息。这样模拟闪屏振动就可以不用输入任何信息了。
挑战
- 另一个笔记本给我弟了,单台电脑不好模拟。
- 貌似WinPcap不能拦截目标非本机的报文,也就是伪造的消息只能由本机伪装成其他人发出去一次,而不能伪造成他人和目标方进行交谈。(以前我利用改IP、改名称、改MAC的方式伪装成领导捉弄过其他同事,说公司准备给他加工资,让他傻乐)。
- 貌似WinPcap接收到包之后也不能将包丢弃。
- 懒癌犯了,不想去做这些事了,这才是最主要的原因。