CodeQL分析jar包的一种思路和测试
Jar文件是java代码编译后产物,聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便分发Java平台应用软件或库。
如果CodeQL需要分析jar文件,可以通过反编译得到项目源码,后续再通过javac等编译命令生成CodeQL数据库。理论可行,实践开始。
脚本工具:https://github.com/ttonys/CodeQLAnalyseJar
反编译
反编译工具:
Jd-gui:下载地址:Java Decompiler (java-decompiler.github.io)
fernflower,类似java-decompiler,下载地址:http://the.bytecode.club/fernflower.jar,Git:https://github.com/fesh0r/fernflower
1
java -jar fernflower.jar -dgs=true java-sec-code-1.0.0.jar ./dist
cfr:下载地址:https://github.com/leibnitz27/cfrCFR
java-decompiler:idea自带的反编译工具
1
java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true ../target/java-sec-code-1.0.0.jar out
procyon:下载地址:https://github.com/mstrobel/procyon
1
java -jar procyon-decompiler-0.6.0.jar -jar java-sec-code-1.0.0.jar -o java-sec-decode
编译
编译工具:
- Javac:不推荐。容易报错,会终止数据库生成
- ant:Apache Ant 教程_w3cschool 下载地址:https://ant.apache.org/
- ecj:eclipse构建工具
数据库构建流程
jar包反编译再编译过程中,会存在报错,对codeql分析有一定影响,但实测依然可以检测漏洞。
经过本地测试,选定反编译工具为procyon
和java-decompiler
,编译工具选择ant
思路:
1、使用procyon反编译jar得到java文件,结果比较符合源码。
2、使用java-decompiler反编译jar得到lib文件,里面包含构建所需jar包
3、编写build.xml文件,使用ant进行编译,运行ant -f build.xml
格式如下:
1 |
|
其他
- 在ant编译过程中,通过设置
failonerror
来确保及时部分文件报错也不会终止编译过程。 procyon
和java-decompiler
得到的java源码会有所不同,可以通过替换报错java文件的方式来使编译结果最优。