关于java:xhs小红书shield算法逆向分析记录

71次阅读

共计 1248 个字符,预计需要花费 4 分钟才能阅读完成。


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

正文完
 0