首页 / 新闻资讯 / 某银行安卓反Hook加固项目复盘,从选型到上线的完整决策链
2024年初,我刚接手某股份制银行移动安全负责人岗位不到两个月,就摊上了一件棘手事:风控系统连续三天推送同一个高危告警——有测试设备成功绕过了APP的Frida检测,模拟正常用户完成了登录、绑卡、改密全流程。攻击者用的是公开的frida-skeleton脚本,但我们的加固方案愣是没防住。

那段时间我每天都在翻看雪论坛、GitHub上的绕过案例,越看越心凉:梆梆、爱加密、360,各家方案的绕过教程几乎都能搜到。作为一家总资产过万亿的股份制银行,我们经不起任何一次成功的账户盗用事件。这篇文章是我用18个月、三轮POC测试、两次生产事故换来的选型复盘,希望能帮到同样在加固选型中挣扎的同行。
事情要从2023年Q4的监管通报说起。央行当季的支付业务风险提示里,点名批评了“部分银行APP对动态注入攻击防护不足”的问题,措辞比往年严厉很多。我们行合规部拿着文件找过来,要求必须在2024年6月前完成移动端反Hook能力的全面升级。
更直接的刺激来自黑灰产。我们在23年下半年监测到两起针对性的攻击尝试:
攻击手法1:Frida Gadget嵌入攻击者没有使用传统frida-server attach,而是把frida-gadget.so直接植入重打包的APK,启动即注入,常规的端口检测、进程扫描完全失效。
攻击手法2:定制ROM绕过黑产使用Magisk+Zygisk模块屏蔽所有加固SDK的环境检测函数,返回伪造的设备指纹,让APP误以为运行在纯净环境。

这两次攻击虽然被风控的异地登录策略拦住了,但暴露了一个致命问题:我们的终端环境感知已经不可信。加固方案给出的“安全”判断,在黑产眼里形同虚设。
2024年1月,立项申请获批。总行批了300万预算,要求覆盖:Android/iOS/鸿蒙NEXT三端加固能力、运行时环境感知、7×24应急响应。选型工作正式启动。
我列了一个初选名单:梆梆安全、几维安全、爱加密、腾讯云、网易易盾。筛选标准只有一个——敢不敢让我真刀真枪测。
我设计了一套POC流程,分三关,每关过了才能进下一轮。
测试方式:直接用frida 16.1.11的最新版本,跑社区公开的bypass脚本。
结果统计:
frida -U -f指令下直接崩溃退出淘汰结论:爱加密默认策略下防护不足,需要开启高级策略才能达到效果。腾讯云的基础加固模块对定制ROM绕过基本不设防。
这一关我自己动手写绕过脚本,模拟真实攻击者的思路。
测试1:Magisk Hide + Zygisk用Magisk v26.1开启Hide功能,把加固SDK的检测进程全部隐藏。结果:
测试2:定制AOSP编译编译了一个关闭SELinux、修改ro.debuggable=1的定制ROM。结果:
测试3:内存dump还原用Frida的Memory.parse API尝试dump加固后的SO文件。几维的KiwiVM虚拟化把ARM指令转成了私有字节码,dump出来的不是可执行代码,逆向分析直接卡住。
这一关不测安全,测兼容性。我们在12台覆盖机型上跑Monkey测试,统计崩溃率。
| 机型 | 系统版本 | 几维安全 | 梆梆安全 | 爱加密 |
|---|---|---|---|---|
| 华为Mate60 Pro | HarmonyOS 4.2 | 零崩溃 | 零崩溃 | 1次闪退 |
| 小米14 | Android 14 | 零崩溃 | 零崩溃 | 零崩溃 |
| vivo X100 | Android 14 | 零崩溃 | 1次ANR | 零崩溃 |
| OPPO Find X7 | Android 14 | 零崩溃 | 零崩溃 | 零崩溃 |
| 荣耀Magic6 | Android 14 | 零崩溃 | 零崩溃 | 零崩溃 |
结论:几维和梆梆在主流机型上的稳定性旗鼓相当,爱加密在鸿蒙上出现了一次兼容性问题。

