Jerry's Blog

Less is more, Live and learning

Hello,I'm an iOS developer in China.


iOS代码混淆之资源替换(二)

这是iOS代码混淆系列文章的第二篇,其他两篇可以点击下方链接查看

iOS代码混淆之方法名替换(一)

iOS代码混淆之编译优化(三)

为什么要替换项目资源

在某些公司项目开发当中 ,有时候需要通过技术手段,多次上架同一款产品。这些功能类似,且界面不同的产品也称作马甲包。为了达到将同一个包,经过较少的改动,快速更改为另一个类似的产品时,在代码混淆的基础之上还需要修改项目名称、静态资源等来达到目的。

需替换的资源及注意事项

  • 工程内部:工程名称、类名前缀、BundleId、icon、启动图、静态资源等
  • 产品界面:整体UI布局配色、产品功能逻辑、Tabbar顺序等
  • 打包机器:更换打包电脑、使用WIFI网络、使用Application Uploader 上传不同二进制包

工具介绍及实践

KLGenerateSpamCode是在GitHub上开源的一个可快速修改项目名称、文件前缀、生成垃圾代码等功能的集成工具,可方便的实现上述部分资源替换的功能。具体功能如下:

  • 修改工程名
  • 修改类名前缀
  • 扫描工程中的代码,生成同等数量的 Category 文件,文件中及是同等方法数量的垃圾代码。
  • 修改 xxx.xcassets 文件夹中的 png 资源文件名。
  • 删除代码中的所有注释和空行。

由于在使用此工具之前,需要先配置修改参数,通过这些参数程序可以自动的修改项目中所需的内容,下面是从使用的角度对各项参数的解释:

# 1. 项目名地址,注意:不是项目文件夹地址,是项目名那个目录
/Users/jerry/Desktop/testProject0/century
# 2. 修改项目名称,注意:放到最后修改,因为其他的修改需要依赖这个目录来查找
-modifyProjectName century>actualbyte
# 3. 忽略文件夹,对添加的文件夹内的文件不执行修改。注意:多个文件夹之间用逗号隔开
-ignoreDirNames ThirdPartLib,Tools,Category,Utils,MacrosDefine,Main,Resource,Support Files
# 4. 修改类名前缀。没有前缀的会加上前缀,有前缀的会修改。注意:修改后是否重名
-modifyClassNamePrefix /Users/jerry/Desktop/testProject0/century.xcodeproj CG>WB
# 5. 生成垃圾代码,注意:生成后的垃圾代码,需要拖入到工程目录中,如有报错可以自己修改或删除
-spamCodeOut /Users/jerry/Desktop/testProject0/SpamCode WBLog
# 6. 修改 xxx.xcassets 文件夹中的 png 资源文件名,必须指定(#1)的地址为xcassets所在的目录,才能生效。注意:此修改不会影响代码中图片的引用名称,只是对资源实体名和json配置文件中的修改。
-handleXcassets
# 7. 删除空行和注释 ,在项目根目录下运行,无效果可以单独运行一次。
-deleteComments

上述的参数需要在下载的KLGenerateSpamCode工具目录中配置,如下图:

img1

参数配置好之后,Run 运行项目即可实现修改。另外,如果包含pod,需要到原项目文件夹下中执行pod update更新。

静态资源的修改

静态资源包括项目的icon、启动图、和.xcassets 文件中的图标资源。其中为了更改UI页面元素,icon和启动图需要重新做,并替换进去,而xcassets 资源图片,可以通过修改其hash值达到修改资源的目的,具体可以使用MAC 下的一个终端工具实现。

ImageMagick:是一款创建、编辑、合成,转换图像的命令行工具,可对 png 图片做轻量压缩,既不损失图片质量,又可改变图片文件 hash 值,正是我们想要的工具。

如果电脑中没有安装的话,需要使用Homebrew来安装执行命令如下:

brew install imagemagick

安装完成后,就可以执行ImageMagick的命令,来压缩工程目录下所有 png 文件:

find . -iname "*.png" -exec echo {} \; -exec convert {} {} \;

总结

本篇介绍了,如何通过修改工程名称、类前缀、资源hash值等方式,达到修改二进制包的目的,为上架苹果App Store 做准备。有兴趣的小伙伴可以亲自尝试一下,想必可以给您带来一些帮助。

最近的文章

iOS代码混淆之编译优化(三)

这是iOS代码混淆系列文章的最后一篇,前两篇可以点击下方链接查看 iOS代码混淆之方法名替换(一) iOS代码混淆之资源替换(二)前言前2篇文章已近讲了对于函数名的混淆,对项目中关键信息、资源文件的修改等相关混淆手段。但是,仅仅做到这几点就能万事大吉吗,黑客仍然可以通过分析代码逻辑或伪装代码来寻找程序漏洞,那么还有其他更坚固可靠的混淆方式呢,接下来就介绍下编译器级别的加固混淆方案。iOS编译原理iOS 开发中 Objective-C 和 Swift 都用的是 Clang / LLV...…

iOS 代码混淆继续阅读
更早的文章

iOS代码混淆之方法名替换(一)

这是iOS代码混淆系列文章的第一篇,后两篇可以点击下方链接查看 iOS代码混淆之资源替换(二) iOS代码混淆之编译优化(三)前言在iOS开发中,某些项目为了保护代码安全,不被黑客攻破,通常需要在上架之前对源代码进行加密混淆,下面就介绍一种简单可行的Objective-C代码混淆方案。混淆思路由于现在的逆向技术越来越高超,各种破解方案层出不穷,其中就可以使用class-dump命令行工具轻易的dump出demo.app文件中的所有头文件,代码立马回暴露在黑客面前,对项目产生了很多不...…

iOS 代码混淆继续阅读