Android App 静态防护技术

2020-7-15 宋宋宋

1. 源代码保护

    控制流平坦化(结构变化if -> switch)

    不透明谓词(增加跳转条件的理解难度)

    字符串加密(使用字符串解密函数读加密的敏感字符串)

2. dex文件加固

    dex文件整体加壳(整体对classes.dex加密,编写壳程序,修改程序运行入口,App运行时再解密,最后Dalvik虚拟机加载。)

    程序方法抽取加固(将原始dex文件函数实现方法抽离到加密文件中->java虚拟机方法执行机制,即执行才解密,在内存中不连续。)

    VMP加固(将原来的App的可执行代码转换为自定义的字节码,只能在自定义的虚拟机运行,攻击者有学习指令成本。)

        具体实现:

           将App中需保护的Java函数转换为Native函数。

           将App中需保护的Java函数对应的字节码进行指令转换,使其符合自定义的虚拟机的指令格式,得到能够运行在自定义虚拟机的字节码。

           实现针对这个函数的Native函数,进行执行新的字节码。

    字符串加密

        具体实现:

           提取dex文件内的明文字符串信息

           “一次一密”的字符串随机加密方式对待加密字符串进行保护

           将加密后的内容回填原位置

           在App运行时,壳动态解密,只解密用到的字符串。

3. 资源文件加固

    资源加密(不明文存储到手机存储中)

    数据透明加密(拦截本进程所有的I/O操作,操作加解密)

4. so文件加固

    Android App中使用C/C++开发,需要有汇编基础。

    具体实现

        汇编代码压缩及加密保护

        so文件的elf数据信息保护

        导入,导出函数隐藏

        解密代码动态清除

        so文件与App绑定


参考《Android应用安全测试与防护》 转载需注明本页面url及参考书籍。

标签: Android

发表评论:

密码站 2013 - 2020 | 辽ICP备17016418号-1