iOS安全攻防(二十三):Objective-C代码混淆

Objective - C 进行代码混淆 关于反编译和防止反编译: http://www.cnblogs.com/iCocos/p/4870539.htmliOS应用安全之代码混淆设计篇: http://blog.youkuaiyun.com/zm53373581/article/details/49053269iOS应用安全之代码混淆实现篇: http://blog.youkuaiyun.com/zm53373581/article/details/491 阅读详情

原文地址:http://blog.youkuaiyun.com/yiyaaixuexi/article/details/29201699


class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。

所以,我们迫切的希望混淆自己的代码。



混淆的常规思路


混淆分许多思路,比如:

1)花代码花指令,即随意往程序中加入迷惑人的代码指令

2)易读字符替换

等等

防止class-dump出可读信息的有效办法是易读字符替换。




Objective-C的方法名混淆



混淆的时机

我们希望在开发时一直保留清晰可读的程序代码,方便自己。

同时,希望编译出来的二进制包含乱七八糟的混淆后的程序代码,恶心他人。

因此,我们可以在Build Phrase 中设定在编译之前进行方法名的字符串替换。



混淆的方法

方法名混淆其实就是字符串替换,有2个方法可以,一个是#define,一个是利用tops。
利用#define的方法有一个好处,就是可以把混淆结果合并在一个.h中,在工程Prefix.pch的最前面#import这个.h。不导入也可以编译、导入则实现混淆。

单段的selector,如func: ,可以通过#define func 来实现字符串替换。
多段的selector,如a:b:c: ,可以通过分别#define a 、b、c 来实现字符串替换。




我的混淆工具


我写了个简易的混淆脚本,主要思路是把敏感方法名集中写在一个名叫func.list的文件中,逐一#define成随机字符,追加写入.h。

脚本如下:

  1. #!/usr/bin/env bash  
  2.   
  3. TABLENAME=symbols  
  4. SYMBOL_DB_FILE="symbols"  
  5. STRING_SYMBOL_FILE="func.list"  
  6. HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"  
  7. export LC_CTYPE=C  
  8.   
  9. #维护数据库方便日后作排重  
  10. createTable()  
  11. {  
  12.     echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE  
  13. }  
  14.   
  15. insertValue()  
  16. {  
  17.     echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE  
  18. }  
  19.   
  20. query()  
  21. {  
  22.     echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE  
  23. }  
  24.   
  25. ramdomString()  
  26. {  
  27.     openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16  
  28. }  
  29.   
  30. rm -f $SYMBOL_DB_FILE  
  31. rm -f $HEAD_FILE  
  32. createTable  
  33.   
  34. touch $HEAD_FILE  
  35. echo '#ifndef Demo_codeObfuscation_h  
  36. #define Demo_codeObfuscation_h' >> $HEAD_FILE  
  37. echo "//confuse string at `date`" >> $HEAD_FILE  
  38. cat "$STRING_SYMBOL_FILE" | while read -ra line; do  
  39.     if [[ ! -z "$line" ]]; then  
  40.         ramdom=`ramdomString`  
  41.         echo $line $ramdom  
  42.         insertValue $line $ramdom  
  43.         echo "#define $line $ramdom" >> $HEAD_FILE  
  44.     fi  
  45. done  
  46. echo "#endif" >> $HEAD_FILE  
  47.   
  48.   
  49. sqlite3 $SYMBOL_DB_FILE .dump  


操作步骤



1.将混淆脚本confuse.sh放到工程目录下 
mv confuse.sh your_proj_path/


2.修改Prefix.pch
打开Xcode,修改XXX-Prefix.ch ,添加混淆头文件:
  1. #ifdef __OBJC__  
  2.     #import <UIKit/UIKit.h>  
  3.     #import <Foundation/Foundation.h>  
  4.     //添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)  
  5.     #import "codeObfuscation.h"  
  6. #endif  


3.配置Build Phase
在工程Build Phase中添加执行脚本操作,执行confuse.sh脚本,如图:







4.创建函数名列表func.list,写入待混淆的函数名,如:
-(void)sample;
-(void)seg1:(NSString *)string seg2:(NSUInteger)num;


就这样写:
sample
seg1
seg2


