zoukankan      html  css  js  c++  java
  • iOS 提升代码的安全性,可以做哪些措施???

    希望能尽量防止别人 反编译你的代码:

    目前苹果审核规则可知,苹果官方是不希望你使用代码混淆的。。。如果发现了你用代码混淆,甚至会勒令你修改你的代码,否则下一次审核会直接移除你的app…尤其是跑脚本的那种。我猜想 ,目的是防止马甲包泛滥,并且苹果不希望你有所隐瞒。。。所以代码要请清清白白

    参考审核规则

    Guideline 2.3.1 - Performance

    We discovered that your app contains hidden features. Specifically, It would be appropriate to remove all code obfuscation and selector mangling or to explain in detail the purpose of its inclusion before resubmitting for review.

    那么,我们想提高一些代码的安全性,还有哪些手段措施:
        1.  数据加密:

             1.本地数据数据加密:

             (1)NSUserDefaults 里关键数据加密   :  eg  base64 再存储

             (2)Sqlite 数据库存储数据加密          :eg  realm 使用 AES-256 对称加密。每次创建新的 Realm 实例的时候,都需要提供相同的密钥。   

                                (可以把密钥存在钥匙串里)

            (3)网络传输数据加密:可以使用RSA非对称加密,保证传输的数据安全,防止代理抓包,伪造https证书抓包

       2.  代码混淆 是增加破解难度,不是完全不能破解

            (1)字符串混淆 (方法名混淆) :可读性降低 ,部分敏感字符串混淆

            (2)逻辑混淆     :逻辑混乱,降低可读性

              (3)   指定敏感业务逻辑代码局部C 重写:把函数名隐藏在结构体里,以函数指针成员的形式存储。这样做的好处是,编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛。

              (4)  垃圾代码生成:容易造成冗余代码,降级可读性

         Tips:(1)混淆只是增加了别人的攻破时间成本。实际别人多花点时间 肯定是能攻破的

                  (2)代码混淆,如果针对应用整体,工作量大,操作耗时。一般都是针对业务敏感的关键代码进行混淆,轻量,好维护

                  (3)在 (2)的基础上,混淆的结果是毫无意思的字符串,苹果也是容易被拒绝的。所以混淆结果是跟功能,变量意义完全没关系的名称,即可。 

                      eg:                  

                      如你的功能名是 - (void)addMessageCount。  你可以换成- (void)newErZi

                      newErZi 这种跟功能就完全没关系的名称。 并且也不是那种无意义的字符串 (参考8 中的混淆思路特别好,混淆的是一些单词)

                      混淆代码的本质是增加了别人的攻破时间成本。实际别人多花点时间 肯定是能攻破的。

       3.核心代码封装成库(这里指的是静态库framework 非开源 即闭源库),核心功能做逻辑混淆

      参考

      

  • 相关阅读:
    AES对称加密和解密
    Akka并发编程框架 -概念模型(Akka.net或者Orleans)
    .net经典书籍
    计算机专业经典著作(转载)
    windows创建定时任务执行python脚本
    数据库中为什么不推荐使用外键约束(转载)
    《SQL Server性能调优实战》知识点汇总
    数据库索引知识汇总
    ASP.NET常见异常处理示例
    MVC的HTTP请求处理过程(IIS应用程序池、CLR线程池)
  • 原文地址:https://www.cnblogs.com/someonelikeyou/p/10318345.html
Copyright © 2011-2022 走看看