-
-
[原创] X-Young认证协议分析
-
发表于:
2019-9-5 12:32
5904
-
此次分析基于Mac端
这种上网方式一直需要连着网线而且使用它自己定制的软件,只要网线一断就没网了。然而无线AP的网非常非常慢,于是想着逆向PC端的网络协议,将它移植到路由器上,这样就方便很多。
软件使用的是http协议,没有启用https。直接wireshark抓取一下重要的http协议。
认证过程分为下面几个步骤:
下面看一个各个请求中的字段。
第一个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。
最后要注意的是几个重要的点:
整个协议挺简单的,不复杂。注意就是在测试的时候每个参数应该大致知道他的由来,不然模拟报文发送的时候不能正常模拟,又得花费很长时间去查找出错的原因。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课