通过windows中间层过滤驱动修改接收数据包的内容

来源:互联网 发布:弹幕播放器源码 编辑:程序博客网 时间:2024/05/23 17:34

问题描述:

在工作中使用到一个软件,这款软件有一个限制就是一个账号只能登录2次,就是说打开3个这款软件,登录同一个账号,过一会儿就会有一个提示“检测到账号在其他地方登录,本程序将退出”。

如果想在多台机器上使用同一个账号登录这款软件还不行,买多个账号吧,又太花钱。破解吧,自己汇编又不行,不过网络倒是懂的多一些。


问题分析:

既然能检测到账号登录了几次,并且能通知客户端退出,那说明客户端和服务器肯定有定时通讯才行。想到这一点儿,打开HttpAnalyzer抓取程序数据,没想到刚登陆软件,HttpAnalyzer就自动退出了,看来软件还加了防御机制。更要命的是关闭软件后,再登录提示“您的账号异常,请联系管理员”,直接把号封掉了。

没办法,不能轻易放弃,又弄一个账号,既然HttpAnalyzer被封了,那我换一个抓包工具,换更通用的wireshark,试试看这个它是不是有检测,一试可以抓到数据包,账号也正常。

抓到数据后,找到了登录的http数据包,过滤这个主机IP,然后等待软件客户端和服务器的定时交互数据包,果然不出所料,过了2分钟,抓到了数据包。

接下来分析这个包,wireshark可以解析出http数据来,发现返回的内容是OK。然后又多打开几个软件,登录同一个账号,抓取到另外一种返回信息是FAIL,抓到这种数据后,软件上就会提示“检测到账号在其他地方登录,本程序将退出”。至此就分析明白了,软件通过收到的这个信息,来决定是否退出软件。


问题解决:

接下来就是要拦截数据包,并修改数据包内容了,直接通过应用层拦截好像也可以(钩子啥的,没用过,而且考虑到软件有防护机制,就没向这个方向研究),选择用自己熟悉的过滤驱动,来拦截并修改数据包。上一步,已经得到对方主机的IP和Port,另外也知道数据结构,直接在ptreceive中拦截数据包,如果碰到FAIL的包,直接复制一个新包,并修改内容为OK,扔掉旧的,把新的扔给上层,这样上层收到的就是OK了,经过调试终于软件不退出了,打开十个八个也没问题了。

最后的问题是64位机器上驱动必须要数字签名,只能打开“测试模式”才能用。


0 0
原创粉丝点击