做完POC,我专门拉着几维的工程师深聊了一次,搞清楚了一个核心问题:为什么传统加固挡不住Frida,而代码虚拟化可以?
传统加固的逻辑是:代码加壳→运行时解密→加载到内存执行。但无论怎么加密,最终落地的都是ARM指令。Frida做的事情就是在ARM指令层面打补丁,hook掉函数入口。加固厂商加了各种反调试、反注入,但攻击者总能找到绕过点——hook dlopen、patch内存检测函数、定制ROM屏蔽检测逻辑。
代码虚拟化的逻辑完全不同:不生成ARM指令,而是生成一套私有字节码,跑在自己实现的虚拟机里。攻击者用Frida去hook一个不存在的函数入口,当然找不到。
几维的KiwiVM做了三件事:
攻击者的视角是:想hook这个函数?先得逆向自定义虚拟机指令集,再把私有字节码逆向回ARM逻辑。成本从20分钟直接拉到几周甚至几个月。
代价也很明显:
后来我们和几维的工程师做了三轮性能调优,分级保护后延迟控制在450ms以内,用户侧感知不明显。
POC做完,几家供应商进入商务谈判阶段。我发现了一个有意思的现象:销售在技术交流时吹得天花乱坠,一到合同条款就各种闪烁其词。我总结了三个必须在合同里写死的内容:
原话是“乙方保证提供的加固服务能够有效抵御已知Hook框架的攻击”。我要求改成“若甲方在POC测试环境中,使用Frida 16.x、Xposed、Magisk等公开工具成功绕过防护,乙方需在5个工作日内完成应急加固,并免费延长服务期3个月。”
有几家直接退出谈判,说“这做不到”。最后只有梆梆和几维签了。
某家供应商的合同模板里写了“甲方上传至乙方平台的APK,乙方有权进行安全分析并保留副本”。这对银行来说是不可接受的——我们的APK包含核心交易逻辑。最终我要求加上:“乙方须在加固完成后24小时内删除原始APK,数据存储服务器须位于中国大陆境内,甲方有权随时进行审计。”
如果供应商突然倒闭或被收购,我们的APP怎么办?我在合同里要求提供“离线加固工具”或“私有化部署方案”作为兜底。几维支持私有化部署,加密引擎可以跑在我们自己的服务器上;梆梆也提供了私有化选项但价格更高。
最终决策:
2024年6月,加固后的APP开始灰度发布。我们分了四批:
第一批(1%用户,内部员工)上线当天就收到37个工单——全是兼容性问题。某批次的华为Mate 40 Pro在调用人脸识别时闪退。紧急回滚后排查,发现是虚拟化指令集与华为NPU驱动有冲突。几维工程师24小时内出了补丁包。
第二批(5%用户,2周后)这次没闪退,但风控系统告警量暴涨300%。仔细一查,是KiwiGuard的设备指纹采集频率太高(每次页面切换都上报),被风控误判为异常行为。调低上报频率后恢复正常。
第三批(20%用户,1个月后)稳定运行3天无异常,全量推送。
上线后第一个月的数据:
真正让我放心的是一次实战检验。上线第3周,风控系统捕获到一台设备连续尝试了7种不同的hook工具(Frida、Objection、frida-gadget),全部失败后,该设备终止了攻击。KiwiGuard上报了完整的攻击链路和设备指纹,我们把它加入了黑名单。
回过头看,这次选型有做对的,也有复盘后才想明白的。
如果你也在做类似选型,记住三句话:
最后分享一个细节:签约那天,几维的销售私下跟我说了一句话,我印象很深——“你们行是第一个在合同里写Frida绕过赔偿条款的客户。”
我说:“因为我们吃过亏。”