目录

一、iOS加固保护原理

1.字符串混淆

2.类名、方法名混淆

3.程序结构混淆加密

4.反调试、反注入等一些主动保护策略

二 代码混淆步骤

1. 选择要混淆保护的ipa文件

2. 选择要混淆的类名称

3. 选择要混淆保护的函数,方法

4. 配置签名证书

5. 混淆和测试运行


一、iOS加固保护原理

从上面的分析来看,我们可以从以下几个方面来保护我们的APP:

1.字符串混淆

对应用程序中使用到的字符串进行加密,保证源码被逆向后不能看出字符串的直观含义。

2.类名、方法名混淆

对应用程序的方法名和方法体进行混淆,保证源码被逆向后很难明白它的真正功能。

3.程序结构混淆加密

对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。

4.反调试、反注入等一些主动保护策略

这是一些主动保护策略,增大破解者调试、分析APP的门槛。

4.1字符串加密字符串会暴露APP的很多关键信息,攻击者可以根据界面显示的字符串,快速找到相关逻辑的处理函数,从而进行分析破解。加密字符串可以增加攻击者阅读代码的难度以及根据字符串静态搜索的难度。

比如一个APP中有如下的一些字符串定义在代码文件中:

经过加密后,代码文件变成如下的形式:

里面已经没有明文的字符串了,全是用byte的形式保存的,打包生成APP后,他们也就无法直观的看出实际内容了,这对破解者会造成巨大的难度:

4.2符号混淆符号混淆的中心思想是将类名、方法名、变量名替换为无意义符号,提高应用安全性;防止敏感符号被class-dump工具提取,防止IDA Pro等工具反编译后分析业务代码。

比如一款混淆后的APP,用IDA等工具打开,如下图所示:

“Labels”栏里,显示的这些符号,不管是类名还是方法名,谁也看不出来到底什么意思,这个函数到底是什么功能,就有点丈二和尚摸不着头脑的感觉,这就大大增加了破解者分析APP的难度。

4.3代码逻辑混淆代码逻辑混淆有以下几个方面的含义:

对方法体进行混淆,保证源码被逆向后该部分的代码有很大的迷惑性,因为有一些垃圾代码的存在;

对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低,这很容易把破解者带到沟里去;

它拥有和原始的代码一样的功能,这是最最关键的。

混淆前后的对比如下(左边是原始结构,右边是混淆后的结构):

下面以混淆工具 ipaguard为例:

无论是加密还是运行时虚拟机,最后都可以通过执行时调试把代码反向生成出来原来的代码,虽然能抵御低端的黑客攻击,但是对高端黑客却形同虚设。 代码混淆是通过修改源代码结构和变量名,使得代码难以被理解和反编译。这可以黑客获取应用程序的代码,也会很难理解它,不管他是高端还是低端的黑客,目前都没有有效的方法来还原为原来的代码,是公认的非常有效的方法之一。下面以ipaguard为例子介绍怎么对ipa文件中的类、方法、方法参数、变量等进行全面修改混淆,使其名称成为没有意义的乱码,极大地增加应用破解的难度。ipaguard代码混淆工具支持对OC、Swift、Flutter、H5、HBuilder、Unity3D、Cocos2dx等各种开发平台开发的app。

二 代码混淆步骤

1. 选择要混淆保护的ipa文件

2. 选择要混淆的类名称

选择左侧的代码模块中的OC类名称或者Swift类名称,选择IPA种要混淆的二进制文件,然后勾选可执行文件代码里面的类名称。如果类太多可以使用搜索查看功能,ipaguard提供了级别选择,名称搜索,已选未选过滤来帮助配置混淆对象。

3. 选择要混淆保护的函数,方法

选择左侧代码模块下的oc方法或者swift方法,点击右侧的选择文件选取一个可执行二进制文件,勾选需要混淆保护的方法和函数。ipaguard提供了风险等级过滤,名称搜索过滤,根据类名称过滤条件来辅助配置混淆目标

4. 配置签名证书

点击左侧的签名配置,设置ios签名证书,描述文件等信息。测试阶段用开发证书,这样可以方便安装到测试机子上检验是否测试后的app运行正常;最终配置测试ok,发布的时候再改成发布证书,混淆配置完后可以提交上架。

5. 混淆和测试运行

点击开始处理按钮,ipaguard将对ipa中选中的内容进行混淆保护,并安装混淆好的ipa到手机上,运行如果ok,点击保存配置,下次直接加载配置即可,无需每次配置要混淆的内容。

ipaguard在做混淆这块还是做的很人性化的,混淆目标可控,强度可控,极大地简化了配置混淆内容的过程,可视化的操作也非常的方便。

3.4URL编码加密对程序中出现的URL进行编码加密,防止URL被静态分析。

3.5网络传输数据加密对客户端传输数据提供加密方案,防止通过网络接口的拦截获取数据。

3.6主动保护策略除了上面的一些被动保护方法,我们还可以加入一些主动的防护机制,比如反调试等。

