前言
本工具用于应对苹果对重复应用的审核(Guideline 4.3 Design Spam),避免苹果机审检测概率。
p2.png图片一
图片二
- 修改工程名
- 修改类名前缀
- 扫描工程中的代码,生成同等数量的 Category 文件,文件中及是同等方法数量的垃圾代码。
- 修改 xxx.xcassets 文件夹中的 png 资源文件名。
- 删除代码中的所有注释和空行。
使用
使用源码
- 下载源码。
- 用 Xcode 打开工程并配置参数。如图
- 运行
使用二进制文件,在终端中执行 GenerateSpamCode
$ ./GenerateSpamCode \
/Users/kelei/Documents/work/git/projectName/source \
-deleteComments
参数说明
-
(必填) 源码文件夹绝对路径(如:
/Users/kelei/Documents/work/git/projectName/source
) -
-modifyProjectName [原名称]>[新名称] 修改工程名。程序会修改
原名称-Swift.h
、Podfile
、原名称-Bridging-Header.h
、源码文件夹绝对路径
、原名称.xcodeproj
和原名称.xcworkspace
的名称和内容。Podfile
被修改后需要手动pod install
-
-modifyClassNamePrefix [工程文件 xcodeproj 绝对路径] [原前缀]>[新前缀] 修改源代码类名前缀。程序会扫描
源码文件夹绝对路径
下的 .h .swift 文件,修改文件名,修改使用该类名的代码,修改工程文件
中的文件名。文件名有原前缀
的会修改成新前缀
,如:原前缀ViewController
变成新前缀ViewController
;没有原前缀
的会增加新前缀
,如:ViewController
变成新前缀ViewController
。 -
-spamCodeOut [垃圾代码文件输出目录] [垃圾代码方法增加的参数名] 生成垃圾代码。程序会扫描
源码文件夹绝对路径
下的 .m .swift 文件中的类和方法,并生成category
和extension
文件,文件中的方法是在代码原方法的基础上增加垃圾代码方法增加的参数名
参数。如:-spamCodeOut /dir AppLog
,会将- (void)setupKeys {}
生成为+ (BOOL)setupKeysAppLog:(NSInteger)AppLog { return AppLog % 20 == 0; }
,会将- (void)foo:(NSString *)str {}
生成为+ (BOOL)fooAppLog:(NSInteger)AppLog { return AppLog % 23 == 0; }
-
-ignoreDirNames [忽略文件夹名称字符串] 忽略这些文件夹,对
-modifyClassNamePrefix
、-spamCodeOut
和-deleteComments
参数有效。目前只会忽略源码文件夹绝对路径
下一级的这些目录。如:/p/s -ignoreDirNames categorys
,那么/p/s/categorys
会被忽略,但/p/s/viewControllers/categorys
不会忽略。 -
-handleXcassets 修改
xxx.xcassets
文件夹中的 png 资源文件名,同时也Contents.json
文件中的关联名称,不会影响代码中使用图片。 - -deleteComments 删除工程目录下 .h .m .swift 文件中的注释和空行。
另外修改图片 hash 值的方法
使用 ImageMagick 对 png 图片做轻量压缩,及不损失图片质量,又可改变图片文件 hash 值。方法:
- 安装 ImageMagick,
brew install imagemagick
- 压缩工程目录下所有 png 文件,
find . -iname "*.png" -exec echo {} \; -exec convert {} {} \;
使用经验
就我 2017-11 月的提交情况来看,只需要做如下修改就可以上马甲包了。
- 修改工程名
- 修改类名前缀
- 修改图片文件 Hash 值
- 修改 .xcassets 中的图片文件名
- 用别的电脑打包
已知问题
- 生成的垃圾代码文件可能是 .m 文件中实现的私有类,编译垃圾代码可能会报错,删除该垃圾代码 .h .m 文件及可。
git混淆代码地址:
二、修改方法名
先会class-dump. O(∩_∩)O谢谢。推荐San心两yi_钟的安装步骤
先大致解释一下“编译"、"反编译":
编译:就是把千千万万行字符串(也叫代码,或者源文件),变成010101010101(机器码,也叫目标代码)
编译过程:预处理-编译-汇编-链接
我的脚本运行在预处理阶段。
反编译:就是把0101010111110001100(机器码,也叫目标代码),变成千千万万行字符串(也叫代码,或者源文件)
最近三年一直待在银行做App,由于银行对安全要求较高,所以iOS的代码必须要有混淆的措施,初期实施了[念茜姐](http://blog.csdn.net/yiyaaixuexi/article/details/29201699)的混淆方案,但是领导说,我们要自动混淆,方法名字不能一个一个的添加到func.list中,所以方法名只能从.m和.h文件中抽取了,但是如何屏蔽系统的方法名,暂行的策略是:将自己定义的方法名全部添加一个前缀。
例如 “hsk_funtion1”; “hsk_funtion2”;“hsk_funtion3”;
在Xcode-->Target--->Build Phases--->添加Run Script
通过class-dump 反编译之后:Appdelegate 效果
通过class-dump 反编译之后:ViewController 效果
codeObfuscation.h宏定义文件、confuse.sh脚本文件、func.list函数列表文件的关系。
程序每次预处理,都就会执行confuse.sh,从.m和.h文件中按照"一定的规则"抽取需要混淆的函数名,全部写到func.list中,然后再从func.list中逐行提取函数名进行宏定义,宏定义使用随机字符串,然后写到codeObfuscation.h文件中。
func.list函数列表抽取,和宏定义是脚本自动完成,不需要手动抽函数和手动宏定义呢。
您的星星,是我最大的鼓励。最近想把HSKConfuse集成到CocoaPods,敬请期待。O(∩_∩)O谢谢
另送一份:iOS 脚本打包 傻瓜版,无需改变配置 github地址
网友评论