51

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

 3 years ago
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.
neoserver,ios ssh client

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

发布于 7 月 9 日


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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK