查看: 53|回复: 52

[相关教程] 从零搭Android动态分析沙箱:Frida+objection+API监控

[复制链接]

96

主题

5

回帖

951

积分

UID
2
贡献
9 点
钻石
7 个
C币
993 个
发表于 2026-2-20 02:06:19 | 显示全部楼层 |阅读模式
为什么自己搭

公司最近要做 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
  1. // 通用敏感 API 调用记录
  2. Java.perform(function(){
  3.     var CL = Java.use('android.content.ContentResolver');
  4.     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){
  5.         send({api:'ContentResolver.query', uri: uri.toString()});
  6.         return this.query(uri, p, s, a, so);
  7.     };
  8.     var Loc = Java.use('android.location.LocationManager');
  9.     Loc.getLastKnownLocation.implementation = function(p){
  10.         var l = this.getLastKnownLocation(p);
  11.         send({api:'LocationManager.getLastKnownLocation', provider:p, lat:l?l.getLatitude():null});
  12.         return l;
  13.     };
  14. });
复制代码

几个坑

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

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
回复

使用道具 举报

0

主题

365

回帖

365

积分

UID
168082
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-2-20 04:03:41 | 显示全部楼层
这篇干货,比那些只有命令没有解释的强太多了。
回复

使用道具 举报

0

主题

366

回帖

61

积分

UID
172788
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-20 07:42:40 | 显示全部楼层
实战出来的经验和文档里写的完全是两码事,楼主这个很真实。
回复

使用道具 举报

0

主题

399

回帖

0

积分

UID
899234
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-20 15:00:39 | 显示全部楼层
讲得挺细的,不过我建议加一句免责,这东西容易被拿去做坏事。
回复

使用道具 举报

0

主题

378

回帖

48

积分

UID
129737
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-21 01:57:38 | 显示全部楼层
试了下你说的第二种方法,成功率更高,推荐。
回复

使用道具 举报

0

主题

359

回帖

0

积分

UID
908569
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-21 16:33:37 | 显示全部楼层
我这边环境是Mac,有些步骤要调整,回头补个差异说明。
回复

使用道具 举报

0

主题

376

回帖

49

积分

UID
887370
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-22 10:48:36 | 显示全部楼层
这个技术本身是中性工具,关键看用途,楼主的态度挺正的。
回复

使用道具 举报

0

主题

374

回帖

374

积分

UID
762116
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-2-23 08:42:35 | 显示全部楼层
想请教一下,你用的这个版本是哪个?我这边跑起来报错。
回复

使用道具 举报

0

主题

347

回帖

347

积分

UID
211581
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-2-24 10:15:34 | 显示全部楼层
收藏了,最近正好要搞这块,省了不少翻文档的时间。
回复

使用道具 举报

0

主题

347

回帖

39

积分

UID
269140
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-2-25 15:27:33 | 显示全部楼层
感谢分享,之前一直卡在这个点,看完豁然开朗。
回复

使用道具 举报

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

QQ客服返回顶部