好久没写博客了,今天打算更新一下,记录一下之前写过的东西,在GitHub上也写了一些小软件,顺便分享一下
本文核心问题:libtprt.so 是通过哪些特征检测 Frida?
方法:对比 frida-server 与 florida-server 差异
最近写了一些小工具,感觉还是挺好用的,所以分享出来:
772K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6d9P5i4c8@1k6i4u0y4L8$3S2F1i4K6u0r3c8h3q4K6P5f1S2G2L8$3D9`.
EasyHook 是一个运行在 Windows 桌面端的 Android Frida 脚本 IDE,支持脚本管理、代码编辑、Android 设备 连接、进程选择、Attach/Spawn 注入、运行控制和日志输出,让 Frida 脚本无需手写 Python 启动器即可快速执行。
6a9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6d9P5i4c8@1k6i4u0y4L8$3S2F1i4K6u0r3g2i4y4T1c8r3g2@1k6h3y4@1K9h3!0F1b7Y4W2H3j5i4y4K6
隐藏 Android 应用内 USB 连接与 USB 调试检测信号的 LSPosed/Xposed 模块。
61fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6d9P5i4c8@1k6i4u0y4L8$3S2F1i4K6u0r3c8h3&6$3f1$3y4G2M7r3f1`.
EnvScope 是一个用于 Android 运行环境自检的 APK,重点探测 Frida、Xposed、LSPosed、EdXposed、Substrate、Riru、Zygisk/Magisk 等动态插桩、Hook 或模块化注入痕迹。
在之前的博客中,我分析测试了某气骑士这款游戏(e17K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2^5N6h3q4F1N6$3!0J5L8r3c8Q4x3X3g2@1L8%4m8Q4x3V1j5J5x3o6t1$3i4K6u0r3x3o6q4Q4x3V1j5H3z5g2)9J5c8X3q4F1k6s2u0G2K9h3c8Q4x3X3c8J5k6g2)9J5k6r3E0F1K9h3N6Z5N6q4)9J5c8W2!0q4c8W2!0n7b7#2)9^5z5g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2!0n7c8q4)9&6x3#2!0q4y4W2)9&6y4#2!0n7y4W2!0q4z5g2)9^5x3g2)9^5y4#2!0q4y4g2)9^5z5q4!0n7x3q4!0q4y4q4!0n7b7g2)9^5y4W2!0q4y4g2)9^5c8W2)9^5c8r3k6J5K9h3c8S2i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1$3i4K6W2o6i4@1u0m8i4@1f1#2i4K6R3^5i4@1t1$3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1$3i4K6W2o6i4K6R3H3i4@1f1#2i4K6V1H3i4K6S2q4i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1@1i4@1u0m8i4K6R3$3P5s2m8G2M7$3g2V1i4@1f1$3i4K6S2r3i4K6V1J5i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1#2i4K6V1J5i4K6S2o6N6r3g2J5L8i4g2^5i4@1f1^5i4@1u0r3i4K6V1H3i4@1f1^5i4@1p5I4i4K6S2o6M7$3S2W2L8r3I4Q4c8e0S2Q4z5o6c8Q4z5f1q4Q4c8e0k6Q4z5f1y4Q4b7f1y4Q4c8e0g2Q4b7f1g2Q4z5f1g2Q4c8e0N6Q4z5p5g2Q4b7U0m8Q4c8e0g2Q4z5o6k6Q4z5o6g2Q4c8e0g2Q4b7f1c8Q4z5e0S2V1N6h3#2H3i4@1f1%4i4K6W2m8i4K6R3@1i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4@1t1J5i4@1p5I4i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1%4i4@1u0n7i4K6R3$3i4@1f1^5i4K6R3%4i4@1t1@1i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1#2i4K6R3^5i4K6R3$3i4@1f1$3i4K6W2q4i4K6V1H3i4@1f1#2i4@1p5$3i4K6R3J5i4@1f1@1i4@1u0p5i4K6V1#2i4@1f1@1i4@1u0p5i4@1u0r3i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1#2i4K6R3#2i4@1t1$3i4@1f1@1i4@1u0n7i4K6V1$3i4@1f1$3i4K6V1$3i4@1t1&6i4@1f1#2i4@1u0o6i4K6S2r3i4@1f1%4i4@1u0n7i4K6V1#2i4@1f1^5i4@1u0r3i4K6R3%4k6Y4u0A6k6r3q4Q4c8e0k6Q4b7e0y4Q4z5o6m8Q4c8e0k6Q4b7U0g2Q4z5p5u0Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0k6Q4z5o6W2Q4z5o6m8Q4c8e0c8Q4b7V1u0Q4b7e0g2Q4c8e0S2Q4b7V1k6Q4z5e0W2Q4c8e0k6Q4b7f1y4Q4b7e0q4Q4c8e0g2Q4z5p5c8Q4z5f1q4Q4c8e0g2Q4b7f1g2Q4b7e0u0Q4c8e0g2Q4b7U0m8Q4b7U0q4Q4c8e0k6Q4z5f1c8Q4b7e0g2Q4c8e0g2Q4b7f1g2Q4z5f1g2Q4c8e0N6Q4z5p5g2Q4b7U0m8Q4c8e0c8Q4b7U0S2Q4z5o6m8Q4c8e0c8Q4b7U0S2Q4z5p5u0Q4c8e0y4Q4z5o6m8Q4z5o6t1`.
首先介绍一下基本情况,某气骑士这款游戏使用了libtprt.so库对游戏进行加固,除了对il2cpp进行加固外,还加入了反frida的机制,如果手机中运行frida-server进程的话,游戏在启动的时候回卡死,il2cpp将不会被加载到内存中,不过在之前的测试中,发现libtprt.so会检测usb连接功能,不过不确定是怎么进行检测的。
所以现在第一步,需要绕过libtprt的usb检测功能,因为如果不连接usb的话,frida脚本执行会比较麻烦,为此我专门编写了一个可以防usb检测的lsposed模块:UsbDetectionBypass

下载源代码后修改作用域

在手机上启动这个模块,之后在电脑上通过adb查看日志:
之后运行某气骑士这款游戏,可以看到如下图的日志内容,这说明检测的返回值已经被修改,成功绕过检测:

从日志可以看出,应用在 Java 层通过 BATTERY_CHANGED 广播获取 plugged 状态来判断是否连接 USB,同时在 Native 层通过 __system_property_get 读取 init.svc.adbd、service.adb.tcp.port 和 ro.debuggable 等系统属性来检测 ADB 调试环境;而当前结果中这些值均被成功篡改为“未连接 USB、未开启调试”,说明通过 Hook 覆盖了应用的检测路径,从而有效绕过了其 USB/调试环境检测机制。
通过上述的方式可以防止libtprt检测我的usb,不过frida还是容易被检测,一旦开启frida-server就会闪退。
这个被检测的原因有很多,因为frida本身有很多检测点,我先换了一个魔改的frida-server测试了一下,魔改的frida-server是这个:
8eeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6k6L8r3q4J5L8$3c8Q4x3V1k6r3L8r3!0J5K9h3c8S2
启动florida-server(报错不用管)
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!