iOS平台下的Anti-Debug方法一般有以下一些:

检查进程的状态是否为 P_TRACED。

调用ptrace请求来检查进程是否被调试。由于可能被攻击者绕过该方法的调用,在应用的多处增加ptrace函数会提高应用的安全性。

通过sysctl查看信息进程里的标记,判断自己是否正在被调试。sysctl是用以查询内核状态的接口,并允许具备相应权限的进程设置内核状态。

iOS下的这些方法,相对于Linux下的方法要少很多,例如fork一个子进程,ptrace父进程进行检测方式不再奏效。而且,要完全防止程序被调试或者被逆向,理论上是不可能的,但可以增加破解者调试的难度。

总之,添加以上的一些保护措施后,iOS APP的安全性会获得很大的增强,大大提高了破解者破解的难度。对于iOS开发者来说,有必要了解这些措施,特别是针对一些金融、证券类APP的开发,保护方面的需求比较大,比如国内某知名移动支付工具就添加了一些调试检测以及反调试的功能。

ios安全加固 ios 加固方案的更多相关文章

  1. WebViewJavascriptBridge详细使用 iOS与H5交互的方案

    WebViewJavascriptBridge详细使用 源网址: https://www.cnblogs.com/jiang-xiao-yan/p/5345755.html    前言 WebView ...

  2. 李洪强iOS开发之iOS好文章收集

    李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...

  3. iOS开发 - 兼容iOS 10

    1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserN ...

  4. iOS 1 到 iOS 10 ,我都快老了

    iOS 1:iPhone诞生 虽然很难想像,但初代iPhone在问世时在功能方面其实远远落后于那时的竞争对手,比如Windows Mobile.Palm OS.塞班.甚至是黑莓.它不支持3G.多任务. ...

  5. IOS学习之IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作(一) 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都 ...

  6. 【译】UI设计基础(UI Design Basics)--iOS应用解析(iOS App Anatomy)(三)

    2.1  iOS应用解析(iOS App Anatomy) 几乎所有的iOS应用都会用到UIKit框架中的组件.了解这些基础组件的名称,角色,功能可以帮你在应用界面设计时做出更好的决策. UIKit提 ...

  7. IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)

    IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...

  8. IOS 动画专题 --iOS核心动画

    iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...

  9. IOS开发笔记 IOS如何访问通讯录

    IOS开发笔记  IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...

  10. 怎样处理iOS 5与iOS 6的 low-memory

    移动设备终端的内存极为有限,应用程序必须做好low-memory处理工作,才能避免程序因内存使用过大而崩溃. low-memory 处理思路 通常一个应用程序会包含多个view controllers ...

随机推荐

  1. simple-check-100

    代码脚本解开法 #include <stdio.h> int main(int argc, char* argv[]) { char flag_data[] = { 220, 23, 19 ...

  2. Codeforces Round #736 (Div. 2). D - Integers Have Friends

    原题:D - Integers Have Friends 题意: 给定一个数组,求一个最长子数组满足\(a_i \,\, mod \,\, m \,\, = \,\, a_{i + 1} \,\, m ...

  3. python之递归(斐波那契数列)与迭代

    对于较大的计算来说,迭代不如递归计算速度快,并且可以说非常慢 但是迭代对于较小的运算又比递归巧妙 # 迭代方法 def slowsnail(x): am = [1, 1] if x < 0: p ...

  4. windows Server 2008 r2 无法通过update更新的解决方法

    注意:目前windows Server系列操作系统已经完全停止支持. 1,安装 SP1补丁 KB976932 点击:微软补丁下载网站 搜索KB976932,手动下载安装. 2,安装 KB4474419 ...

  5. [Python急救站]火车购票程序

    火车购票程序 如果要一直执行程序,加个while循环即可.要是要智能判断月份,可以通过调取当前时间进行判断即可. print(""" 1.每年的1-3月和7-9月凭学生证 ...

  6. LambdaQueryWrapper常用方法

    /***附加条件构造器LambdaQueryWrapper常用方法 ---这几个肯定够用了*/wrapper.eq("实体类::查询字段", "条件值"); / ...

  7. Filter拦截问题

    关于Filter拦截问题 刚开始我创建了个servlet项目一直拦截不成功 首先是因为导包的问题      import javax.servlet.*; 必须是这个包才有 第一个这个Javax.se ...

  8. 2 与HTTP相关的各种概念

    目录 1 与HTTP相关的各种应用 1 网络世界 2 浏览器 3 Web服务器 4 CDN 5 爬虫 2 与HTTP相关的各种协议 1 HTML 2 编程语言 3 WebService 4 WAF 1 ...

  9. SpringSecurity入门(SSM版)

    1. 简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Sp ...

  10. 在k8s中快速搭建基于Prometheus监控系统

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 前言 K8s本身不包含内置的监控工具,所以市场上有不少这样监控工具来填补这一空白,但是没有一个监控工具有prometheus ...