代码名称混淆,这是最简单的保护策略,将类名、函数名、属性名、字符串做一个加密或者混淆,比如将函数名 mainactivity改名为0oooo0o0o0o0O,增加了阅读难度。对抗方法,命名为容易识别的名称,比如将 函数名称 0oooo0o0o0o0O重命名为f1,smali文件中可能包含源类名 .source ,如果没有就是去除了。
壳,类似于有密码的压缩文件,壳将关键代码隐藏起来。对抗方法,不同的壳方法不一样,但是可以试试dump内存的dex文件。
签名校验,文件完整性检查。通过一些算法检查文件合法性和完整性。对抗方法,剔除校验函数或者永远成立。
运行环境安全检查,包括检查手机是否root、xposed、是否正在被调试、是否自己在虚拟机中运行、手机是否有其他危险app、危险端口检测等等。对抗方法root隐藏。
函数工作流混淆。原来的工作流是树形结构,混淆后灌木结构,改变了执行逻辑,功能性不变。对抗方法,溯源原有工作流。
、 so文件,将java层移动至c层。对抗方法,c转源码
资源文件加密,将图片、文字、布局文件加密保存,对抗方法,找到解密算法解密文件
网络验证,通过网络身份认证。对抗方法,网络流量修改。