360通讯录网络加密协议分析
分析过程记录
通过检索关键字,在Java层定位出获取密钥所在的代码段:
对libmobilesafe360-jni-530.2.so进行分析,发现导出表下只有1个JNI_OnLoad方法。这里实际是完成了本地函数的注册,其中R2寄存器的值是指向JNINativeMethod结构体的指针。以getInt方法为例,这个native方法对应sub_2A538本地函数。
通过so动态调试的手段,解密”70>@|:CF0z€.97:M0z|ovyrMN6marisa9ExceptionE”字符串获取对应密钥”*#13o-69”。同理,获取其他密钥。 其中,sKey3是用来加密联网上传的参数的,sKey1、sKey2则是用来加密上传的数据部分。。
DES密钥 | 值 |
---|---|
sKey1 | *#13o-69 |
sKey2 | #ms!,*-@ |
sKey3 | #mobile@ |
联网上传的数据保存在com/qihoo360/contacts/backup/http/HttpHandler;->mPostData变量中,追踪该数据的写入来源,中间用到了较多的接口引用,最终可以定位到abm类下的p方法,其中data数据结构所示:
1 | Struct mPostData{ |
抽取上传的数据部分中的数据段部分,这里使用的DES加密算法。需要注意的是,这里的密钥会根据实际传入的布尔类型参数来决定是sKey1还是sKey2。
这里自己动手实现一个简单的DES解密算法,前后用sKey1、sKey2来进行解密操作。然后在这个过程中,发现当sKey2作为密钥时,解密后文件均存在固定的文件头,这里怀疑是一个特殊的魔术字,简单查阅了相关资料后,发现其是一个gzip格式的压缩文件,直接解压即可拿到上传数据。。
------ 本文结束 感谢阅读 ------