-
-
[原创]某国外小众社交软件网络协议分析
-
发表于:
2023-4-30 15:55
8210
-
首先,从apk提取dex文件,然后利用dex2jar将dex转化为jar,拖到jd-gui后,发现有如下几个可疑点类:
1 com.azus.android.tcplogin.CryptUtil.rsaEncrypt
2 com.azus.android.tcplogin.CryptUtil.aesDecrypt
3 com.azus.android.tcplogin.CryptUtil.aesEncrypt
4 com.azus.android.tcplogin.CryptUtil.getRSAPublic
使用XPOSED框架,编写hook代码并输出日志(或者写入文件),同时用wireshark抓包,最终得出如下加解密逻辑:
(1)客户端生成一个随机16位uuid(在com.instanza.cocovoice.bizlogicservice.b,com.instanza.cocovoice.bizlogicservice.impl,com.instanza.cocovoice.httpservice.d等类中均有此接口)
(2)客户端从安装程序的assets目录下读取rsapubkey.dat文件,并把文件内容当做rsa公钥,并加密上述16字节的uuid
提取到Rsa公钥为:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv6wVtSeHU8gJWchcFfe4
qu9JNqDrPLBSfDwZ4NW9f+Qp5OI3FAsd19r5FM95wzdTPb6k/tTDnsPkdnTiEwTI
28PYffP/87BIraQrcgCWmbpugZ0l892LFUYweepp/R54OAlTaPLHMcaHxLnWX3Fq
wghOAjCNvAnXC3TWNJJnlHJ5e32n22nPMdCMNzwXV+zHHP+0sJyBQJd8yoBFFLh+
AZwy/F1xFkAWl9r3emdKhSIpPpT4nTEVD1ieGnMq5DxGPNpihP6jbZOI3UEwOTki
wpdOdR5j9lfe5tRis7pGyPHj+IOHzXRsZGC4r5xEhOKiCOckWJPVgCJWS3ruy5xJ
nwIDAQAB
-----END PUBLIC KEY-----
(3)构造登录包。此数据包分成三个部分:数据包头;ras公钥加密后的aes密钥(即16字节的uuid);客户端用aes算法和aes密钥(uuid)加密后的用户登录信息(登录信息中也包含uuid)。
此程序的服务器端口是tcp 1088(有时也会使用443等端口),登录数据包如下所示:
可以看出,此数据包第20字节开始是”qauth”字符串。
整个数据包可分为如下几个部分:从开头到12 80 02的部分是第一部分,从12 80 02到1a d0 02是第二部分,从1a d0 02开始到20 01 2a的是第三部分。剩下的包尾的是第4部分。第一部分字段暂时未详细研究;第二部分是用rsa公钥加密uuid后的数据值;第三部分是用aes算法和密钥uuid加密后的客户端登录信息;第四部分是用户登录信息段中的deviceid字段和publickey的md5值。整个结构应该是tlv结构来表示的,具体的的字段含义未分析。
以下是加密前的客户登录信息数据,其中划红线的正好是aes密钥,数据包解密之后,可以用本字段验证aes加解密的结果是够正确。
如此来说,本程序的破解流程应该是,接收到登录数据包后,先用服务器端的rsa私钥解密出上图第2部分的值,解密结果是一个aes密钥,然后用此aes密钥解密上图中第二部分的登录信息,至此数据包解密完毕。另外值得一提的是,该aes密钥是本次用户和服务器之间所有的文本、语音、图片等通信数据的密钥。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2024-3-20 15:11
被satadrover编辑
,原因: