GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

逆向工程 --- 什么是加固

加固是保护软件代码不被安全分析的一种手段。加固技术有强弱,加固是一种不断对抗升级的过程,今天的加固明天就会被人解开。

 

加固有两种形式,

一个是第三方加固,加固的是apk文件

加固多存在于国内

最常见的是063,常见于打车软件和银绗类软件居多

一次是i加密。i加密在guo有资产或者天意软件较多。

 

还有一个是自定义加固,加固的是源码文件

比如mt管理器,因为开发这个软件的同样也是密码学专家,他的软件加固比商业加固都强悍。

 

常见的加密的方法有,

混淆,签名验证,dex和so加密保存,vmp指令虚拟化等技术。

  1. 反调试(Anti-Debugging)

    • 目的:防止攻击者使用调试器(如GDB, IDA Pro)动态跟踪和分析应用逻辑。

    • 方法:检查进程状态(如ptrace跟踪)、TracerPid等,发现被调试则触发退出或执行错误逻辑。

  2. 环境检测(Environment Detection)

    • 目的:判断应用是否运行在危险或非官方环境中。

    • 方法:

      • Root/越狱检测:检查SuperSU、Magisk、特定目录或文件是否存在。

      • 模拟器检测:检查模拟器特有的硬件信息(如IMEI、IMSI)、传感器、驱动程序等。

      • Hook框架检测:检测Xposed、Frida、Cydia Substrate等常用Hook框架的存在。

  3. 代码混淆(Obfuscation)的细分

    • 命名混淆:将类、方法、字段名改为无意义的abc等。这是最基础的。

    • 控制流混淆:改变代码的执行流程,添加大量的if-elseswitch和无用代码块(死代码),使控制流图变得极其复杂,难以理解。

    • 字符串加密:将代码中的明文字符串加密存储,运行时再解密使用,防止静态分析时直接搜索关键词定位关键代码。

    • 指令替换:将简单的指令序列替换为功能相同但更复杂的指令。

  4. 完整性校验(Integrity Checks)

    • 目的:防止应用被篡改(如修改Smali代码后重打包)。

      • 方法:在运行时计算Dex文件、So库或关键资源的CRC或哈希值,与预埋的正确值比对。不符则退出。

  5. 白盒加密(White-Box Cryptography)

    • 目的:将加密算法和密钥融为一体,在内存中从不出现完整的密钥,即使逆向分析加密函数本身,也无法提取出密钥。常用于保护App内的敏感数据和安全通信。

  6. 碎片化执行(Fragmented Execution)

    • 目的:将一段核心算法的代码拆分成多个碎片,分散在不同的地方(如不同Dex、甚至网络端),在运行时再组合执行,增加静态分析的难度。

  7. 服务器协同(Server-Side Coordination)

    • 目的:将最核心的业务逻辑放在服务器端,客户端只是一个“界面”。即使客户端被完全破解,攻击者也拿不到核心算法。这是最有效的保护,但依赖于网络。

总结:加固的本质与选择

正如您精辟地总结的:加固是一种不断对抗升级的过程,本质是“增加攻击成本”和“拖延时间”。

  • 对于大多数应用:选择一款主流的第三方加固服务(如腾讯、360、梆梆、爱加密) 是最经济实惠的方案。它们提供了均衡的保护强度和兼容性,能有效对抗自动化攻击和普通破解者。

  • 对于超高安全要求的应用(如数字钱包、核心金融功能):往往会采用 “第三方加固 + 自定义加固” 的多层混合方案。在通用保护的基础上,对最关键的业务代码进行自定义的、更深度的保护(如强大的VMP、白盒加密、自研反调试)。

  • 对于MT管理器这类特殊应用:其开发者本身就是安全专家,且应用用户很多是逆向爱好者,攻击者水平极高。因此,高度定制化、不断创新的自研加固方案是其生存之本。

posted on 2025-08-01 23:14  GKLBB  阅读(10)  评论(0)    收藏  举报