iOS应用加固--代码混淆

  • 前两天公司给了一份应用安全的测评报告,报告显示iOS这边安全测评得分是60(满分100),报告出的蛮详细,列出了危险等级,危害及 建议解决的方法。经评估我暂做了代码混淆和动态调式攻击风险。

代码混淆

一、危害
  • 针对 iOS 应用开发使用的 Object-c 及 C,C++代码目前较缺乏有效的防护手段, 苹果的 app 自身并没有比 android 更安全的防范措施,也无法通过常规的二 次加固保护应用不被反编译和篡改,应用代码编写过程中出现的安全漏洞、 编码隐患、甚至业务逻辑上的缺陷很容易被分析暴露,造成程序业务逻辑泄 露、加解密算法失效、通信加密失效,攻击者可以利用这些信息窃取客户端 的敏感数据,包括账号、密码;绕过业务安全认证流程,直接篡改用户账号 信息;对服务器接口发起攻击等。iOS 的代码混淆,是通过将 Object- C、C/C++代码中的方法名、变量名、类名、包名等这些元素名称改成毫无关 联且无意义的名字,对源代码实现逻辑分支混淆和控制流平坦化,隐藏关键逻 辑,提高黑客破解难度,增加破解时间成本。
二、建议解决方案
  • 开发者使用头文件映射的方式定义 pch 文件,并在定义的 pch 文件中引入头 文件,在头文件中定义方法混淆的隐射,防止代码语义化的定义暴露程序意 图,同时编译生成新的发布包
三、实际解决方案

1、cd 项目路径

2.touch confuse.sh(此文件中添加混淆脚本,脚本在这里)

3、touch func.list (此文件中手动添加想要混淆的方法,也可参考这篇文章里的脚本进行全局混淆)

4、分别 mv confuse.sh 和 func.list 到自己的项目目录下 如:mv confuse.sh 项目路径

5、设置run script 如下图

6、在PCH文件中添加 #import "codeObfuscation.h"

7、编译

8、如果需要demo的话,这里有一个不是我写的demo

四、以上操作流程各位开发者总结了很多,我在这里主要说一下自己遇到的坑:
  • 最深的坑就是路径问题,在念茜的博客里看到的是用 mv 命令来移动,在其他博客中大都记录的是Add Files...来移动到项目目录下,我用Add Files...之后就出现了报错,提示找不到路径,尝试了各种相对路径和绝对路径后无果,而后用终端mv命令后就一路畅通了,如果你有同样的问题,建议用mv命令试试。

  • 如果没有自动生成 codeObfuscation.h 文件可手动创建,但是注意#ifndef Demo_codeObfuscation_h #define Demo_codeObfuscation_h和脚本中的echo '#ifndef Demo_codeObfuscation_h相对应。

  • 编译后报错 Shell Script Invocation Error 错误,可在终端执行 chmod -R 777 XXX 命令, XXX是路径,表示给XXX路径下的所有文件夹和文件都授予读写和可执行权限。

  • func.list文件中添加方法后如果在codeObfuscation.h 没有生成相对应的混淆后的代码,建议关注一下confuse.sh中HEAD_FILE="$PROJECT_DIR/codeObfuscation.h"此处的路径。

五、逆向查看代码是否混淆成功

1、下载class-dump 下载地址

2、将dmg文件里的class-dump复制到“/usr/local/bin/”下,其他的目录好像都没有写入权限了。

3、在终端输入 class-dump查看是否可正确显示版本,如下图

4、将ipa后缀改成zip并解压

5、执行命令 class-dump -H Payload路径/appName.app -o 写入文件路径

6、到这里代码混淆基本上就完成了,可在刚写入的文件中找到混淆方法查看是否是一串乱七八糟的字符。

动态调式攻击风险

一、危害
  • 在未加入反调试术的 iOS App 中,攻击者使可用 GDB、IDA、Ptrace 等调试 器跟踪运行的目标程序,查看内存中运行的进程状态,获取内存进程中的运 行代码和实时数据,甚至分析篡改程序的业务逻辑,对客户关键数据或者服 务器进行恶意攻击,例如查看客户端业务操作的数据,比如登录账号、密码 等,窃取用户信息;或者通过分析程序运行逻辑,挖掘应用漏洞。
二、建议解决方案
  • 在代码中的 main.m类中增加如下代码,gdb 方式或其他调试工具注入到当前 程序进程,代码如下:

    void anti_gdb_debug() { void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW); ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace"); ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0); dlclose(handle); }

三、实际解决方案
  • 刚好在念茜大佬的博客看到这篇阻止GDB依附的文章,基本上我也就这样了,不得不说大佬就是大佬,一系列安全防攻击总结的全面到位,膜拜。
以上是我在项目中遇到的一些问题,如果能帮到你我很开心,如果没能帮到你,建议多查一点相关的文档,毕竟实际出现的问题也是千奇百怪。

OVER

转载于:https://juejin.im/post/5b68117651882508603d14d1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值