小红书的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的剖析到此为止,心愿各位朋友把这篇帖子能当做一个参考吧,算法源码欢送私信交换或者在评论区留下你的疑难!