并将文件放置于与confuse.sh脚本同级
mv func.list your_proj_path/




5.编译查看结果
直接build,混淆脚本会在编译前运行,进行字符随机替换,并且每次build的随机字符不同,如图:






iOS安全攻防(二十四):敏感逻辑的保护方案(1) iOS安全攻防(二十四):敏感逻辑的保护方案(1)Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧!当然不是全部代码都要C来写,我指的是敏感业务逻辑代码。本文就介绍一种低学习成本的,简易的,Objective-C逻辑代码重构为C代码的办法。也许,程序中存在一个类似这样的类:@interface XXUtil : NSObject + (BOOL)isVerifi 阅读详情

相关推荐

iOS 初探代码混淆(OC)

自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了。但是最近,客户方面提出了代码安全的要求。说是要做代码混淆,这方面的工作之前从来没有接触过。然后就上网查了一下,原来有很多应用程序都做了代码混淆。看来是我固步自封了…

Xuxuabcd的博客 797

[iOS]代码混淆

混淆有几点注意:不能混淆系统方法不能混淆init开头的等初始化方法混淆属性时需要额外注意set方法如果xib、 storyboard中用到了混淆的内容,需要手动修正。可以考虑把需要混淆的符号都加上前缀,跟系统自带的符号进行区分。混淆有风险,有可能会被App Store以2.1大礼包拒掉,需要说明用途。

Gamin 6449

cpp-CObjectiveC项目代码混淆工具

C /Objective C 项目代码混淆工具,使用C 和Qt开发

iOS代码混淆教程

这里的文件夹必须在目录中真实存在(Xcode9 New Group会自动创建对应的真实文件夹)。我们找到替换的方法名或属性名,点击跳转到定义,会跳转到。给.sh文件添加运行内容(运行代码) 将下面的代码复制粘贴到。在上一步的文件下新建一个shell文件(.sh文件)创建codeObfuscation.h文件步骤1。创建codeObfuscation.h文件步骤2。创建codeObfuscation.h文件步骤3。创建func.list文件步骤1。文件的运行权限呢,如下步骤。更改文件权限为可读可写可运行。

博客简介 1553

图论:Dijkstra算法——最详细的分析,图文并茂,一次看懂!

Dijstra算法

普罗米修斯的博客 18万+

海康威视摄像机SDK二次开发--提取音频保存至文件

由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 HIKSDKSaveRealData中的内容 package ClientDemo; import ClientDemo.CameraInfo; import com.sun.jna.NativeLong; import

RichardoMu的博客 3172

iOS混淆探索

iOS审核现状 目前Apple审核越来越智能化“静态分析+动态分析”,详见揭秘苹果应用审核团队(史上最全版) 总结如下: 旧方式:静态修改(简单的全局修改名称早已经不适用了) 新策略:彻底混淆+模拟人工混淆成为主流 马甲包的本质: 阶段一减低重复率,例如基本的类名、属性名、方法名,字符串等 阶段二减少相似度(相同元素的正态分布),属性名、方法名是否按类区分(例如:相同属性名在不同类中混淆完是否改变,以及不同方法名在不同的类中混淆完其实可以相同的)。 阶段三改变代码执行流程 区分工具优劣 其.

iOS混淆 4524

Unity URP项目里Post Processing死活没效果?别慌,这5个坑我帮你踩过了

本文详细解析了Unity URP项目中Post Processing效果失效的五大常见问题,包括渲染管线配置冲突、Volume作用域误判、摄像机参数漏配、Layer层级冲突和Profile引用异常。通过实际项目案例和代码示例,提供专业级解决方案,帮助开发者快速排查并修复后处理效果不生效的问题。

weixin_33721427的博客 333

(二十三):Objective-C代码混淆扩展----安全攻防之代码混淆的一个小工具iOS安全攻防...

http://blog.youkuaiyun.com/yiyaaixuexi/article/details/29201699 觉得非常好,不过里面提到一个func.list的文件。 规则: 创建函数名列表func.list,写入待混淆的函数名,如:-(void)sample;-(void)seg1:(NSString *)string seg2:(NSUInteger)num;就这样写:sampl...

既是过河之卒,惟有奋力向前。 255

全国各省份影像下载地址(11级别)

