首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
Android安全
发新帖
2
1
[原创]脱离pc开发Albatross可用的插件教程
发表于: 2025-10-1 19:34
2091
[原创]脱离pc开发Albatross可用的插件教程
WanQing
2025-10-1 19:34
2091
# Albatross 插件开发文档 ## 相关项目 - <a href="elink@6ccK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6m8L8r3u0S2N6s2u0G2M7%4y4t1L8$3!0C8i4K6u0r3b7h3I4T1j5i4c8J5L8%4y4K6e0h3q4F1j5h3N6W2M7R3`.`.">AlbatrossManager</a> - <a href="elink@07cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6m8L8r3u0S2N6s2u0G2M7%4y4t1L8$3!0C8i4K6u0r3d9r3W2V1k6f1q4H3M7l9`.`.">HideApp</a> ## 与 AlbatrossServer 的区别 | 特性 | AlbatrossManager | AlbatrossServer | |------|------------------|-----------------| | 运行环境 | 脱离 PC 独立运行 | 需电脑控制 | | 适用场景 | 个人玩家(广告拦截、刷步数、抢红包等) | 群控采集 | | 开发状态 | 测试版 | 长期使用中 | | 稳定性 | 不保证稳定 | 有保证 | | 兼容性 | 支持其的插件在 Server 上一定可用 | 反之不成立 | | 开发要求 | 需严格按照规范开发 | - | ## 概览 Albatross 插件分为两种类型,均继承 `qing.albatross.agent.AlbatrossPlugin`,通过 Albatross 的注入与 RPC 机制被加载与管理: - **应用态插件(App Scope)**:注入到目标 App 进程执行(示例:inapp) - **系统态插件(System Scope)**:注入到 system_server 或以系统 UID 范围生效(示例:insystem) ## 目录与构建 - 每个插件是独立的 Android Application 模块(构建 APK/DEX 供注入) - 典型依赖(仅编译期,运行时由宿主/Agent 提供): ```gradle dependencies { compileOnly(files("lib/albatross.jar")) } ``` ## 插件基类与生命周期 自定义插件需继承 `AlbatrossPlugin`,常用回调方法: | 方法 | 说明 | |------|------| | `beforeMakeApplication()` | 进程早期(Application 尚未创建) | | `load()` | 插件加载阶段 | | `parseParams(String argString, int flags)` | 解析管理端下发的参数(强烈建议可向后兼容) | | `onConfigChange(String config, int flags)` | 运行时更新配置 | | `beforeApplicationCreate(Application application)` | `Application.onCreate` 前,适合初始化 Hook | | `afterApplicationCreate(Application application)` | `Application.onCreate` 后 | | `onAttachSystem(Application application)` | 系统态附着(仅系统插件) | ### 应用态插件示例(inapp) 解析包名列表并在 `beforeApplicationCreate` 初始化 Hook: ```java public class HideAppPlugin extends AlbatrossPlugin { public static List<String> hideApps; public HideAppPlugin(String libName, String argString, int flags) { super(libName, argString, flags); hideApps = new ArrayList<>(); } @Override public boolean parseParams(String argString, int flags) { hideApps.clear(); if (argString != null) { String[] packages = argString.split(","); Collections.addAll(hideApps, packages); } return true; } @Override public void beforeApplicationCreate(Application application) { String targetPackage = application.getPackageName(); hideApps.remove(targetPackage); // 避免影响宿主自身 IPackageManagerH.init(); // 初始化 Hook } } ``` ### 系统态插件示例(insystem) 解析规则并在系统附着时安装 Hook: ```java public class HideAppSystemPlugin extends AlbatrossPlugin { public static Map<Integer, List<String>> hideRules = new HashMap<>(); @Override public boolean parseParams(String hideRulesStr, int flags) { hideRules.clear(); if (hideRulesStr != null) { Application application = Albatross.currentApplication(); PackageManager pm = application.getPackageManager(); String[] entries = hideRulesStr.split("\\|"); // pkg:rule1,rule2|pkg2:ruleA for (String e : entries) { String[] parts = e.split(":"); if (parts.length != 2) continue; String pkg = parts[0]; try { int uid = pm.getPackageInfo(pkg, 0).applicationInfo.uid; List<String> rules = new ArrayList<>(); for (String r : parts[1].split(",")) if (!r.isEmpty()) rules.add(r); hideRules.put(uid, rules); } catch (PackageManager.NameNotFoundException ignore) {} } } return true; } @Override public void onAttachSystem(Application application) { if (!PackageManagerServiceH.initHook()) { Albatross.log("init hook err"); } } } ``` ## 配置 Activity 与参数协议 插件通常提供一个"配置 Activity"以便采集用户配置,并通过 `setResult(RESULT_OK, intent)` 返回以下关键数据: - `plugin_class`:插件实现类全名(供管理端/Agent 加载) - `plugin_params`:文本参数(插件自定义格式) - `plugin_flags`:标志(插件自定义如何解析) ### 应用态示例(inapp) 返回 `HideAppPlugin` 与以逗号分隔的包名串: ```java // 结果回传(节选) result.putExtra("plugin_params", "com.a.x,com.b.y"); result.putExtra("plugin_class", this.getClass().getName().replace("PluginConfigActivity", "HideAppPlugin")); setResult(RESULT_OK, result); ``` ### 系统态示例(insystem) 返回 `HideAppSystemPlugin` 与规则串 `pkgA:rule1,rule2|pkgB:ruleX`: ```java StringBuilder rules = new StringBuilder(); // 组装为 pkg:rule1,rule2|pkg2:ruleA result.putExtra("plugin_params", rules.toString()); result.putExtra("plugin_class", this.getClass().getName().replace("PluginConfigActivity", "HideAppSystemPlugin")); setResult(RESULT_OK, result); ``` **建议**: - 设计 `plugin_params` 时,保持向后兼容与健壮解析;必要时添加版本前缀如 `v1|...` - UI 可支持"显示系统应用"开关、全选/反选、详情配置等;配置即时落库,返回时再汇总 ## 管理端(AlbatrossManager)职责 - 插件列表:展示、启用/禁用、删除、详情 - 启动插件配置 Activity,接收 `plugin_class` + `plugin_params` + `plugin_flags` - 通过连接器调用注入/加载 API,将插件部署到目标进程或系统 ## 注入与通信(连接器) 管理端使用 `PluginConnection` 完成与 AlbatrossServer 的会话,主要方法: - 建立连接并设置 Agent:`create(serverPath, secondLib, appAgentDex, systemAgentDex)` - 注入目标 App 并加载插件:`doInject(targetPkg, pluginDex, pluginClass, pluginParams, flags)` - 加载系统态插件:`loadSystemPlugin(pluginDex, pluginClass, pluginParams, flags)` - 规则维度操作:`addPluginRule(pluginId, pkg)` / `deletePluginRule(pluginId, pkg)`(UID 维度) ### 应用态典型流程 1. 启动配置 Activity,拿到 `plugin_class` 与 `plugin_params` 2. 调用 `doInject(targetPkg, pluginDex, plugin_class, plugin_params, flags)` 或在 app 重启时注入 3. 插件在目标进程中执行 `parseParams`、`beforeApplicationCreate` 等完成生效 ### 系统态典型流程 1. 启动配置 Activity,拿到 `plugin_class` 与 `plugin_params` 2. 调用 `loadSystemPlugin(pluginDex, plugin_class, plugin_params, flags)` 3. 插件在 `onAttachSystem` 完成系统服务层 Hook 并按 UID 区分 app ## Manifest 配置(必填) 为便于 AlbatrossManager 识别与跳转插件配置页,需要在插件的 `AndroidManifest.xml` 中添加 meta-data 与配置页 `intent-filter`。 **示例**(应用态 hide_app,系统态同理): ```xml <application android:label="HideApp" android:icon="@drawable/ic_launcher"> <!-- 标记为 Albatross 可识别插件 --> <meta-data android:name="albatross_plugin" android:value="true" /> <!-- 插件显示名称 --> <meta-data android:name="plugin_name" android:value="HideApp" /> <!-- 插件实现类,用于注入加载 --> <meta-data android:name="plugin_class" android:value="qing.albatross.plugin.app.HideAppPlugin" /> <!-- 插件描述与作者(可用于管理端展示) --> <meta-data android:name="plugin_description" android:value="隐藏指定app,只对app生效。" /> <meta-data android:name="plugin_author" android:value="QingWan" /> <!-- 可选:插件支持范围(示例),按需启用 <meta-data android:name="plugin_support" android:value="pkg1,pkg2" /> --> <!-- 插件配置页面,必须包含 qing.albatross.PluginConfig 动作 --> <activity android:name="qing.albatross.plugin.app.PluginConfigActivity" android:exported="true"> <intent-filter> <action android:name="qing.albatross.PluginConfig" /> </intent-filter> </activity> </application> ``` **注意**: - `albatross_plugin=true` 是被扫描识别为插件的开关 - `plugin_class` 必须与插件主类完全限定名一致(如 `HideAppPlugin`/`HideAppSystemPlugin`) - 配置页 `intent-filter` 必须包含 `qing.albatross.PluginConfig`,否则管理端无法跳转到配置页面 ## 参数协议约定(当前示例) ### 应用态(inapp) - `plugin_class`:`qing.albatross.plugin.app.HideAppPlugin` - `plugin_params`:`pkgA,pkgB,pkgC` - 要点:插件端会排除当前宿主包名,避免误伤自身 ### 系统态(insystem) - `plugin_class`:`qing.albatross.plugin.sys.HideAppSystemPlugin` - `plugin_params`:`pkgA:rule1,rule2|pkgB:ruleX` - 要点:以 UID 为 key 存规则,用于区分 app ## 开发 Checklist(新插件) 1. 新建 Android Application 模块,设置 `namespace` 与 `applicationId` 2. 依赖添加:`compileOnly(lib/albatross.jar)` 3. 编写 `YourPlugin extends AlbatrossPlugin`,至少实现: - `parseParams`:定义并解析你的参数协议 - `beforeApplicationCreate` / `onAttachSystem`:初始化 Hook/策略 4. 提供配置 Activity: - 采集配置并封装为 `plugin_params` - 回传 `plugin_class` 与 `plugin_params` 5. 在管理端可见:确保 APK/DEX 被 Manager 识别(安装或登记到数据库/列表) 6. 通过 Manager 配置生效的 app,验证插件是否生效 ## 注意事项 - 参数协议尽量简洁稳定,解析时对异常与空值做兜底 - 应用态谨防影响宿主自身(建议排除 `currentApplication().getPackageName()`) - 系统态以 UID 维度操作,适配多进程/多用户场景时请注意 - 架构/ABI 与目标进程匹配;必要时为 32/64 位分别提供产物 - 保持日志可观测性(`Albatross.log`)以便排查 ## 参考文件 - 插件配置(应用态):<a href="elink@30bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6m8L8r3u0S2N6s2u0G2M7%4y4t1L8$3!0C8i4K6u0r3d9r3W2V1k6f1q4H3M7q4)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5h3W2F1i4K6u0r3K9h3&6S2M7s2m8Q4x3V1k6K6M7X3y4Q4x3V1k6E0j5h3W2F1i4K6u0r3K9X3q4$3j5g2)9J5c8Y4q4A6L8X3N6Q4x3V1k6S2L8r3u0S2N6s2u0G2M7%4y4Q4x3V1k6H3L8s2g2Y4K9h3&6Q4x3V1k6S2M7s2m8Q4x3V1k6b7L8s2g2Y4K9h3&6o6L8$3&6X3K9h3N6m8j5%4c8A6N6X3W2@1P5g2)9J5k6h3A6S2N6X3p5`.">PluginConfigActivity.java</a> - 插件实现(应用态):<a href="elink@4f5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6m8L8r3u0S2N6s2u0G2M7%4y4t1L8$3!0C8i4K6u0r3d9r3W2V1k6f1q4H3M7q4)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5h3W2F1i4K6u0r3K9h3&6S2M7s2m8Q4x3V1k6K6M7X3y4Q4x3V1k6E0j5h3W2F1i4K6u0r3K9X3q4$3j5g2)9J5c8Y4q4A6L8X3N6Q4x3V1k6S2L8r3u0S2N6s2u0G2M7%4y4Q4x3V1k6H3L8s2g2Y4K9h3&6Q4x3V1k6S2M7s2m8Q4x3V1k6t1K9h3c8W2b7i4m8H3f1r3I4#2k6$3W2F1i4K6u0W2K9X3q4$3j5b7`.`.">HideAppPlugin.java</a> - 插件配置(系统态):<a href="elink@560K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6m8L8r3u0S2N6s2u0G2M7%4y4t1L8$3!0C8i4K6u0r3d9r3W2V1k6f1q4H3M7q4)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5h3W2F1i4K6u0r3K9h3&6K6P5i4y4@1k6h3#2Q4x3V1k6K6M7X3y4Q4x3V1k6E0j5h3W2F1i4K6u0r3K9X3q4$3j5g2)9J5c8Y4q4A6L8X3N6Q4x3V1k6S2L8r3u0S2N6s2u0G2M7%4y4Q4x3V1k6H3L8s2g2Y4K9h3&6Q4x3V1k6K6P5i4y4Q4x3V1k6b7L8s2g2Y4K9h3&6o6L8$3&6X3K9h3N6m8j5%4c8A6N6X3W2@1P5g2)9J5k6h3A6S2N6X3p5`.">PluginConfigActivity.java</a> - 插件实现(系统态):<a href="elink@a7fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6m8L8r3u0S2N6s2u0G2M7%4y4t1L8$3!0C8i4K6u0r3d9r3W2V1k6f1q4H3M7q4)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5h3W2F1i4K6u0r3K9h3&6K6P5i4y4@1k6h3#2Q4x3V1k6K6M7X3y4Q4x3V1k6E0j5h3W2F1i4K6u0r3K9X3q4$3j5g2)9J5c8Y4q4A6L8X3N6Q4x3V1k6S2L8r3u0S2N6s2u0G2M7%4y4Q4x3V1k6H3L8s2g2Y4K9h3&6Q4x3V1k6K6P5i4y4Q4x3V1k6t1K9h3c8W2b7i4m8H3f1%4W2K6N6r3g2E0f1r3I4#2k6$3W2F1i4K6u0W2K9X3q4$3j5b7`.`.">HideAppSystemPlugin.java</a> - 和 Server 通信:<a href="elink@7acK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6m8L8r3u0S2N6s2u0G2M7%4y4t1L8$3!0C8i4K6u0r3b7h3I4T1j5i4c8J5L8%4y4K6f1$3g2J5N6X3g2J5i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2K9h3&6Q4x3V1k6S2L8r3u0S2N6s2u0G2M7%4y4Q4x3X3c8B7j5i4k6S2i4K6u0r3j5i4m8H3i4K6g2X3j5h3N6W2L8Y4c8Q4y4h3k6D9K9h3u0Q4x3V1k6K6M7X3y4Q4x3V1k6E0j5h3W2F1i4K6u0r3K9X3q4$3j5g2)9J5c8Y4q4A6L8X3N6Q4x3V1k6S2L8r3u0S2N6s2u0G2M7%4y4Q4x3V1k6H3L8s2g2Y4K9h3&6Q4x3V1k6b7L8s2g2Y4K9h3&6o6L8$3&6F1k6h3y4@1K9h3!0F1i4K6u0W2K9X3q4$3j5b7`.`.">PluginConnection.java</a>
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
最后于
2025-10-1 19:53 被WanQing编辑 ,原因:
#逆向分析
#程序开发
#HOOK注入
#系统相关
#源码框架
#工具脚本
上传的附件:
AlbatrossManager.mp4
(1.60MB,20次下载)
收藏
・
2
点赞
・
1
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
sinker_
感谢你的贡献,论坛因你而更加精彩!
2025-10-6 07:00
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
2
)
希梦☆奈何
雪 币:
2744
活跃值:
(3655)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
26
粉丝
0
关注
私信
希梦☆奈何
2
楼
浅尝一下这个新方式镜像类hook框架
2025-10-2 19:19
0
wx_coddvccwyh
雪 币:
4
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
126
粉丝
0
关注
私信
wx_coddvccwyh
3
楼
这个代替Frida绕过反调试的效果怎么样?
2026-8-18 01:10
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
WanQing
4
发帖
45
回帖
0
RANK
关注
私信
他的文章
[原创]脱离pc开发Albatross可用的插件教程
2091
[原创]AlbatrossServer全新的注入框架,Frida的高性能替代方案
20389
[原创]Albatross 支持hook指令的强大hook和反射库
14042
[原创]Albatross Android——快速、优雅的强大安卓hook框架
20746
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
谁下载
×
guardia
黑屏
希梦☆奈何
mb_nhphjyjb
快乐的小跳蛙
慕雪2021
pexillove
mb_epnrlpbr
mb_ldbucrik
mb_fyfuomwx
mb_inczgtts
星辰北天
npc0vo
sayutizxc
mb_kujsrqqv
mb_lthgjpwj
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部