iOS安全攻防(二十三):Objective-C代码混淆
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。
脚本如下:
#!/usr/bin/env bashTABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
export LC_CTYPE=C#维护数据库方便日后作排重
createTable()
{echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE
}insertValue()
{echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE
}query()
{echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE
}ramdomString()
{openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
}rm -f $SYMBOL_DB_FILE
rm -f $HEAD_FILE
createTabletouch $HEAD_FILE
echo '#ifndef Demo_codeObfuscation_h
#define Demo_codeObfuscation_h' >> $HEAD_FILE
echo "//confuse string at `date`" >> $HEAD_FILE
cat "$STRING_SYMBOL_FILE" | while read -ra line; doif [[ ! -z "$line" ]]; thenramdom=`ramdomString`echo $line $ramdominsertValue $line $ramdomecho "#define $line $ramdom" >> $HEAD_FILEfi
done
echo "#endif" >> $HEAD_FILEsqlite3 $SYMBOL_DB_FILE .dump
操作步骤
1.将混淆脚本confuse.sh放到工程目录下
mv confuse.sh your_proj_path/
2.修改Prefix.pch
打开Xcode,修改XXX-Prefix.ch ,添加混淆头文件:
#ifdef __OBJC__#import <UIKit/UIKit.h>#import <Foundation/Foundation.h>//添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)#import "codeObfuscation.h"
#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安全攻防(二十三):Objective-C代码混淆相关推荐
- 读书笔记(二十三):代码整洁
一.有意义的命名 1.名副其实 选个好名称要花时间,但省下来的时间比花掉的多.注意命名,一旦发现有更好的名称,就换掉旧的. 变量.函数或类的名称应该已经答复了所有的大问题,它该告诉你,它为什么会存在, ...
- IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)
1.NSKeyedArchiver.NSKeyedUnArchiver 1).archiveRootObject:toFile 归档对象到这个路径文件 2).unarchiveObjectWithFi ...
- ios内购二次认证服务器代码
<?php// 获取认证结果的状态值 function get_status($arr) {while(list($key, $value) = each($arr)) {if ($key == ...
- Android Studio 代码混淆(你真的会混淆吗)
一.前言 今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了,因此决定花点时间写篇博客记录一下,方便以后查找和自己的记忆. 二.Android S ...
- iOS攻防 - (十三)基本工具的使用OpenSSH, iFile, MTerminal和syslogd
iOS攻防 - (十三)基本工具的使用OpenSSH, usbmuxd, iFile, MTerminal和syslogd 1. OpenSSH OpenSSH是一个远程安全登录的工具 在Cydia里 ...
- Java代码设计模式讲解二十三种设计模式
设计模式 文章目录 设计模式 一.创造型设计模式 1.1 单例模式 1.1.1 饿汉式单例模式 1.1.2 懒汉式单例模式 (1)线程不安全的情况 (2)线程安全的情况 1. 实例化的方法上加sync ...
- iOS 初探代码混淆(OC)
前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了.但是最近,客户方面提出了代码安全的要求.说是要做代码混淆,这方面的工作之前从来没有接触过. ...
- 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Web渗透的第一步工作,涉及网站信息.域名信息.端口信息.敏感信息及指纹 ...
- iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3)
iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3) 2.使用代码添加按钮实现的响应 使用代码添加的按钮,实现响应需要使用到addTarget(_:action:for:)方法,其语法形 ...
最新文章
- 探测服务器操作系统工具,探测服务器操作系统
- Delphi 调用webservice接口
- P3375 【模板】KMP字符串匹配 (KMP模板)
- too many connections 解决方法
- C# 获取属性的displayName
- pandas最大的时间间隔_pandas计算最大连续间隔的方法
- sklearn自学指南(part46)--新颖性和离群值检测方法概述
- Linux远程批量工具mooon_ssh和mooon_upload使用示例
- Fiddler 学习笔记
- 单链表的实现【数据结构】
- C++模板之一:函数模板.odt
- Cocos2d-x Tiled地图编辑器(一)基本使用
- 根据交换方式可以把交换机划分为3种:存储转发交换、直通式交换、碎片过滤式交换
- Linux -- 特殊权限 (转)
- 机器学习第六回(完结篇)
- UGUI ScrollRect使用
- 消息钩子函数入门篇(1)--基础知识
- JavaScript Backdoor
- 我的世界中国版服务器家园系统,《我的世界》中国版“暑期更新”上线 家园系统休闲玩法亮点...
- 粗略的学习一下结巴分词
热门文章
- Debian 官方下载地址
- 富途php面试经验,忍不住想吐槽一下富途二面体验
- switch语句总结
- pyspark 数据类型转换_PySpark之DataFrame的创建与转换
- C++解决:不存在从 “std::string” 到 “LPCWSTR” 的适当转换函数
- python预测糖尿病_使用决策树与随机深林预测糖尿病(python)
- Emacs Stardict
- 竞争情报分析工具Alexa
- 论文笔记_SIGGRAPH2019会前课程:An Introduction to Physics-Based Animation_3
- 【ESP32_8266_WiFi (十五)】ESP8266 OTA 操作说明