FBI-WARNING是一个使用Clang在编译的时候对ObjC代码进行静态分析的.dylib库。

目前已经支持以下一些通用的简单的静态代码检测规则:


(资料图)

@property

NSString和Block需要使用copy关键字修饰。delegate需要使用weak关键字修饰。使用atomic原子性修饰时候的提醒。property不应该使用大写开头命名。property不应该使用内存管理语义命名。应该使用@Property方式定义属性。

Method

方法名不应该使用大写开头命名。方法名不应该使用内存管理语义命名。方法参数名不应该使用大写开头命名。方法体超过 XX(50) 行的提醒。

Class

类/分类名应该使用大写开头。类/分类名应该使用自定义大写前缀开头。类/分类名应该使用驼峰命名

Others

应该使用NS_ENUM/NS_OPTIONS定义枚举,而不是使用enum。

未来也许会支持更多...

Custom

如果想要增加或者修改规则的小伙伴可以看看笔者写的另外两篇入门的文章(大牛请略过) LLVM & Clang 入门 和 Clang Plugin 之 Debug 这两篇文章讲了怎么搭建环境和使用 Xcode 进行调试。

当前代码中已经支持了可自定义过滤Framework或者文件,在isVenderSourceCode()函数中,将需要过滤的Framework或者文件名直接添加在venders中就可以了。

Notes

本仓库中会包含FBI-WARNING、FBI-WARNING-Tooling、FWPluginDemo和一个.dylib库。

FBI-WARNING:它会编译生成一个.dylib库,这个.dylib库会用于直接集成到 Xcode 中。集成部分请参考 Xcode 集成 Plugin。

FBI-WARNING-Tooling:它是一个可直接使用适用于Xcode调试的代码。逻辑代码和FBI-WARNING是一样的(只是在加载方式和CMakeLists的配置文件上有一些差异),更准确的来说,FBI-WARNING是将FBI-WARNING-Tooling进行调试好的代码复制过去的。调试部分请参考 Clang Plugin 之 Debug。

笔者也是刚开始学习,代码写得不够规范还请各位大佬见谅。其他自定义规则,请有需求的或者感兴趣的同学自己动动手。

欢迎对clang和逆向感兴趣的同学添加微信一起交流(添加时请注明)。

Effects

Questions

Q: 更新了.dylib之后,在Xcode中重新运行怎么还是原来那样呀,没有任何变化? A: 这时候需要对着对应的Xcode项目,按住Shift+Command+K,Clean一次就好了。

References

使用Xcode开发iOS语法检查的Clang插件CLANG技术分享系列二:代码风格检查(A CLANG PLUGIN APPROACH)

如有内容错误,欢迎 issue 指正。

Code

转载请注明出处!

推荐内容