iOS 代码混淆 KLGenerateSpamCode 代码生成
iOS 代码混淆 ,记录一下。
前言:因为iOS的生态是苹果公司闭环开发的,所有的app项目上传到apple store ,都会经过第一步机检,会验证代码的可读性,当代码的重复率雷同率相当高时直接会被标记成4.3 被拒打回。所以才会有现在的iOS代码混淆,减少代码移植的雷同率、重复率、以及提高app被iOS逆向破解的难度。注意:代码混淆本质上是用工具或者脚本生成大量的无实际效果的分类代码也叫垃圾代码,所以建议不要混淆超过源码30%的代码。
注意混淆前代码千万千万记得备份!
注意混淆前代码千万千万记得备份!
注意混淆前代码千万千万记得备份!
凡事留有余地即可
一,KLGenerateSpamCode 下载地址:https://github.com/klaus01/KLGenerateSpamCode (包含使用方法)
二,这里只做简要概述。
1,KLGenerateSpamCode 功能:
1),修改工程名
2),修改类名前缀
3),扫描工程中的代码,生成同等数量的 Category 文件,文件中及是同等方法数量的垃圾代码。
4),修改 xxx.xcassets 文件夹中的 png 资源文件名。
5),删除代码中的所有注释和空行。
简单介绍一下使用方法:
2,使用Xcode 打开工程KLGenerateSpamCode,Xcode -> Product -> Scheme -> Edit Scheme,然后选中 Run -> Arguments -> Arguments Passsd On Launch->点击“+”号,根据自己需求,配置信息。
(必填) 源码文件夹绝对路径(如:/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 文件中的注释和空行。
3,配置完xcode KLGenerateSpamCode后,直接用xcode 运行KLGenerateSpamCode
注意:注意设置文件路径问题(重要哦!!!)
image.png image.png
image.png
这些选项第一个项目绝对路径必选,其他的可以随意搭配测试
参考链接:https://www.jianshu.com/p/a520632e3c8e