时间回放到几年前。
我网络上的一个很要好的小弟一天突然跑过来向我诉苦?
他玩的一款游戏帐号丢掉了,里面的大量金币不翼而飞。
问问我怎么回事???
我问了他以下几个问题??
1:有没有乱安装什么软件,特别是不出名的小软件??
答曰:我为了玩这个游戏,专门重装了一个系统,
里面没有安装任何的其他软件
2:有没有安装杀毒软件,防火墙之类的??有出现防火墙或是杀毒软件报警吗??
答曰:安装了 360之类的一系列产品?含防火墙之类的 ,
没有出现任何的警报
3:有没有借账号给别人???
答曰:这个游戏用RMB玩的,怎么可能借给别人 ??我又不二
简单的坐诊下,
这个症状确实有点诡异,按理这已经是马奇诺防线了,怎么会出现问题呢??
杀毒软件和防火墙在,基本可以排除了ARP的可能性,百思不得其解!
作为一名资深的老中医,疑难杂症还是得去看,不能丢下患者不管 。决定一探究竟 。
我默默的打开了D盘的逆向工具箱,
抽出了 API Monitor 拦截神器,
先简单的分析下这个游戏的特征 。
点击登录,发现先请求一个DNS域名,具体域名我擦除了,避免广告嫌疑 !
登录过程先通过DNS获取到真正的IP地址 ,然后再进行通讯 ,
通讯方式使用tcp ,通讯数据全程加密 !
没有毛病啊,看到这里,我陷入了沉思,难道分析方向有错误??
我默默的点燃了一根烟,也许尼古丁的作用,我脑中闪过了一个非常容易忽略的问题!
DNS劫持。
于是打开QQ,在圈子里面发了句话,DNS 目前有哪些牛逼的方式??
一个人阴沉的回了一句,DNS挟持流量,电信级别,不能影响用户体验。
听了吓我一跳,不过做为技术研究,至少知道了 有DNS流量劫持这么回事。
具体DNS流量劫持是什么回事呢?
举个简单的例子一说就明白,比如 taobao.com 的ip
我们ping下就得到对应的ip地址
如果被挟持了 ,就会返回被挟持的ip(例如 250.250.250.250) ,这就是DNS挟持,
被挟持后的数据不再是送往 140.205.220.96 ,
而是送往了 250.250.250.250 这个服务器去了
电信会做DNS劫持??这个我不信,绝对不相信,
毕竟国家公器,岂能为了蝇头小利,绝对是不存在的。
但是中间环节呢??
万一有人经不起诱惑呢??传说DNS劫持的,电信级别的,一天 轻松 6位数,具体别人如何做我不清楚了,不敢妄加猜测。
顺便我百度了下
确实不少被侦破的DNS流量劫持案件,那么就说明这个产业链是存在的。
并不是我造谣。
据常在河边走的老人说,别人做挟持都是做黑色的,灰色的,而且只在指定时间段挟持一小段时间,那个不出问题,钱跟天上掉下来的一样
我开始不相信,度娘了下,还真有那么些人干这个事 ,太神奇了 。
上面这个案例是说 给广告主做挟持?这个利润是简单的 150W 么??真的是150W??我陷入了沉思 。
思考完了,
还得继续往下看病啊!小弟那边兴奋得催促我继续往下 !
我默默的又点了一根烟,不着急,我得思考下 。
既然DNS可以挟持,那么加密后的数据就送到了 指定的服务器下面了
那么非法的服务器上面只需要做数据解密就可以了!大家可能又是一轮狂喷。
数据加密了 ,咋解密啊 ??你太藐视现代密码学了。无知者无畏。呵呵。
结合解密方面的经验,我开始逐渐的有思路 。
首先我们必须解密出来 送过来的加密包
前面假设 DNS被挟持了,那么就意味登录的时候 ,会送过来 一个 加密后的登录包
只需要解开这个包,就会出现用户名和密码 以及 其他的相关信息 (例如机器码等)
这里我不得不再次打开OC,载入该游戏,分析下流程 。
这个游戏的通讯流程是这样的 :
通过分析 ,知道了通讯流程了 ,我终于缓了口气,马上就可以进入实际操作了
首先我们正常登录一次游戏 ,输入错误的用户名和密码
通过 API Monitor 拦截 recv 和 send 很快我们得到一次通讯的数据
上面图我摘取了 其中 两个关键性的包 ,其他的包 我就省略了,
也就是说 ,DNS挟持后,服务器会收到一堆加密包 ,这个时候 我们就需要解密 ,才得到真正的数据 ,这个时候 ,大家可以思考下 :
假设在挟持服务器 也做一个 tcp 响应的服务器 ,会怎么样呢 ??模拟真的服务器,然后返回事先准备好的数据包 ,客户端他就能正常了 。
这个过程我用文字描述,看看大家看得懂不 .
原始方式
现在我把他改为
2(记录下来发送的加密信息 )
也就是说 挟持服务器实现登录逻辑 ,返回固定的数据包给客户端 ,
记录下来 对于什么样的包返回什么样的格式 ,备用
解密过程怎么办??????
关键的工作在这里
我们知道 客户端 Exe 它是包含了 加密,解密算法逻辑的 ,只要你有Key 你就可以解密的
现在我们也有了每次发包 收数据包的 数据了,接下来 就是OC分析 ,强大的OC开始发挥作用了
1:内存数据替换法解密 ,
我们知道点击登录按钮,客户端发送数据 ,然后收到数据后 ,就会进去第一步
根据字典计算Key,
因为每次挟持服务器返回的 数据是固定的,所以我们
Call key生成算法 得出来的key都是一样的,这个可以事先通过OC 分析获取到 KEY
接着就Call 解密算法 。
这时候 解密算法在客户端通常是这样的
解密算法 (待解密数据,加密Key);
那么我们有了
待解密数据 和Key 在指定地方替换内存中的数据
就可以 Call 客户端里面的解密算法函数 ,得出明文数据。
内存解密过程 ,解密算法就类似一个制作馒头的机器
待解密数据就如同面粉,你丢面粉进去,就出来一个馒头 ,机器还是那个机器
你丢待加密数据进去 ,一个Call 就能出来解密数据 ,这个熟悉逆向的人来说
不太难 ,对于客户端比较复杂的,用这个方法 就不需要套算法 ,非常有效 ,
缺点非常明显,需要一个客户端配合
2:脱机解密工具 就类似制作一个机器,有了这个机器,直接把客户端丢垃圾桶
可以通过分析 ,分析出来 采用的是什么算法 加密的
我们看一个公式
明文数据+key=加密后的字符串
我们都有了 这三个数据 ,那么我们就用工具猜把 ,世界上多少种算法 固定了
一个个去遍历
以上过程 说了很多,对于过来人,一看就懂,不明白就会觉得我是胡言乱语 。
什么现代密码学呀,什么造谣呀 ,懒得去解释。
整个构成流程图我画下
挟持过程 我们需要写一个挟持服务器配合,我和小弟说,但是我不能写啊,
小弟很着急说,那你可以做技术研究啊,我们研究下 流程,这个可以的
受法律保护的啊。
听小弟这么一说,想想也是,继续往下撸把,
好不容易把一个模拟挟持的服务器 弄出来 ,
测试 ,噢耶,确实出来效果了 ,我点了一根烟,内心那个兴奋 。
可是 ,不能登录系统啊 ,小弟 紧张的 问我
是噢 ,我开始没有注意,确实不能登录 ,因为挟持了 ,不可能挟持服务器做一个
类似官方的服务器把 ,我狠狠的用两个手指捏灭了 烟头,做不出来 不抽了
接下来 我们必须解决了 能正常登录 ,即能截取又不能妨碍别人游戏啊,不然投诉客服
发现了,不闹大了 ,得做到神不知鬼不觉呀 。。小弟加紧催促 。
我沉思了片刻,马上有方案了 ,
我们看一张图
这个图可以看到,精明的程序员的设计思路,
如果第一个服务器不通,程序会自动寻找备用服务器 ,
这是一个思路啊 ,我拍拍大腿 ,第一次 我们截取成功了 ,返回了一个登录失败的数据 ,
这个时候 用户会再次点击登录 ,这时候 又会发请求给挟持服务器了
这个时候 我们已经得到了数据 ,第二次他再发送登录请求过来,我们就告诉他 这个服务器坏了 ,让他链接备用服务器 ,这样不就可以了么 ?? 这个设计是非常巧妙的。不信自己去试。
如果你认为这也做不到,我只能呵呵了 。
想到这里,非常兴奋,我马上翻了下新华字典,找找tcp 相关的信息 。
通过查找,我们发现 tcp 有一个3次握手的 毛病,就是在创建连接的时候
会先进行三次握手 ,在第二次握手的时候 ,我们返回一个 服务器不可用的信号,这个时候客户端就会认为 服务器不通 ,就会链接 备用服务器 ,这样就解决了 即能解密又能 不影响用户体验啦,
我把我的思路告诉了小弟,小弟一脸蒙,你能不能用形象点说,小弟很不耐烦
好吧,我用形象点说 ,
假设 客户端是 一个想上厕所的狗腿子
服务器 是5个厕所 ,集群嘛。
三次握手,可以这么理解 ,
狗腿子 先对第一个厕所喊,有人么??
厕所回一句 ,没有人
狗腿子再回一句,那我进去了哦 ,然后接着 就开始.....
现在我们改下流程
狗腿子 先对一个厕所喊,有人么??
厕所回一句 ,有人,其实没有人 ,骗他
狗腿子,回了句 哦 ,然后 就跑去 第二个厕所 上了 ,就不再去第一个厕所了
挟持服务器在获取到了加密数据后,客户端第二次 点击登录的时候 ,直接返回一个端口未开放的信号,
让他去备用服务器玩, 实现这个功能难么??
非常简单 ,通过wincap 开发包,在3次握手过程做手脚 ,返回一个 服务器不可用 的信号
至此,我们已经实现了 即可以 截取,又可以不影响用户体验了 ,完美了
至此,一个完整的方案已经出来了。我把这个方案 发给小弟,
小弟试了 ,非常满意,原来如此,终于知道了为什么没有中毒还会丢账号。
这些人太可恶了 ,,
以后注意了 ,我叮嘱小弟以后别玩了,中了这些招,基本无解,客户端装10个杀软都没有用
只有杜绝了挟持。
我把我这个思路在圈子一发,顺便炫耀下,
结果圈子里所有的人都笑了,这个方案已经有做了 ,你不要研究了 ,给我发一套源码,
别人玩得嗨得很 ,躲被子笑得合不上嘴 ,大家 这样安慰我。
马隔壁,白白浪费时间去研究。
为了 小弟这么一个奇葩的事,折腾了一上午 ,这是很多年前的陈年老事了
DNS 以前玩得非常厉害,据常在河边走的人说,
劫持做广告,挟持菠菜,劫持H站,挟持游戏,等等,很多貌似非常严谨,不可破的算法,在某些环节出了问题,就不是那么牢不可破了
今天在这里写个回忆录 。谢谢观赏 ,听村里的老人说长期点赞有壮阳补阴之功效。
下节课 ,继续和大家分享 些 大家没有见过的东西