xhs小红书shield算法逆向分析记录
source link: https://segmentfault.com/a/1190000040324555
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
xhs小红书shield算法逆向分析记录
小红书的shield参数的算法计算是在libshield.so中,所以我们要从这个so文件分析。
先抓个包看看。
算法源码截图在最下方...可以作为参考!
用ida加载libshield.so文件,通过Jni_load 找到函数偏移
其中sub_2e1f4 是对app的签名进行验证,直接nop,sub_736B0 是通过jni调用java的okhttp类的一些方法。sub_7306 是动态注册的函数。
!
找到地址off_8E0D0,各个函数地址如图所示。
!
分析各个函数的作用
initializeNative函数
![上传中...]
initializeNative函数是对jni调用java方法的一些类进行初始化操作,建议对变量进行改名,类用c_开头,方法用m_开头便于后续分析。
initialize 函数
initialize 函数是从s.xml文件中读取key为main_hmac的值value。
把读取的value使用sub_AAAC函数进行传参, sub_AAAC 函数的主要功能是对value和device_id 进行aes得到一个key,把key存入ptr + 0x28C 处, 如果sub_AAAC返回值为1,则使用新版的shield算法,反之则使用旧版的s1-s12算法。
intercept函数
intercept 是shield算法的逻辑部分,
通过ptr+650的值来判断使用哪种算法,sub_ABB8为新版,sub_AD14为旧版
!
sub_1fbb0函数对sub_AAAC 函数的key进行异或0x36和0x5c,这里大胆猜测shield使用的是hmacmd5算法,sub_1fbb0是对key进行初始化,sub_1fc52是对url进行md5,sub_1fc7e是对前面两步进行收尾工作计算出真正的shield。
像这种a1+12 是一个函数指针我是通过动态调试得到函数地址。使用的是魔改的md5。
AES Decrypt方法
AES Encrypt方法
在加解密过程中,加密用Tbox1-4,解密用Tbox5-8,前9轮用T,最后一轮用Sbox。
至此initialize函数分析完成。
接下来看看intercept函数,经过调试得知程序走这个分支
首先看105B0这个函数,该函数主要对请求数据进行MD5运算。
MD5 Update函数
进入sub_404E8函数,初始化结构,保存信息,这里静态没看出什么来,动态调调看吧
继续对数据进行处理,看字符串相关信息猜了个大概函数功能
对处理完成后的数据进行加密。
初始化加密表
加密函数,就简单的异或操作
对加密后的数据进行处理,根据相关字符串猜测,具体数据调试看。
最后对处理完成的数据base64编码并拼接XY就是shield的值了。
最终获得新版的shield,算法还原如下,部分代码比较敏感,未放出来
接触过shield算法的大概都知道,它分为s1-s12,这里就出现了很明显的特征
关于shield的分析到此为止,希望各位朋友把这篇帖子能当做一个参考吧,算法源码欢迎私信交流或者在评论区留下你的疑问!
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK