Home

Awesome

Codeobscure

Introduce

该项目主要用于OC混淆代码,如果您的项目有安全需求。想避免class-dump来解读您的代码,你不妨使用该项目。该工具基本全自动运行,设置得当基本不需要额外的对工程进行操作。如果有问题欢迎反馈,我会及时修复!

该工具经过随机开源项目的测试,测试项目如下,具有非常好的通用性,并且一步完成混淆工作。

演示(项目:iOS-2048)

ScreenShot Gif

class_dump 效果(项目:iOS-2048)

效果

Installation

运行如下命令:

$ gem install codeobscure

Usage

使用实例

使用过程中请使用绝对路径

-l可以接多路径,用逗号分割,如下:

实例1:混淆方法、类名、属性, 过滤Pods和Download Example :

codeobscure -o /Users/mac/Downloads/Examples/Messenger.xcodeproj  -l /Users/mac/Downloads/Examples/Pods,/Users/mac/Downloads/Examples/Download

实例2:仅仅混淆方法和类名

codeobscure -o /Users/mac/Downloads/Examples/Messenger.xcodeproj -f f,c

实例3:生成ignoresymbols文件,用于写入要过滤的关键字

codeobscure -i XcodeprojPath	

实例4: 重置-l记录的要过滤的关键字

codeobscure -r 

实例5:严格模式过滤,并且用单词模式进行替换。(如果代码中含有很多的KVO以及Runtime代码,使用严格模式,会更好的帮助你。)

codeobscure -o /Users/mac/Downloads/Examples/Messenger.xcodeproj -t w -s

注意: 由于苹果新版系统有SIP(系统完整性保护)默认是开启的,所以由于安装方式不同,可能在运行命令的时候出现:attempt to write a readonly database (SQLite3::ReadOnlyException)的问题。如果出现这个问题,请在命令行上加上sudo

codeobscure -h 命令帮助

使用工具是时候,路径直接用绝对路径,不支持相对路径。(直接把文件拖到终端显示出来的路径就是绝对路径)

Usage: obscure code for object-c project
-o, --obscure XcodeprojPath      obscure code
-l, --load path1,path2,path3     load filt symbols from path
-r, --reset                      reset loaded symbols
-f, --fetch type1,type2,type3    fetch and replace type,default type is [c,p,f].c for class,p for property,f for function
-i, --ignore XcodeprojPath       create a ignore file, you can write your filt symbols in it.eg:name,age ...
-t, --type replaceType           obscure type = [r,w,c] ,r: random w: random words c: custom replace rule

版本说明

注意:由于苹果反馈了如下的被拒信息,因为目前可以用w选项,之后会提供更有意义的单词的替换选项[c]: 被拒信息

使用及原理说明

codeobscure主要用于oc(目前来说由于swift的特性摆在那里,这种方式不适用于swift)的项目,利用iOS安全攻防(二十三):Objective-C代码混淆的方式去进行代码混淆,纯粹的娱乐自己恶心他人。

此工具会默认遍历项目属性,方法和类名进行混淆。当然如果简单的进行遍历的话,会产生无穷无尽的错误,因为你不可能混淆苹果提供给你的官方API,也不能混淆framework和.a的静态编译的库。所以在混淆代码的时候必须排除掉它们。我已经帮你过滤了系统的方法。如果你的项目中使用Pod或者使用了静态库,或者其他比较特别的第三方库,请使用codeobscure -l [路径1,路径2..]的方式去过滤这些库文件。运行codeobscure -o [项目名.xcodepro]去调用混淆你的代码,然后耐心等待一会就可以了。

当然并不意味这你运行了就一定没错误,该工具最大的简化了混淆代码的工作,由于不同的人编写的代码可能各不相同。假设你调用了NSClassFromString("classNameA")而这个类正好被混淆了,它不识别classNameA到底是什么。那么怎么解决这个错误呢。最简单的方式就是在codeObfuscation.h中查询classNameA并删除它的#define即可。 目前最新版针对NSClassFromString 等常规操作已经自动处理了。

在0.1.3中,需要过滤的字段,你不要简单的删掉它,而是使用ignoresymbols

例如上面你要删除的,如果你仅仅是删除了,下次要执行codeobscure -o重新生成的时候会又重新生成,你要再次把它从codeObfuscation.h中查询出来并删除。 v0.1.3中你仅仅添加到ignoresymbols就可以很方便的解决这一问题。下次codeobscure -o生成的时候回自动过滤到这些字段。

我测试的项目是有打几年历史的一个项目,代码也挺多的。合理的过滤掉某些不应该混淆的方法。提示错误的仅仅只有一个地方,然后就是运行的时候有几处崩溃,都是因为方法被混淆了,不识别方法导致的,仅仅删除它就可以了。运行完成后,除了解决错误,你不需要进行额外的文件添加删除操作,我已帮你添加好了。你觉得代码混淆不好用,那么直接删除codeObfuscation.h就行了。此致,敬礼!

注意:如果你运行了codeobscure -l [路径1,路径2..],那么它会记录下来要过滤的东西。如果你下次不想过滤已经过滤的库,运行codeobscure -r来重置。

如果有什么不好用的地方,直接写到issue,我会尽量让它更好用。

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/kaich/codeobscure. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.