能力值:
( LV2,RANK:10 )
|
-
-
2 楼
能够写的这么详细, 确实 花了不少时间, 我估计遇到问题 , 4个小时, 写成文章 4个小时, 特别折腾人. 楼主的 如此的执着精神令小生佩服...
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
你这不如在内核隐藏frida的痕迹啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
感谢分析,新手学习
|
能力值:
( LV5,RANK:73 )
|
-
-
5 楼
app是哪个版本的?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
hacker521
你这不如在内核隐藏frida的痕迹啊?
我也想要学习, 但是ebpf 课程中, r0yuse 佬, 提到过, ksu 逻辑 和 apatch 中的内核模块实现. 想要青椒高手, 探讨,能加wchat ,么?
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
calleng
能够写的这么详细, 确实 花了不少时间, 我估计遇到问题 , 4个小时, 写成文章 4个小时, 特别折腾人. 楼主的 如此的执着精神令小生佩服...[em_003]
这个我弄了好多天,菜鸟一枚,想学习逆向的东西。
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
hacker521
你这不如在内核隐藏frida的痕迹啊?
不知道怎么弄,有什么切入点吗? 或者知识点是什么? 我找找。 谢谢
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
calleng
我也想要学习, 但是ebpf 课程中, r0yuse 佬, 提到过, ksu 逻辑 和 apatch 中的内核模块实现. 想要青椒高手, 探讨,能加wchat ,么?
电报 @lpy0001
|
能力值:
( LV3,RANK:20 )
|
-
-
11 楼
深圳PD Labs
这贴思路清晰、实战痕迹很重,`Java.perform()`被秒退的问题基本摸到了关键点:`/proc/self/status` 和 `maps` 的检测只是外围,核心还是 `libmsaoaidse ...
感谢告知,等我学习好,在找相关工作吧, 现在是个菜鸟,完成不了任何APP的逆向, 想想就可悲,已经学习了近半年了, 还是菜鸟水平。
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
深圳PD Labs
这贴思路清晰、实战痕迹很重,`Java.perform()`被秒退的问题基本摸到了关键点:`/proc/self/status` 和 `maps` 的检测只是外围,核心还是 `libmsaoaidse ...
function hook_native_addr(secmodule, addr) {
if (!secmodule) {
console.error("[-] libmsaoaidsec.so module not found");
return;
}
var point = secmodule.base.add(addr);
var startAddr = secmodule.base;
var endAddr = secmodule.base.add(secmodule.size);
Interceptor.attach(point,{
onEnter:function (args){
Stalker.follow(Process.getCurrentThreadId(), {
transform: function (iterator) {
var instruction = iterator.next();
do{
if (instruction === null || instruction.address === null) {
continue;
}
if (instruction.address >= startAddr && instruction.address < endAddr) {
console.log(instruction.address.sub(secmodule.base) + ":" + instruction);
}
iterator.keep();
} while ((instruction = iterator.next()) !== null);
}
});
},
onLeave:function(retval){
}
});
}
var firstHandle = false;
function locate_init() {
let secmodule = null
Interceptor.attach(Module.findExportByName(null, "__system_property_get"),
{
// _system_property_get("ro.build.version.sdk", v1);
onEnter: function (args) {
secmodule = Process.findModuleByName("libmsaoaidsec.so")
var name = args[0];
if (name !== undefined && name != null) {
name = ptr(name).readCString();
if (name.indexOf("ro.build.version.sdk") >= 0) {
console.log("locate_init [+] 目标库已加载,开始Hook... secmodule base: " + secmodule.base);
if (!firstHandle) {
hook_native_addr(secmodule, 0x26334);
firstHandle = true;
}
}
}
}
}
);
} 发现一个更不知道的方法, 只要在里面加入Stalker.follow 就可以过java hook ,好奇怪。 使用 frida -H xxxxxx -l xxxx.js -f xxxx 启动后,等会app会被杀死,但是可以手动在手机上打开app, 此时app 就可以被 java hook了。 但是10%的概率会卡死。 原因不明。 我在过广告的过程中发现的,弄了2周了,还是过不了广告,发现应该是在native层加入的广告。 但是没找到JNI的调用,理论上,从界面上点击后,应该会有JNI的调用,在View层将广告的视频流写入到同一个SurfaceView, 但是没找到对应的入口。好多次想放弃了,还是坚持下来了, 不过还是没达到目的。 再研究研究吧~ 给自己加油-小菜鸟。
|
能力值:
( LV1,RANK:0 )
|
-
-
13 楼
respect!!! 我之前也研究过这个库,当时只专注于native层对frida注入的检测,得出结论如下: 1、当主线程对libmsaoaidsec.so库完成链接、重定位后,在constructor函数会通过dlsym查找pthread_create创建子线程进行间歇性检查。 2、libmsaoaidsec库实现了字符串特征进行检测(如下图)包括、线程名称、文件fd、文件名称(/data/local/tmp)、TracerPid、等等。 我以为所有的检测工作都是在子线程中进行的,但是当我通过spawn方式进行注入魔改版的frida(基本去除了所有的字符串特征),libmsaoaidsec会在主线程中触发崩溃机制,libmsaoaidsec在不断进化,我测试的版本已经不能仅仅通过hook pthread_create进行绕过了,主线程也会检测frida。 此外,java层的hook检测我也没搞清是怎么回事,不只是Java.perform,当我使用Java.use也会被检测到,不知道是什么检测方法,看了许多帖子,并没有找到相关的研究,问了AI也没头绪,就暂时搁置了。 楼主加油,看好你! 
|
能力值:
( LV1,RANK:0 )
|
-
-
14 楼
我刚刚测试了一下,当使用Java层的hook,libart.so的PrettyMethod会被frida-agent hook,因为inline hook就是将目标函数入口的指令替换成了跳转到自定义代码的跳转指令(arm64下为BLR),所以,通过检测PrettyMethod入口的字节码就知道是否使用了Java Hook。
楼主可以试试执shell命令 readelf /apex/com.android.art/lib64/libart.so -s | grep PrettyMethod 记录一下PrettyMethod函数在原始libart.so文件中,入口的指令。 再注入frida,然后随意使用一个Java Hook,再查看内存中libart.so库的PrettyMethod函数的入口指令。
最后于 2025-6-8 02:48
被null0bj编辑
,原因:
|
能力值:
( LV3,RANK:20 )
|
-
-
15 楼
null0bj
我刚刚测试了一下,当使用Java层的hook,libart.so的PrettyMethod会被frida-agent hook,因为inline hook就是将目标函数入口的指令替换成了跳转到自定义代 ...
好的,我尝试一下看看, 感谢提供的思路。 看来还得学习一下inline hook的原理
|
能力值:
( LV3,RANK:20 )
|
-
-
16 楼
null0bj
respect!!!我之前也研究过这个库,当时只专注于native层对frida注入的检测,得出结论如下:1、当主线程对libmsaoaidsec.so库完成链接、重定位后,在constructor函 ...
一起加油吧
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
写的很好很细 切实可行 学习下
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
很好的分析啊
|
能力值:
( LV1,RANK:0 )
|
-
-
19 楼
null0bj
我刚刚测试了一下,当使用Java层的hook,libart.so的PrettyMethod会被frida-agent hook,因为inline hook就是将目标函数入口的指令替换成了跳转到自定义代 ...
怎么过这个检测
|
能力值:
( LV1,RANK:0 )
|
-
-
20 楼
mb_pnlabahd
怎么过这个检测
对PrettyMethod的检测一般利用子线程轮询检测。所以,在主线程使用pthread_create clone子线程的时候可以知道子线程所执行的偏移地址,将该偏移地址放一条ret指令即可。
|
|
|