摘要:前几天无意间有个小伙伴问我要fortify 内置最新规则,突然觉得内置规则既然能扫描代码缺陷,而他本质上是使用xml语言和内置源语言来编写的,心想能不能将其还原为xml文件,这样自定义规则的时候可以进行参考,少走弯路。说干就干,下面贴上具体步骤。
1. 既然猜测是通过解析xml规则来对代码进行静态分析的,所以,fortify内部肯定对加密规则进行了解密,将其转化为xml进行静态扫描分析。所以先进行一个初步搜索fortify相关jar包。在everything中输入 fortfiy*.jar,找到和fortify相关的jar包。最可疑的jar应该就是fortify-crypto-1.0.jar(因为已经开发好了jar包,所以后续也会搜到一些重复的内容)
2.将fortify-common-20.1.1.0007.jar fortify-crypto-1.0.jar fortify-public-20.1.1.0007.jar导入idea中,然后进行相关加密解密关键字搜索encrypt
,decrypt
,crypto
后发现如下方法比较疑似。分析后,其实CryptoUtil中的方法更像是解密一个文件格式,因为他使用到了inputStream IO操作。
3.直接定位到CryptoUtil工具类中,查下这几个方法,发现调用关系是,先解密然后再解压缩。具体代码可以反编译jar包看源码。就不在赘述。
decryptCompressed(InputStream encrypted, String keyString)----->readHeaders(InputStream encrypted)------->decryptCompressedAfterHeaders(InputStream encrypted, String keyString)------>decryptAfterHeaders(InputStream encrypted, String keyString, boolean compressed)-------->doBlockCipher(InputStream source, OutputStream dest, boolean encrypt, long[] usrKey)------>dec(InputStream source, OutputStream dest, long[] usrKey)-----> uncompressString(byte[] in)
4.测试分析结果是否正确。随便找一个内置规则解析一下,发现结果是对的。
5.直接把他的工具类考进项目使用即可,