咨询发布 发表于 2026-2-20 02:06:19

从零搭Android动态分析沙箱:Frida+objection+API监控

为什么自己搭

公司最近要做 App 自动化合规检测,市面上的沙箱要么贵要么不开放,干脆自己搭了一套。底子是 Frida + objection,外加一层 API 调用日志收集,跑了大半年挺稳的,记下来给后来人。


[*]宿主:Ubuntu 22.04 服务器一台,64G 内存 + 一张 P2200 显卡(跑模拟器图形)
[*]模拟器:Android Studio AVD,Android 11/13 两个镜像,root 镜像走 Genymotion
[*]框架:Frida 17.x server 端 push 到 /data/local/tmp,PC 端 pip 装新版 frida-tools


架构

沙箱分三层:调度层用 Celery 把 APK 队列任务丢给 worker,分析层在模拟器里 hook 一切目标,存储层把 trace 落到 PostgreSQL + Elasticsearch 双写,前端用 Kibana 看 API 调用关系图。整套部署用 docker-compose 起,单机能跑三路并发。

核心 hook


// 通用敏感 API 调用记录
Java.perform(function(){
    var CL = Java.use('android.content.ContentResolver');
    CL.query.overload('android.net.Uri','[Ljava.lang.String;','java.lang.String','[Ljava.lang.String;','java.lang.String').implementation = function(uri, p, s, a, so){
      send({api:'ContentResolver.query', uri: uri.toString()});
      return this.query(uri, p, s, a, so);
    };
    var Loc = Java.use('android.location.LocationManager');
    Loc.getLastKnownLocation.implementation = function(p){
      var l = this.getLastKnownLocation(p);
      send({api:'LocationManager.getLastKnownLocation', provider:p, lat:l?l.getLatitude():null});
      return l;
    };
});


几个坑

第一,Android 14 之后 SELinux 对 /data/local/tmp 写权限收紧,frida-server 要改名才能躲过基础检测;第二,objection 默认 hook 表对加固 App 不全,碰到梆梆、爱加密要补 FSExplorer 手动 dump;第三,ES 索引要按 api 字段做 keyword,否则前端聚合查询会 OOM。

https://www.metk.cn/img/posts/android_dynamic_sandbox.jpg

关山杂谈 发表于 2026-2-20 04:03:41

这篇干货,比那些只有命令没有解释的强太多了。

野渡48 发表于 2026-2-20 07:42:40

实战出来的经验和文档里写的完全是两码事,楼主这个很真实。

浅夏杂谈 发表于 2026-2-20 15:00:39

讲得挺细的,不过我建议加一句免责,这东西容易被拿去做坏事。

过期奶北岛 发表于 2026-2-21 01:57:38

试了下你说的第二种方法,成功率更高,推荐。

寒山散记 发表于 2026-2-21 16:33:37

我这边环境是Mac,有些步骤要调整,回头补个差异说明。

林间 发表于 2026-2-22 10:48:36

这个技术本身是中性工具,关键看用途,楼主的态度挺正的。

归鸟寻梅 发表于 2026-2-23 08:42:35

想请教一下,你用的这个版本是哪个?我这边跑起来报错。

有点困白露 发表于 2026-2-24 10:15:34

收藏了,最近正好要搞这块,省了不少翻文档的时间。

寒山观星 发表于 2026-2-25 15:27:33

感谢分享,之前一直卡在这个点,看完豁然开朗。
页: [1] 2 3 4 5 6
查看完整版本: 从零搭Android动态分析沙箱:Frida+objection+API监控