最近有源码审计的需求,首先了Fortify工具,但是其自带的漏洞库误报率较高,而且有很多过时我们并不需要的漏洞,于是想对官方规则库进行一些改造。经度娘查阅,找到了这篇文章:fortify规则库解密之旅|NOSEC安全讯息平台 - 白帽汇安全研究院

既然前人已经栽树,那我这后人就乘凉吧,一顿操作,解密成功,扫描源码……报错,规则库格式错误!

奇怪了,难道解密不对?这是不可能的,前面大哥调用的官方解密模块,不可能有错。于是分析解密后的xml,终于找到了原因:

看这是文件的最后,每个生成的xml,都会多出来这么几行,导致整个xml无效,验证失败。于是怀疑官方学坏了?在解密的最后留个小尾巴折腾人?

再分析前辈大哥写的解密代码,发现一处小问题:

 看这里,读入缓冲区的内容直接写入新文件,未加判断,这就造成了,当到文件末尾时,读多了,把缓冲区内的直接写入了新文件。于是改之:

技术有限,没来的及想更高深的办法,直接最简单的吧

循环判断一下缓冲区有没有末尾标签,如果有就截断。

再次执行,搞定,结果正确,可以生成fpr文件了。

 

修改的代码段:

String tmpstr;

            while ((ruleStream.read(b)) != -1) {

            tmpstr = new String(b);

            if (tmpstr.indexOf("</RulePack>")!=-1){

            b = tmpstr.substring(0,11+tmpstr.indexOf("</RulePack>")).getBytes();

            }

                outputStream.write(b);

            }

更多推荐

fortify规则库解密后规则库生成fpr文件失败的解决方案