xhs小红书shield算法逆向分析记录

小红书的shield参数的算法计算是在libshield.so中,所以我们要从这个so文件分析。
先抓个包看看。

算法源码截图在最下方...可以作为参考!

用ida加载libshield.so文件,通过Jni_load 找到函数偏移


image.png

其中sub_2e1f4 是对app的签名进行验证,直接nop,sub_736B0 是通过jni调用java的okhttp类的一些方法。sub_7306 是动态注册的函数。
!
image.png

找到地址off_8E0D0,各个函数地址如图所示。
!
image.png

分析各个函数的作用
initializeNative函数
![上传中...]
image.png

image.png

initializeNative函数是对jni调用java方法的一些类进行初始化操作,建议对变量进行改名,类用c_开头,方法用m_开头便于后续分析。

initialize 函数
image.png

initialize 函数是从s.xml文件中读取key为main_hmac的值value。
image.png

把读取的value使用sub_AAAC函数进行传参, sub_AAAC 函数的主要功能是对value和device_id 进行aes得到一个key,把key存入ptr + 0x28C 处, 如果sub_AAAC返回值为1,则使用新版的shield算法,反之则使用旧版的s1-s12算法。

intercept函数
intercept 是shield算法的逻辑部分,
image.png

通过ptr+650的值来判断使用哪种算法,sub_ABB8为新版,sub_AD14为旧版
!
image.png

sub_1fbb0函数对sub_AAAC 函数的key进行异或0x36和0x5c,这里大胆猜测shield使用的是hmacmd5算法,sub_1fbb0是对key进行初始化,sub_1fc52是对url进行md5,sub_1fc7e是对前面两步进行收尾工作计算出真正的shield。
image.png

像这种a1+12 是一个函数指针我是通过动态调试得到函数地址。使用的是魔改的md5。

AES Decrypt方法
![image.png

AES Encrypt方法
image.png

在加解密过程中,加密用Tbox1-4,解密用Tbox5-8,前9轮用T,最后一轮用Sbox。
至此initialize函数分析完成。

接下来看看intercept函数,经过调试得知程序走这个分支
image.png

首先看105B0这个函数,该函数主要对请求数据进行MD5运算。
image.png

MD5 Update函数
image.png

进入sub_404E8函数,初始化结构,保存信息,这里静态没看出什么来,动态调调看吧

image.png

继续对数据进行处理,看字符串相关信息猜了个大概函数功能
image.png

对处理完成后的数据进行加密。
初始化加密表
image.png

加密函数,就简单的异或操作
![image.png

对加密后的数据进行处理,根据相关字符串猜测,具体数据调试看。

image.png

最后对处理完成的数据base64编码并拼接XY就是shield的值了。
image.png

image.png

最终获得新版的shield,算法还原如下,部分代码比较敏感,未放出来

image.png

接触过shield算法的大概都知道,它分为s1-s12,这里就出现了很明显的特征

关于shield的分析到此为止,希望各位朋友把这篇帖子能当做一个参考吧,算法源码欢迎私信交流或者在评论区留下你的疑问!

花了很大精力和时间 ,把小红书最新版7.6版本shield转成了python源代码。
image.png

image.png

欢迎一起交流学习;ping0206guo

你可能感兴趣的:(程序员)