iOS 代码安全加固--反编译和代码混淆
一、class-dump反编译
1、将打包的ipa反编译下,.ipa改成.zip,并解压
6、右击—显示包内容,找到如下有个白框黑底的
7、将其复制到桌面xx文件夹中,在终端中输入相关命令
cd 进入xx文件夹
class-dump -H 二进制文件名字
然后在tt文件中就可以看到多出的很多.h文件
二、ios代码混淆
1、在项目的Resource文件夹中新建
脚本文件:confuse.sh,
宏定义文件:codeObfuscation.h,
函数列表文件:func.list,
头文件:PrefixHeader.pch
可脚本创建
cd 项目/YCFMixConfuseDemo/Resource
touch confuse.sh
touch func.list
touch codeObfuscation.h
touch PrefixHeader.pch
此处使用的混淆方法是:将一些以ycf_xxx开头的方法替换成随机的字符,目前该方法只能针对1个的参数的方法
2、在confuse.sh文件中,输入以下代码,注意路径
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="$PROJECT_DIR/YCFMixConfuseDemo/Resource/func.list"
CONFUSE_FILE="$PROJECT_DIR/YCFMixConfuseDemo"
HEAD_FILE="$PROJECT_DIR/YCFMixConfuseDemo/Resource/codeObfuscation.h"
export LC_CTYPE=C
#取以.m或.h结尾的文件以+号或-号开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.list
grep -h -r -I "^[-+]" $CONFUSE_FILE --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *\^\/\{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^ycf_/p" >$STRING_SYMBOL_FILE
#维护数据库方便日后作排重,一下代码来自念茜的微博
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
注意:需要将ycf换成你自己的函数前缀
3、在项目——Target——Build Phases中 新增New Run Script Phase
4、将新建的头文件PrefixHeader.pch中导入codeObfuscation.h
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
// Include any system framework and library headers here that should be included in all compilation units.
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
#import "codeObfuscation.h"
#endif /* PrefixHeader_pch */
5、将新建的PrefixHeader.pch头文件添加到Xcode中去
在Build Settings中搜索Prefix Header,在Prefix Header中写入我们新建头文件的路径
6、运行项目,但是会报如下问题
/Users/xxx/Library/Developer/Xcode/DerivedData/YCFMixConfuseDemo-bampqtmksvysbbbaixdeifkkoaqd/Build/Intermediates.noindex/YCFMixConfuseDemo.build/Debug-iphonesimulator/YCFMixConfuseDemo.build/Script-1ED6530E2004577400286FE9.sh: line 2: /Users/youchunfen/Desktop/项目复件/demo/YCFMixConfuseDemo/YCFMixConfuseDemo/Resource/confuse.sh: Permission denied
- 1
是说confuse.sh没有权限,那么我们cd 到 Resource文件夹中,查看它的权限,发现它没有执行权限,将其修改有可执行的权限
cd /Users/xxx/demo/YCFMixConfuseDemo/YCFMixConfuseDemo/Resource
查看某个文件的权限 ls -l 文件名
chmod a+x 文件名 给该文件可执行权限,a是所有人
7、这次就可运行了,但是发现第一次的运行后,然后使用本文的第一部分的class-dump来反编译发现,并没有代码并没有混淆,再次运行后,相关以ycf_开头的函数名才被混淆
appdelegate中原来的函数名
混淆后
在ViewController中方法名混淆前
混淆后
iOS 代码安全加固--反编译和代码混淆的更多相关文章
- JD-GUI反编译后代码逻辑分析
一,用jd-gui.exe等工具查看源代码.如何你不会,可以参看此文章: http://blog.csdn.net/hp_2008/article/details/8207879 可以到以下连接下载可 ...
- Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...
- Android Apk的反编译与代码混淆
一.反编译 1.获取工具: 既然是反编译,肯定要用到一些相关的工具,工具可以到这里下载,里面包含三个文件夹,用于反编译,查看反编译之后的代码: 其实这两工具都是google官方出的,也可在google ...
- Android - 使用JD-GUI反编译Android代码
使用JD-GUI反编译Android代码 本文地址: http://blog.csdn.net/caroline_wendy Android程序出现Bug时,须要依据Bug寻找问题出错的地方; 须要使 ...
- Android反编译(未混淆的apk)
Android反编译(未混淆的apk) 工具 dex2jar 下载地址:我的CSDN 或者 官网 jd-gui 下载地址:我的CSDN 或者 官网 反编译步骤 1. 将APK解压缩,获取classes ...
- (转)unity3D 如何提取游戏资源 (反编译)+代码反编译
原帖:http://bbs.9ria.com/thread-401140-1-1.html 首先感谢 雨松MOMO 的一篇帖子 教我们怎么提取 .ipa 中的游戏资源.教我们初步的破解unity3d资 ...
- 实现android apk反编译后代码混淆
通常情况下我们需要对我们开发的android代码进行混淆,以免代码在反编译时暴露敏感信息及相关技术代码: 反编译测试工具:onekey-decompile-apk-1.0.1. 在高级版本的adt创建 ...
- apk应用的反编译和源代码的生成
对于反编译一直持有无所谓有或无的态度.经过昨天一下午的尝试,也有了点心得和体会: 先给大家看看编译的过程和我们反编译的过程概图吧: 例如以下是反编译工具的根文件夹结构: 三个目录也实际上是下面三个步骤 ...
- android APK反编译及代码混淆
反编译.查看源代码,需要用到两个工具:dex2jar 和 jdgui dex2jar(google code) jdgui(google code),最新版本请见 官方 操作很简单,步骤如下: 1.将 ...
随机推荐
- 【java】查重类的实现
import java.util.Vector; public class ElementCheck { // 重复优先 static Vector<Integer> CheckSameE ...
- 01CSS使用方法
CSS使用方法 内联定义 内联定义即是在对象的标记内使用对象的style属性定义适用其的样式表属性. 内部样式表 <style type="text/css"></style> ...
- 获取汉字的拼音首字母--pinyin
var pinyin = (function (){ var Pinyin = function (ops){ this.initialize(ops); }, options = { checkPo ...
- [Python3网络爬虫开发实战] 1.7.2-mitmproxy的安装
mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler.Charles的功能,只不过它通过控制台的形式操作. 此外,mitmproxy还有两个关联组件,一个是mitmdump, ...
- Nginx出现403 forbidden (13: Permission denied)报错的四种原因
一.由于php-fpm启动用户和nginx工作用户不一致所致 php-fpm启动用户配置位置 nginx工作用户配置位置 二.不存在在文件,可能是文件路径有误,可以查看nginx错误日志来判断 三.缺 ...
- python3.x Day5 socket编程
socket编程: socket 是大多应用层的底层的封装,实际封装的就是 发送,接收,但其实很复杂,在传输层协议之上(TCP/IP,UDP) 既然是网络通讯,一般按照服务端,客户端来处理:服务端: ...
- PDO、PDOStatement、PDOException
最近在学PDO 比较详细的资料 出处:http://blog.csdn.net/hsst027/article/details/23682003 PDO中包含三个预定义的类,它们分别是PDO.PDO ...
- centOS7+mariadb+Nginx+PHP7.0 安装
1.前期准备工作 更新 yum 源,自带的源没有 PHP5.6 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7 ...
- Poj 1106 Transmitters
Poj 1106 Transmitters 传送门 给出一个半圆,可以任意旋转,问这个半圆能够覆盖的最多点数. 我们枚举每一个点作为必然覆盖点,那么使用叉积看极角关系即可判断其余的点是否能够与其存在一 ...
- 【01】emmet系列之基础介绍
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 相关网址 官网:http: ...