从0到1哥斯拉项⽬反编译初步搭建
0x01 起因
今天上github搜索哥斯拉项⽬时,看到了有⼈发布了哥斯拉源码的项⽬。
项⽬地址如下:
最初以为是哥斯拉作者发布了项⽬源码,点进这个项⽬⼀看,原来是反编译构建的哥斯拉源码。
于是⼼⾎来潮,决定也对该哥斯拉3.0.3版本,也就是哥斯拉作者发布的最新版本进⾏反编译⽣成可运⾏的项⽬。0x02 构建l
此次使⽤的环境:
jdk1.8.0_301
jdk-11.0.12
IntelliJ IDEA 2021.2 (Ultimate Edition)
JD-Gui version 1.6.6
要对哥斯拉项⽬进⾏反编译,⾸先要下载哥斯拉项⽬的jar包。项⽬地址如下:
下载最新版的v3.0.3-godzilla
将下载后的⽂件⽤jd-gui打开
⼀般来讲引⼊的第三⽅库在maven已经com下,因此如果建构l时⾸先需要把这两处地⽅的第三⽅库引⼊。接下来打开IDEA,新建⼀个maven项⽬
因为maven要下载第三⽅库,最好先在pom⽂件中配置下载源,不然会下载很慢,个⼈常⽤的源如下:
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
</repository>
<repository>
<id>jcenter</id>
<name>bintray</name>
</repository>
</repositories>
注意这⾥构建的l⽂件在之后反编译过程中还会进⾏修改,并不是最终版本<dependencies>
<dependency>
<groupId&ial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.34.0</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
<dependency>
<groupId>com.miglayout</groupId>
<artifactId>miglayout-swing</artifactId>
<version>5.3</version>
</dependency>repository文件夹可以删除吗
<dependency>
<groupId>com.miglayout</groupId>
<artifactId>miglayout-core</artifactId>
<version>5.3</version>
</dependency>
</dependency>
<dependency>
<groupId>com.formdev</groupId>
<artifactId>svgSalamander</artifactId>
<version>1.1.2.4</version>
<scope>runtime</scope>
</dependency>
</dependencies>
jd-gui的maven⽂件夹下的相关依赖添加到l中后,继续添加com⽂件夹下的第三⽅依赖。(但对于com⽂件夹下的第三⽅依赖有两种加载⽅式,⼀种是在l中添加依赖配置选项,另⼀种则是直接在项⽬中引⼊第三⽅依赖,例如导⼊jar包或者源代码。这⾥我选择先使⽤在l中引⼊第三⽅的依赖库。)
由于个⼈能⼒有限,在com⽂件夹下不到依赖包对应的版本信息。最开始就卡住了,只能凭经验选择对应的版本。jd-gui的com⽂件夹下包依赖如下
构造的l中的依赖如下:
<!-- com⽂件夹下的依赖 -->
<dependency>
<groupId>com.formdev</groupId>
<artifactId>flatlaf</artifactId>
<version>1.1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.kitfox.svg</groupId>
<artifactId>svg-salamander</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.jgoodies</groupId>
<artifactId>forms</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>com.jgoodies</groupId>
<artifactId>jgoodies-common</artifactId>
<version>1.7.0</version>
</dependency>
到这⾥第三⽅依赖就加载完成(后续会对l⽂件进⾏更改)。
0x03 反编译哥斯拉源代码
这⾥反编译源代码,我们⽤IDEA提供的java-decompiler.jar包,只要安装了IDEA,在IDEA安装⽬录下的plugins -> java-decompiler -> lib⽂件夹中都有该jar包。
⾸先我们在哥斯拉⽂件的同级⽬录下新建⼀个⽂件夹,我这⾥取名为demo
然后我们在哥斯拉⽂件所在的⽂件夹路径下调⽤如下命令,切记要⽤是jdk11的来调⽤该命令,IDEA的java-decompiler.jar的路径请根据实际情况修改。
"C:\Program Files\Java\jdk-11.0.12\bin\java" -cp "C:\Program Files\JetBrains\IntelliJ IDEA 2021.2\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true Godzilla.jar demo
命令调⽤完成后在demo⽂件夹下会⽣成⼀个jar包,Godzilla.jar
对该jar包进⾏解压
进⼊解压后的⽂件夹,该⽂件夹下就是IDEA的java-decompile.jar反编译后的源代码
因为第三⽅库已经加载完成,我们不需要第三⽅库的源代码,哥斯拉项⽬的源代码在如下⼏个⽂件夹中
├─core
│├─annotation │├─imp
│├─shell
│└─ui
│├─component ││├─dialog
││├─menu
││└─model
│├─imp
│└─model
├─images
├─net
│└─miginfocom │├─layout
│└─swing
├─shells
│├─cryptions
││├─cshapAes │││└─template ││├─JavaAes │││└─template ││└─phpXor
││└─template │├─payloads
││├─csharp
│││└─assets ││├─java