iOS class-dump反编译和代码混淆
2018-01-09 16:50
375 查看
参考链接
一、class-dump反编译
1、由于/usr/bin/在OS X 10.11上没有权限了,将解压后的class-dump,拖入到 /usr/local/bin/class-dump中
2、打开终端,cd /usr/local/bin/class-dump
3、修改class-dump的权限:sudo chmod 777 /usr/local/bin/class-dump/class-dump
4、输入class-dump会出现它的相关命令,说明class-dump安装正确
5、将打包的ipa反编译下,.ipa改成.zip,并解压
6、右击—显示包内容,找到如下有个白框黑底的
7、将其复制到桌面tt文件夹中,在终端中输入相关命令
先进入class-dump的路径中,cd /usr/local/bin/class-dump/
class-dump -H /Users/xxx/Desktop/tt/ConfigXcodeDemo -o /Users/xxx/Desktop/tt/
然后在tt文件中就可以看到多出的很多.h文件
-H 是要反编译的文件位置
-o 是反编译后文件存储的位置
二、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文件中,输入以下代码,注意路径
注意:需要将ycf换成你自己的函数前缀
3、在项目——Target——Build Phases中 新增New Run Script Phase
4、将新建的头文件PrefixHeader.pch中导入codeObfuscation.h
5、将新建的PrefixHeader.pch头文件添加到Xcode中去
在Build Settings中搜索Prefix Header,在Prefix Header中写入我们新建头文件的路径
6、运行项目,但是会报如下问题
是说confuse.sh没有权限,那么我们cd 到 Resource文件夹中,查看它的权限,发现它没有执行权限,将其修改有可执行的权限
cd /Users/xxx/demo/YCFMixConfuseDemo/YCFMixConfuseDemo/Resource
查看某个文件的权限 ls -l 文件名
chmod a+x 文件名 给该文件可执行权限,a是所有人
7、这次就可运行了,但是发现第一次的运行后,然后使用本文的第一部分的class-dump来反编译发现,并没有代码并没有混淆,再次运行后,相关以ycf_开头的函数名才被混淆
appdelegate中原来的函数名
混淆后
在ViewController中方法名混淆前
混淆后
一、class-dump反编译
1、由于/usr/bin/在OS X 10.11上没有权限了,将解压后的class-dump,拖入到 /usr/local/bin/class-dump中
2、打开终端,cd /usr/local/bin/class-dump
3、修改class-dump的权限:sudo chmod 777 /usr/local/bin/class-dump/class-dump
4、输入class-dump会出现它的相关命令,说明class-dump安装正确
5、将打包的ipa反编译下,.ipa改成.zip,并解压
6、右击—显示包内容,找到如下有个白框黑底的
7、将其复制到桌面tt文件夹中,在终端中输入相关命令
先进入class-dump的路径中,cd /usr/local/bin/class-dump/
class-dump -H /Users/xxx/Desktop/tt/ConfigXcodeDemo -o /Users/xxx/Desktop/tt/
然后在tt文件中就可以看到多出的很多.h文件
-H 是要反编译的文件位置
-o 是反编译后文件存储的位置
二、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 c9b0 '{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
注意:需要将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
是说confuse.sh没有权限,那么我们cd 到 Resource文件夹中,查看它的权限,发现它没有执行权限,将其修改有可执行的权限
cd /Users/xxx/demo/YCFMixConfuseDemo/YCFMixConfuseDemo/Resource
查看某个文件的权限 ls -l 文件名
chmod a+x 文件名 给该文件可执行权限,a是所有人
7、这次就可运行了,但是发现第一次的运行后,然后使用本文的第一部分的class-dump来反编译发现,并没有代码并没有混淆,再次运行后,相关以ycf_开头的函数名才被混淆
appdelegate中原来的函数名
混淆后
在ViewController中方法名混淆前
混淆后
相关文章推荐
- iOS安全——代码混淆&反编译
- android打包混淆代码编译会出现很多warling,然后编译失败问题解决办法
- Android代码混淆第三方jar,can't find referenced class的解决
- iOS代码混淆-基础篇
- iOS编译报错:objc-class-ref in AppDelegate.o之解决方案
- 工作备忘-ios应用安全防护oc源代码混淆,防止class-dump攻击
- java class反编译后的代码还原
- iOS编译报错: "_OBJC_CLASS_$_QQApiInterface", referenced from: XXXXXX.o
- Android代码混淆第三方jar,can't find referenced class的解决
- 代码混淆—android被反编译的两种解决方案
- iOS程序安全-代码混淆
- Android 代码混淆 防止反编译
- iOS安全攻防(六)使用class-dump导出Frameworks头文件
- iOS安全攻防(六)使用class-dump导出Frameworks头文件
- iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可!
- 编译java代码出现 错误: 需要class, interface或enum 提示
- class-dump获取部分iOS app头文件信息
- android混淆编译出错java.lang.Class cannot be cast to java.lang.reflect....
- IOS编译报错:objc-class-ref in AppDelegate.o之解决方案 Xcode7
- iOS 初探代码混淆(OC)