[【通过】] 最新版wifi万能钥匙协议分析

[复制链接]
调皮的小和尚 发表于 2017-12-13 13:30:29 | 显示全部楼层 |阅读模式

正式成员|主题 |帖子 |积分 6

本帖最后由 调皮的小和尚 于 2017-12-13 13:34 编辑

0x01 前言随着Wifi万能钥匙不断的升级,目前协议字段全部被加密了,所以想要干些羞羞的事情还是比较困难的。可以肯定的是,不管怎么变化,某些字段肯定是不会变的,只是加密方式在不断变化,所以先拿旧版本的分析出所有的字段后,再对最新版本app进行分析。抓包后发现数据经过了加密。按部就班的,用jeb反编译源码,分析发现有签名校验,猜测有多处校验,如果不想一个一个的修改,最好采用hook的方式,直接hook系统函数,这是一个万能的方法,能有效的解决所有的签名校验。幸运的是,apk没有加壳,可以分析协议的所有过程,以及app的运行机制,去广告什么的基本都没问题了。不幸的是so被加壳了,猜测应该是某个重要的字段放在了so中加密,如果想要分析加密算法,就必须对so进行脱壳,尝试用IDA动态分析定位到关键的加密函数,或者dump出来简单修复一下扔到IDA静态分析(参考看雪的elf修复文章),方法很多,需要逐一去尝试。总之,整个过程很操蛋。





0x02 分析过程
第一步、先对apk进行抓包。
找到获取密码的url:http://ap.51y5.net/ap/fcompb.pgs  method:post
发送的data: 构造头(明文) + 加密数据

第二步、对抓包数据进行分析。所有字段我已经分析出来了,可以参照着自行分析。
抓包数据 = 构造头 + 加密数据
构造头:
headerFlag(00000000) + headerLen(57) +
appIdFlag(0A) + appIdLen(05) + appId(A0008) +
DhidFlag(12) + dhidLen(20) + dhid(20长度的字符串) +
unknowFlag(22) + unknowLen(01) + unknow(k) +
verCodeFlag(2A) + verCodeLen(04) + verCode(3138) +
OrigChanIdFlag(32) + origChanIdLen(0E) + origChanId(guanwang170828) +
langFlag(3A) + langLen(02) + lang(cn) +
imeiFlag(42) + imeiLen(0F) + imei

header:四个字节,默认为0
appId:A008,执行动作对应的id,获取密码的动作id为A008
dhid:这个字段限制每天获取密码的次数,大概十几次,就需要重新获取dhid,要分析
unknown:未知的字段
verCode:版本号
origChanId:猜测应该是上线到官网的时间标识
Lang:语言
Imei:手机的IMEI
第三步、对加密数据进行分析。附件中给出了这部分的源码,而且所有字段都在第二步解释过,就不细说了。
加密数据由以下部分组成:
headerFlag(02000000) +
headerLen(头的长度) +
header +
bodyFlag(00049BB2) +
bodyLen(body的长度) +
Body

Header:
dhidFlag + dhidLen + dhid +
langFlag + langLen + lang +
appIdFlag + appIdLen + appId +
macFlag + macLen + mac +
verCodeFlag + verCodeLen + verCode +
origChanIdFlag + origChanIdLen + origChanId +
chanIdFlag + chanIdLen + chanId +
imeiFlag + imeiLen + imei +
verNameFlag + verNameLen + verName +
capSsidFlag + capSsidLen + capSsid +
capBssidFlag + capBssidLen + capBssid +
netModelFlang + netModelLen + netModel +
tsFlag + tsLen + ts +
longiFlag + longiLen + longi +
latiFlag + latiLen + lati +
unknowFlag + unKnowLen +
unKnow

Body:
第四步、对最终需要post数据的加密过程进行分析。
1.构造自定义的数据格式(附件中提供了实体类)

2.对该数据进行zip压缩

3.采用so中的s16函数对压缩过的数据进行加密(这一步的关键就是so脱壳)

4.在加密的数据前面添加构造头



0x03 用到的技能
1、Xposed hook

2、无源码动态调试

3、ida和jeb静态分析

0x04 结论
在本次分析中,最大的收获就是细心,有时候一个简单的编码错误能折磨自己好几天,惨不忍睹。
本文给出了分析过程的执行步骤,和最终的正确结果,还有很多细节没有细说,留给有需求的人去研究吧!
至于为什么不给出全部源码,我认为,思路才是最重要的!


0x05 附件
Java类为post数据的实体(构造的自定义数据格式),new对象,调用getWifiInfo()方法,返回字hex字符串,代码略丑、将就着看吧。






WifiInfoDetail.zip

2.15 KB, 下载次数: 659

评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

快速回复 返回顶部 返回列表