小红书shield分析转发

预备工具: ida7.5, piexl 手机,jadx,jeb

某书是有TracerPid反调试,先过反调试,这有两个方法
1.Frida hook fopen 过滤
2.修改安卓源码去掉TracerPid
1.Frida hook脚本
function anti_fgets() {
var fgetsPtr = Module.findExportByName(“libc.so”, “fgets”);
var fgets = new NativeFunction(fgetsPtr, ‘pointer’, [‘pointer’, ‘int’, ‘pointer’]);
Interceptor.replace(fgetsPtr, new NativeCallback(function (buffer, size, fp) {
var retval = fgets(buffer, size, fp);
var bufstr = Memory.readUtf8String(buffer);
// console.log(bufstr); //此代码由我添加,打印TracerPid的值
if (bufstr.indexOf(“TracerPid:”) > -1) {
console.log(bufstr); //此代码由我添加,打印TracerPid的值
Memory.writeUtf8String(buffer, “TracerPid:\t0”);
}
return retval;
}, ‘pointer’, [‘pointer’, ‘int’, ‘pointer’]));
}
简单易操,frida -f 选项须使用14.0.0版本,高版本会出错!
2.修改安卓源码
自行百度,源码编译稍微耗时,而且安卓驱动也是一个问题。
源码编译连接
https://www.jianshu.com/p/baf7a71446e0
https://blog.csdn.net/zz531987464/article/details/94163954
预备工作完成,用ida打卡libshield.So 跳到okhttp回调的一个函数

经过查看这个函数在这个地方

有一个明显的stl 字符串加的操作,那么shield大概率出现在这个地方附近,初步分析完成。
要计算sign,那肯定得先获取url,然后各种骚加密,最后返回加密后结果,
现在我们找一下在哪个地方从java层获取url,
我们看到这个地方,传入了jnievn指针

跟进这个函数,如下

这里获取了一个数组的内容,是不是我们的url呢?
用ida打断点或者fridahook输出验证一下,确实是url,这里注意那个encode_ur函数调用了个寂寞。这个地方初步加密,然后这个函数返回后,后面的函数把结果构造在另一个结构体里面,就是这个函数

构造完成后,用这个函数

把设备id之类的信息合并在一起,构造一个新结构体

这些数据构造完成后,就生成shield

加密部分用了hmac md5,和aes,
这个地方传入了一个key,每个设备都不一样

这个key在这个函数生成:

这里面传入的了一个服务器上获取的xy_ter字段~ 这里照抠就ok~

技术交流 telegram @NpProblem

————————————————
版权声明:本文为CSDN博主「程序员神马」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sddvfdfv323/article/details/116540879

上一篇:用 C 语言开发一门编程语言 — 交互式 Shell


下一篇:js实现表单序列化的两种方法。