口诀: 本地网络,加固逆向,系统保护
一、 本地数据加密
1.本地文件加密
2.本地数据库加密
二、网络传输数据加密
1.https (RSA非对称加密,国密),请求参数加密 (AES对称加密,国密)
2.接口校验(通过自己逻辑验证 接口是否可以调用,在钱不够的情况下不能掉用支付接口)
3.判断代理,防止抓包(NSURLSessionConfiguration 的 connection Proxy Dictionary 设置成空的字典,因为这个属性就是用来控制会话的可用代理的,但是由于 OC 方法很容易被 hook,避免抓包是不可能的,所以,最好的方式是对请求参数进行加密。)
三、APP整体加固以及代码保护
1.app加固
app加固.png
(代码虚拟化 :
将原始化代码编译为动态的DX-VM虚拟机指令,运行在DX虚拟机之上,无法被反编译回可读的源代码
字符串加密 :
把代码中定义的静态常量字符串进行加密,运行时解密,防止攻击者通过字符串进行静态分析,猜测代码逻辑
代码混淆:
将原始代码的控制流进行切分、打乱、隐藏、插入花指令、将代码逻辑复杂化而不影响原始逻辑
反编译:
有效防止攻击者使用逆向分析工具将二进制代码反编译为伪代码(Pseudo-Code),如IDA的F5功能 IDA反汇编工具是把二进制文件作为输入,经过处理后输出这个文件的汇编代码。 https://www.jianshu.com/p/b36d5a2f3c60
防调试:
为App提供运行时防调试能力,防止攻击者通过调试来动态分析App的逻辑
防篡改:
防止应用程序中的代码及资源文件被恶意篡改,杜绝盗版或植入广告等二次打包行为)
2.类文件保护 (静态混淆:类名、方法名、属性的混淆 )
四.逆向保护 (反调试、注入检测、hook 检测,签名检测)
1.阻止动态调试(在main函数中植入代码阻止调试工具GDB、LLDB的使用)
2.hook检测(如何防止函数被hook 利用fishhook.h hook掉 hook函数 https://www.jianshu.com/p/24691d6ac0b6)
3.签名检测
五、系统安全保护
1.越狱检测
2.采用自定义键盘(我们打字在使用系统键盘打字时时,会出现提示,键盘一般会缓存这些提示字符串,缓存在手机的“/private/var/mobile/Library/Keyboard/dynamic-text.dat”文件中,攻击者可以提取出来,出现频率最高的往往是账户名和密码。)
3.清空剪切板
4.高斯模糊(防止偷窥)
网友评论