iOS 代码混淆
一般做了防调试的话,被调试进程会退出的,是防动态分析措施。
代码混淆加花这些是防静态分析措施.
反调试是防动态分析措施.
混淆的方法
方法名混淆其实就是字符串替换,有2个方法可以,一个是#define,一个是利用tops。
利用#define的方法有一个好处,就是可以把混淆结果合并在一个.h中,在工程Prefix.pch的最前面#import这个.h。不导入也可以编译、导入则实现混淆。
单段的selector,如func: ,可以通过#define func 来实现字符串替换。
多段的selector,如a:b:c: ,可以通过分别#define a 、b、c 来实现字符串替换。
注意!!!
1.不可以混淆iOS中的系统方法;
2.不可以混淆iOS中init等初始化方法;
3.不可以混淆xib的文件,会导致找不到对应文件;
4.不可以混淆storyboard中用到的类名;
5.混淆有风险,有可能会被App Store 拒掉。
代码易读字符串混淆
混淆分许多思路,比如:
1)花代码花指令,即随意往程序中加入迷惑人的代码指令
2)易读字符替换
防止class-dump出可读信息的有效办法是易读字符替换
1. cd到你自己的项目目录级
2. 创建两个文件:
命令 :touch confuse.sh
touch func.list
confuse.sh: 存放混淆的脚本
func.list: 需要混淆的方法、变量名
3..配置Build Phase
在工程Build Phase中添加执行脚本操作,执行confuse.sh脚本
这里需要注意的是 $PROJECT_DIR/confuse.sh 这个的路径和创建pch文件时的路径是一样的,$PROJECT_DIR代表整个工程,/confuse.sh是这个文件的路径。

chmod 755 confuse.sh或chmod 777 confuse.sh 给我们的脚本本间授权codeObfuscation.h文件,(在代码的本地目录里有,show in Finder 看下,能找到)codeObfuscation.h文件。#import "codeObfuscation.h"
---------------------------------------------------------


#ifndef Demo_codeObfuscation_h
#define Demo_codeObfuscation_h
---------confuse.h---------
#!/usr/bin/env bash TABLENAME=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
createTable touch $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; do
if [[ ! -z "$line" ]]; then
ramdom=`ramdomString`
echo $line $ramdom
insertValue $line $ramdom
echo "#define $line $ramdom" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE sqlite3 $SYMBOL_DB_FILE .dump
iOS 代码混淆的更多相关文章
- iOS 代码混淆的简单使用
1.工具下载 http://stevenygard.com/projects/class-dump/ 选择dmg安装包 2.打开终端输入:open/usr/local/bin 3. 4.修改权限在 ...
- iOS 代码混淆--pch实现
之前实现代码的混淆一般是使用sh脚本,不过也是需要把一写需要混淆的方法写到一个文件中(除非是使用特定的命名规范统一混淆), 现在发现,实现代码的混淆pch 文件就可以轻松完成! 1,在新建的工程中 创 ...
- iOS代码混淆
混淆原理 代码编译阶段将符号(方法名.属性名等)替换成随机生成的字符串 长话短说,直接上步骤. 混淆集成步骤 步骤一.创建shell文件(confuse.sh)并配置相应的运行环境. 在项目根目录下新 ...
- iOS 代码安全加固--反编译和代码混淆
一.class-dump反编译 1.将打包的ipa反编译下,.ipa改成.zip,并解压 6.右击—显示包内容,找到如下有个白框黑底的 7.将其复制到桌面xx文件夹中,在终端中输入相关命令 cd 进 ...
- iOS安全攻防(二十三):Objective-C代码混淆
iOS安全攻防(二十三):Objective-C代码混淆 class-dump能够非常方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完好的程序给同行留下笑柄. 所以 ...
- iOS安全攻防之代码混淆
iOS 代码安全之代码混淆实践: 前言: 在8月份的时候写了个关于 class-dump 反编译的文章(使用 Class-dump 反编译),利用 class-dump 工具可以反编译出工程的头文件, ...
- iOS 初探代码混淆(OC)
iOS 初探代码混淆(OC) 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了.但是最近,客户方面提出了代码安全的要求.说是要做代码混淆,这 ...
- ios -逆向-代码混淆
该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆 代码混淆,刚刚看到是不是有点懵逼,反正我是最近才接触到这么个东西,因为之前对于代码和APP,只需要实现功能就好了,根本没有考虑 ...
- 代码混淆 iOS
该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆 代码混淆,刚刚看到是不是有点懵逼,反正我是最近才接触到这么个东西,因为之前对于代码和APP,只需要实现功能就好了,根本没有考虑 ...
随机推荐
- Lnmp下pureftpd新建FTP账户权限不足解决方法
解决办法: 登录服务器.执行以下命令 chattr -i /home/wwwroot/default/.user.ini chown www:www -R /home/wwwroot/你的lnmp安 ...
- ubuntu 16.04 安装 kubelet、kubeadm 和 kubectl
解决了***之后,就开始K8S安装的正式旅程,本次记录 kubelet.kubeadm 和 kubectl 的安装: apt-get update && apt-get instal ...
- Django ----- app 和 ORM的操作和介绍
创建APP ORM 介绍 ORM的操作 说明一下 GET 和 POST 的区别: , GET ①获取一个页面 ②提交数据 数据显示在URL ?user=alex&pwd=alexdsb ,PO ...
- es6 filter() 数组过滤方法总结
1.创建一个数组,判断数组中是否存在某个值 var newarr = [ { num: , val: 'ceshi', flag: 'aa' }, { num: , val: 'ceshi2', fl ...
- Google Android SDK开发范例大全笔记 一
方法讲解 1 获取手机分辨率方法 DisplayMetrics private void getDiaplayMetrics() { DisplayMetrics dm = new DisplayMe ...
- Accumulation Degree
#include<cstdio> #include<cstring> #define INF 0x7fffffff using namespace std; ; inline ...
- Peer-to-Peer (P2P) communication across middleboxes
Internet Draft B. FordDocument: draft-ford-midcom- ...
- 阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试
阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试 结论: 优先选择CentOS/Ubuntu,可选AliyunLinux(CentOS修改版) ...
- spark MLlib Classification and regression 学习
二分类:SVMs,logistic regression,decision trees,random forests,gradient-boosted trees,naive Bayes 多分类: ...
- 全文搜索引擎——Solr
1.部署solr a.下载并解压Solr b.导入项目(独立项目): 将解压后的 server\solr-webapp 下的 webapp文件夹 拷贝到tomcat的webapps下,并重命名为 so ...