利用iptables禁用QQ号码

今年上半年研究出来的,http://www.ywjt.org/index/archives/453.html,一起分享:

最开始禁用QQ是用iptables的七层补丁,但那个是针对源ip去禁用QQ的特征码,现在我们要做的是想针对QQ号做处理。另外,之前认为QQ是用udp连接服务器的8000端口,然后试着把udp的8000端口禁用,发现和我们游戏一样,发现这个端口不通,会去用另外的备用端口,比如tcp的80和443之类的端口,所以通过禁用端口这是行不通的,而且服务器地址不定。
注意到iptables有个-m string –hex-string 这个匹配方式,有个string模块,有个抓数据包,然后做drop处理的方式,下面就去抓包。
工具:SmartSniff
QQ号码:858276842
电脑ip:192.168.3.7
网关:linux iptables nat环境
思路:QQ号码需要通信,先得到QQ号码的十六进制。
echo “obase=16;858276842″ | bc
得到QQ号码的十六进制332843EA。

下面抓包的时候多注意到33 28 43 EA 这种字符。

利用iptables禁用QQ号码_第1张图片

 

利用iptables禁用QQ号码_第2张图片

 

第一个框是QQ号,第二个和第三个是经过多次登陆,和登陆不同QQ号得到的“特征码”
每次登陆都需要有这个字符,所以试着匹配这个字符,然后drop。看看效果,

另外有个差异的就是QQ2011的Q+版本特征码不一样,看下面的截图65变成了64

利用iptables禁用QQ号码_第3张图片

针对QQ2011 Q+版本

iptables -I RH-Firewall-1-INPUT -s 192.168.3.7/32 -m string –hex-string “|0000010101000064|” –algo bm -j DROP

QQ2012的时候匹配的是0000010101000065,会出现已经登陆的QQ不会掉线的情况,但是会出现重复收到好友发送过来的消息,可能是因为收到消息之后无法通知服务器已经收到,所以服务器重复发送好友的消息过来,但是下线之后会无法上线。
当匹配的是00010101000065,前面少匹配一个00,已经登陆的QQ发现会出现无法发送消息的情况。

iptables -I RH-Firewall-1-INPUT -s 192.168.3.7/32 -m string –hex-string “|0000010101000065|” –algo bm -j DROP

开白名单的时候只需要匹配到那个QQ号,然后ACCEPT处理就可以了,比如858276842这个QQ号码,可以抓包得到是33 28 43 ea,也可以通过计算得到,为了减小误差,后面可以多匹配0200这个后缀。

iptables -I RH-Firewall-1-INPUT -s 192.168.3.7/32 -m string –hex-string “|332843ea0200|” –algo bm -j ACCEPT

经测试百发百中。
echo “obase=16; 858276842″ | bc这样可以得到QQ号码的16进制。当然也有例外的情况,当十六进制前面有个0的时候,系统默认会把0去掉,我们可以做个特殊处理,当是奇数的时候前面自动加0,用的是awk

echo “obase=16;396162545″|bc | awk -F “” ‘{if(NF%2==”0″) {print $0} else {print “0″$0 }}’

另外可以通过抓包得到哪个ip在登陆哪个QQ号,具体操作方法是在网关上面抓包。
tcpdump -nn -i eth1 -X ‘host 192.168.3.7′
可以加个参数 –w file,把结果写到文件里面去,好做分析,之后用同样的方法-r读取这个文件就可以了,在文件里面把十六进制的空格去掉,用sed ‘s/ //g’就可以了,然后去搜索特征码0200,前面的那几位就是QQ号码的十六进制了,十六进制转换十进制可以用shell的echo命令巧妙地实现:

echo $((16#179CF5F1))
得到QQ:396162545
所以最终的实行方法是

#允许的QQ先ACCEPT放行,
iptables -I RH-Firewall-1-INPUT -m string –hex-string “|332843ea0200|” –algo bm -j ACCEPT
#拒绝所有QQ2012和Q+的登陆
iptables -I RH-Firewall-1-INPUT -m string –hex-string “|0000010101000065|” –algo bm -j DROP

iptables -I RH-Firewall-1-INPUT -m string –hex-string “|0000010101000064|” –algo bm -j DROP

附做测试时候保存的QQ数据包:

利用iptables禁用QQ号码_第4张图片

利用iptables禁用QQ号码_第5张图片

 

利用iptables禁用QQ号码_第6张图片

这个是Q+的。

利用iptables禁用QQ号码_第7张图片

已经做大范围验证~ ~

你可能感兴趣的:(iptables,针对QQ号码,封QQ号码)