X-Young认证协议分析
2019-09-17 19:03:59 Author: mp.weixin.qq.com(查看原文) 阅读量:53 收藏

本文为看雪论坛优秀文章

看雪论坛作者ID:ChenSem

注:此次分析基于Mac端。

0x01
这种上网方式一直需要连着网线而且使用它自己定制的软件,只要网线一断就没网了。然而无线AP的网非常非常慢,于是想着逆向PC端的网络协议,将它移植到路由器上,这样就方便很多。
0x02

软件使用的是http协议,没有启用https直接wireshark抓取一下重要的http协议。
认证过程分为下面几个步骤:
1. 往服务器发送GET请求,响应的是个302报文。其中Location字段含有一个重要的value (tag)
2. 请求Location,获取相关配置URL
3. 获取一个ticket,也就是请求上网。
4. 获取完ticket后,生成相关的url,展示为url手机客户端扫描二维码,请求服务器通过此次上网请求。
5. 其中还有一个stage.cgi,这个URLPC端展示目前认证的一个状态(上网失败,上网成功,正在请求)。
下面看一个各个请求中的字段。
  
第一个GET请求没啥东西,wlanuserip是获取到的内网IP,mscgip是外网IP,wlanusermac是一个mac地址,userlocation可能是记录网络接口物理位置的参数。
分析ticket.cgi。
  
里面POST的内容是突然多出来的,看这个格式像hexstr,分析可能是加密过的。于是去程序中分析这个POST data的由来。通过这个Headers里面的字段去定位这个data的生成。
分析程序的一个字符串表,看到有个getTheTicket的,在drawAndCheckQRCode。
 
objc_msgSend就是这个调用getTheTicket函数的。这个函数不在程序中,调用的是动态链接库的,我们切换到动态链接库去查看。

分析这个getticket函数,其实这里我没有分析多少,这里它的日志没有关闭,我们直接可以查看到他的日志。
 这里的他原始生成的其实是一个xml序列。

他这个xmlDataWithDic其实就是生成这个xml序列。然后调用encodeData对这个xml序列进行加密,最后得到的这个值就是POST的数据。分析这个encodeData
  
里面有一个比较重要的函数keyCode猜测可能是对数据进行加密的。这里可以直接在这里下个断点,然后查看相应的数据,看是否为原始数据。跟进这个Keycode
 

这里发现其实是使用dlopen打开一个动态链接库,然后寻找到Code的函数,进行加密。

 这个openZsmModule其实是写一个so文件,然后dlopen这个so文件。在这里下个断点直接将SO库拷贝出来即可。文件名是client.dylib这里有了这个so文件,就可以去分析里面的Code函数。
 

code函数有三个加密rc4,aes,des3。我们这里直接采用动态调试的方式,查看getticket的时候会进入哪一个case。分析过后其实是进入的aes这里面去了。aes需要一个key和一个iv。跟着上下文进行分析,发现v7就是我们需要的key。

拿到key,iv还不知道。但是iv其实在aes中只会影响第一段后面的序列,还有一些模式不需要用到IV,就比如ECB模式,直接在线测试。

最后发现其实是一段ECB模式的加密。那么拿到这个加密过后就可以对getticket的响应进行解密了。此时会得到一个ticket生成的二维码我们可以直接用手机扫一下,其实就是一个URL

 就是这样的一个序列,cctp://[ticket]@主机名'mac。
 
此时直接生成二维码,用手机客户端去扫描即可。
 
刚刚我们分析的POST data的生成,报文中还有一个比较重要的字段:CDC-checkSum,通过对程序的分析其实就是一个对POST data的MD5。
最后要注意的是几个重要的点:
1. userip,mscgip等一些参数要正确设置。
2. 提示二维码失效的时候要及时通过api将二维码销毁掉。
0x03

整个协议挺简单的,不复杂。注意就是在测试的时候每个参数应该大致知道他的由来,不然模拟报文发送的时候不能正常模拟,又得花费很长时间去查找出错的原因。
- End -

看雪ID:ChenSem

https://bbs.pediy.com/user-771450.htm 

*本文由看雪论坛 ChenSem 原创,转载请注明来自看雪社区

推荐文章++++

基于二进制代码的代码混淆研究

移动基带安全研究系列之一 概念和系统篇

Linux Kernel Exploit 内核漏洞学习(4)-RW Any Memory

Android 调试任意APK - smail工程--多进程

使用IDA Python寻找二进制漏洞

进阶安全圈,不得不读的一本书


“阅读原文”一起来充电吧!

文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458298876&idx=1&sn=34c920712e3c20f068913041d024c9bb&chksm=b181997686f610600866ea3a94b21cbd2625d55551cd8d875e6100129c72eb057e28a63d163f#rd
如有侵权请联系:admin#unsafe.sh