Objective-C代码混淆之宏替换

来源:互联网 发布:如何注册淘宝联盟 编辑:程序博客网 时间:2024/05/27 20:21

我是安照念茜大婶的方法来混淆的。感谢


混淆之前你要会class-dump出.app来查看混淆结果


https://cnbin.github.io/blog/2015/05/21/objective-c-class-dump-an-zhuang-he-shi-yong-fang-fa/

这个是class-dump的安装与使用的git;

在class-dump 安装有个问题要注意:当 把 IMG放到/usr/local/bin目录下,在终端输入class-dump,显示class-dump的版本后,就可以正常使用class-dump命令了。 时可能没有权限移动。要重启mac commod+r进入关闭权限。

/usr/local/bin这个目录没用,要放到/usr/bin/目录下



混淆的方法

方法名混淆其实就是字符串替换,是#define,宏替换
利用#define的方法有一个好处,就是可以把混淆结果合并在一个.h中,在工程Prefix.pch的最前面#import这个.h。不导入也可以编译、导入则实现混淆。


使用脚本替换方法名(很简单也有一点点low) 第一、新建一个工程,在工程项目路径中建立一个confuse.sh、一个func.list文件先打开终端,然后 cd 到你的项目工程路径下: cd 到项目工程路径下然后创建两个文件,一个 confuse.sh,一个 func.list: 注意点,不按照下面两个操作,运行脚本会报错目录结构不要错

层级目录不要错

创建两个文件这时候我们打开这个工程文件夹,可以看到,这两个文件已经创建好了:  我们创建的两个文件打开工程,把刚才创建的两个文件加进去,右键你的项目蓝色标志,然后选择 Add Files to...: 添加到工程中

添加进去了:  成功添加点击 confuse.sh**(confuse.sh,和func.list必须添加到NSUTest目录下)**发现还是空白的,什么都没有,现在要在这上面加上代码了: 需要添加的代码原脚本代码出自:http://blog.csdn.net/yiyaaixuexi/article/details/29201699 第二、在 .pch 文件中添加代码不要跟我说你的工程没有 .pch 文件,如果真没有,自行百度,这应该算是标配,常识来的。


重点讲下.pch文件: 记得配置路径 (我就是在这没配置一直dump都是没混淆)

.pch文件

#import "codeObfuscation.h" 
这个是全局引用宏定义 ,其实也可以你混淆那个文件的就在那个文件导入这个头文件

配置PCH : 
1.创建pch 
2.在building settings 中 设置 Apple LLVM 7.1 language 
3.Precompile Prefix Header 设置为YES 下一行 
Prefix Heaser 设置内容为: $(SRCROOT)/网易新闻/pchFile.pch

这里写图片描述

这里写图片描述



#ifdef __OBJC__  #import <UIKit/UIKit.h>  #import <Foundation/Foundation.h>  //添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)  
#import "codeObfuscation.h" 
#endif

写到这里,编译的时候是不是发现报错啦?刚才的 .pch 文件里面的添加的代码居然报错了: 报错了!不要慌,先把那句报错的先给注释掉:  先注释掉报错的这一行代码然后我们继续往下走! 第三、配置 Build Phase1:添加 Run Script 添加 Run Script

2:配置好 Run Script  配置好 Run Script然后再回到终端,同样先 cd 到工程目录下,接着我们要打开刚才 .sh 这个脚本文件的运行权限,因为默认是没有这个权限的,在终端输入以下指令:  打开运行权限回车,搞定,回到我们的工程,先 command + b 编译一下工程,然后再把我们刚刚注释掉的那句代码解开:  打开刚刚被我们注释掉的代码再次 command + b 编译,现在是不是编译通过啦?刚刚报错的,现在解决了! 基本上就搞定了,剩下的就是添加上我们想要混淆的变量名或函数名 第四、在 func.list 文件里,写入待混淆的函数名如果像下面这几个属性跟函数:  需要混淆的属性跟函数名那么就这在 fun.list 就这么列出来就好了:  列出需要混淆的,大功告成!现在 command + b 运行一下,然后在哪里看结果呢,请看这里: 运行结果可能这么看有点麻烦,那来个简单一点的:  查看哈哈,你会发现,多了好多宏定义,其实就是我们刚才的字段来的:  结果当然,这也只是最简单的代码混淆而已,APP安全还是有很多需要注意的。一步一步来吧! **最后需要说明,出现下图所示的这里并不一定说明代码混淆成功,只能说明你的脚本运行成功,.pch文件中一定要导入#import "codeObfuscation.h"**最好对自己混淆的代码 打包成ipa进行dump,查看你混淆的头文件的函数名是不是随机的字符串了. Snip20160816_11.png


你要亲自.app calss-dump 才能够看到混淆没混淆


这是其他大神的混淆

https://github.com/housenkui/HSKConfuse

这个  ZM大神的我没看懂,但也是混淆的一个办法,这个很厉害
http://blog.csdn.net/zm53373581/article/details/49053269
https://github.com/kongcup/ZMConfuse