cesium中使用urltemplate加载,leaflet中使用tile加载,具体加载有问题可以给我留言。

资深三维GIS开发 5142

基于ESP32Cam摄像头+YOLOv3完成图像识别_355

本项目正是在此背景下提出,设计一个基于ESP32Cam摄像头的图像识别系统,通过WIFI热点通信实现图像数据的传输,并利用上位机(Windows与Android平台的QT APP)实时显示原始图像与识别结果,实现目标检测、识别与标注功能。

594

oc代码混淆_iOS - 逆向 - Objective-C代码混淆 -confuse.sh文件写法

class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。所以,我们迫切的希望混淆自己的代码。混淆的常规思路混淆分许多思路,比如:1)花代码花指令,即随意往程序中加入迷惑人的代码指令2)易读字符替换等等防止class-dump出可读信息的有效办法是易读字符替换。Objective-C的方法名混淆混淆的时机我们希望在开发时一...

weixin_39843431的博客 644

python:实现brutefore破解wifi(附完整源码)

python:实现brutefore破解wifi(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 5704

ios 静态方法是否能被重写_iOS安全攻防:static和被裁的符号表,Objective-C代码混淆,敏感逻辑的保护方案(1)...

本文是《iOS安全攻防》的22、23、24小结内容。此前内容可参看:《iOS安全攻防》iOS安全攻防(二十二):static和被裁的符号表为了不让攻击者理清自己程序的敏感业务逻辑,于是我们想方设法提高逆向门槛。本文就介绍一个防御技巧————利用static关键字裁掉函数符号。原理如果函数属性为 static ,那么编译时该函数符号就会被解析为local符号。在发布release程序时(用Xcode...

weixin_36342477的博客 353

SCADA|KIO程序导出变量错误处理办法

雷工在使用KingSCADA3.52软件导出KIO变量时,遇到导出Excel格式文件报错的问题,错误提示为“ADODB.Connection未找到提供程序”。经过咨询技术人员,发现该功能需要安装Office软件,并与已安装的WPS软件兼容。雷工随后安装了Office2021版本,并进行了兼容性设置。安装过程中遇到无法启动的问题,通过删除安装目录、清理注册表、使用卸载软件和重启电脑等方法解决。安装完成后,雷工在WPS中设置了与Microsoft Office2003兼容的模式,最终成功解决了导出变量时的问题。

做有价值的事,积累有价值的笔记! 957

十一、增强现实

那都是n年前的老版本了,新版本完全没有这个问题,我就是纠结这个问题,搭建若干环境,又是vmware虚拟机,又是msys2,又是anaconda,又是找机器,折腾了几天,结果通通不是。以一张实际卡片为锚点,通过笔记本的摄像头,在显示器上将一个计算机内的3d物体显示在卡片上,类似于电影上看到的那种全息投影技术;如果你是想在windows环境下开发linux运行程序,那么CygWin/gcc是你的不二之选。而如果你想开发的是windows运行程序,并且追求速度,那么二者相比而言,MinGW是更好的选择。

3188

iOS安全攻防:Objective-C代码混淆方法与脚本实现

本教程详细讲解了iOS开发中Objective-C代码混淆的完整过程。从class-dump的威胁入手,探讨混淆的常规思路,重点阐述Objective-C方法名混淆的时机和方法,并提供一个具体的混淆脚本示例和操作步骤,适用于需要提升应用安全性的iOS开发者。

2501_91590906的博客 295

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Objective-C代码混淆

前言本方法参考优快云博主念茜iOS安全攻防(二十三):Objective-C代码混淆,为深度理解,自己按照步骤做了一遍。并写下收获和体会。一、为什么需要对工程代码进行混淆这里我不多说了,可以参考念茜的iOS安全攻防系列博客。二、混淆代码原理操作过程中,我使用的是#define,将工程中的类中所有的方法名替换成随机字符串,当然,字符串需保证不是关键字。这里的替换方法是由博主念茜写的一段脚本。这里就...

克莱斯勒的博客 1127

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: iOS安全攻防(二十二):static和被裁的符号表
下一篇: iOS安全攻防(二十四):敏感逻辑的保护方案(1)
直隶码农
博客等级 码龄19年 95粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值