oc代码混淆_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是这个文件的路径。
4. 然后command + B编译一下,如果报错了就cd到项目的目录级下,然后输入命令行 chmod 755 confuse.sh或chmod 777 confuse.sh 给我们的脚本本间授权
5. 成功之后会自动生成一个codeObfuscation.h文件,(在代码的本地目录里有,show in Finder 看下,能找到)
6.然后在pch文件中导入codeObfuscation.h文件。
打开项目,修改XXX-Prefix.ch ,添加混淆头文件:
#import "codeObfuscation.h"
---------------------------------------------------------
func.list 里写要混淆的方法
confuse.sh 写混淆的脚本
codeObfuscation.h 里会自动生成替代func.list里的方法
#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
oc代码混淆_iOS 代码混淆相关推荐
- oc代码混淆_OC代码混淆工具
之前用python写了一个OC代码混淆脚本(python脚本),每次运行不方便,且其他人使用起来困难,就尝试写了一个mac工具. 工具地址:点我下载 密码:2405 现阶段工具还处于初级阶段,功能 ...
- oc代码混淆_oc代码混淆
#!/usr/bin/env python#coding=utf8 importosimportreimportrandom#规避文件夹 exclude_dirs = ["JBSDKOthe ...
- android 代码签名apk,[Android]混淆代码后生成带签名的apk
Android从2.3的SDK开始,将ProGuard混淆代码的功能加入了进来. 我们可以从android sdk的tools目录下看到有一个proguard目录.说明具有了代码混淆的功能. 至于如何 ...
- java proguard 使用_使用proguard混淆java9代码
序 本文主要研究一下如何使用proguard混淆java9代码 maven com.github.wvengen proguard-maven-plugin package proguard 6.0. ...
- 安卓逆向_18 --- APK保护策略【Java代码混淆、资源混淆、签名校验】
Java 代码混淆介绍:https://www.bilibili.com/video/BV1UE411A7rW?p=60 Android 反编译利器 jadx:GitHub上直接下载:https:// ...
- Android逆向笔记-Proguard混淆Android代码以及去打印日志信息
本笔记只记录其现象和功能,不记录具体怎么去用他. 这个Proguard全称应该是project guard,用来混淆Android代码的.如下未使用Proguard的类: 使用Proguard后: 这 ...
- Android Studio禁止混淆JNI代码
1.在AS项目工程下: app/proguard-android.txt 或:app/proguard-rules.pro 禁止混淆JNI代码: # 设置所有 native 方法不被混淆 -keepc ...
- Android APK代码混淆与资源混淆详解,你确定不看?
APK的混淆分为资源混淆与代码混淆.一般大部分都使用两者结合.尤其是目前主流的应用. 其中的优点: 防止被恶意破解逆向分析 减少apk体积,也是瘦身的方法 代码可阅读性降低 其中的缺点: 调试不方便( ...
- Android高级混淆和代码保护技术
本文讲的是 Android高级混淆和代码保护技术, 这是一篇关于 Android 代码保护的文章,旨在介绍代码混淆.防止逆向工程的各种高级技巧.大家都很忙,我也赶着回去继续开发我的新应用,因此话不多说 ...
最新文章
- 如何学习android高级编程
- 利用SAP FR高效预测客户需求
- g++ 4.4.7 template 没问题,前面应该程序问题!!
- c#_按值传递与按引用传递的区别
- AI修行三十篇文章到不惑,已经掌握了什么,接下来还要说什么
- qt: 获取sql数据表的所有的字段;
- 【渝粤题库】陕西师范大学210029 幼儿园游戏(学前儿童游戏)作业
- ASP.Net网站部署失败
- C#如何使用httpwebrequest通过代理访问网页
- GNU/Linux下有多少是GNU的?
- 获取到的数组在webview中成了字符串
- linux上apache和php结合
- 金融科技领域的安全威胁及金融科技安全分析
- 万年历代码java功能_java 的万年历代码
- 恒河aq7275测试软件,横河-AQ7275OTDR测试培训技巧.ppt
- 基于Vue的移动端h5页面的电子签名
- 长方形面积计算机方式,长方形正方形面积计算
- 计算机地图制图pdf,计算机地图制图(资料).pdf
- 洛谷P1308 统计单词数
- 2017 蓝桥杯决赛 C++B(2)瓷砖样式 dfs + hash去重