渗透干货分享:从0到1哥斯拉项目反编译初步搭建

0x01 起因

今天上github搜索哥斯拉项目时,看到了有人发布了哥斯拉源码的项目。

项目地址如下:

https://github.com/808Mak1r/GodzillaSource

最初以为是哥斯拉作者发布了项目源码,点进这个项目一看,原来是反编译构建的哥斯拉源码。

于是心血来潮,决定也对该哥斯拉3.0.3版本,也就是哥斯拉作者发布的最新版本进行反编译生成可运行的项目。

0x02 构建pom.xml

此次使用的环境:

jdk1.8.0_301

jdk-11.0.12

IntelliJ IDEA 2021.2 (Ultimate Edition)

JD-Gui version 1.6.6

要对哥斯拉项目进行反编译,首先要下载哥斯拉项目的jar包 。项目地址如下:

https://github.com/BeichenDream/Godzilla

下载最新版的v3.0.3-godzilla

将下载后的文件用jd-gui打开

一般来讲引入的第三方库在maven已经com下,因此如果建构pom.xml时首先需要把这两处地方的第三方库引入。

接下来打开IDEA,新建一个maven项目

因为maven要下载第三方库,最好先在pom文件中配置下载源,不然会下载很慢,个人常用的源如下:

alimaven

aliyun maven

//maven.aliyun.com/nexus/content/groups/public/

jcenter

bintray

http://jcenter.bintray.com

注意 这里构建的pom.xml文件在之后反编译过程中还会进行修改,并不是最终版本

先对jd-gui中的maven下的地方库进行配置,我们可以在jd-
gui中的pom.properties文件查看到maven引入的第三方库的版本和名称,可以在 https://mvnrepository.com/
网站找到对应的配置信息,构建后的pom.xml的以来如下:

org.xerial

sqlite-jdbc

3.34.0

org.javassist

javassist

3.27.0-GA

com.miglayout

miglayout-swing

5.3

com.miglayout

miglayout-core

5.3

com.formdev

svgSalamander

1.1.2.4

runtime

jd-
gui的maven文件夹下的相关依赖添加到pom.xml中后,继续添加com文件夹下的第三方依赖。(但对于com文件夹下的第三方依赖有两种加载方式,一种是在pom.xml中添加依赖配置选项,另一种则是直接在项目中引入第三方依赖,例如导入jar包或者源代码。这里我选择先使用在pom.xml中引入第三方的依赖库。)

由于个人能力有限,在com文件夹下找不到依赖包对应的版本信息。最开始就卡住了,只能凭经验选择对应的版本。

jd-gui的com文件夹下包依赖如下

但在 (https://mvnrepository.com/) 网站并未找到com.jgoodies.common 以及
com.kitfox.svg的包(此时选择在maven中添加第三方依赖的我还没意识到问题),暂时选用 com.jgoodies.jgoodies-
common 和 com.kitfox.svg.svg-salamander 包进行代替。

构造的pom.xml中的依赖如下:

com.formdev

flatlaf

1.1.2

runtime

com.kitfox.svg

svg-salamander

1.0

com.jgoodies

forms

1.2.1

com.jgoodies

jgoodies-common

1.7.0

pom.xml文件构建好后,使用maven reload来加载第三方库。

到这里第三方依赖就加载完成(后续会对pom.xml文件进行更改)。

0x03 反编译哥斯拉源代码

这里反编译源代码,我们用IDEA提供的java-decompiler.jar包,只要安装了IDEA,在IDEA安装目录下的plugins -> java-
decompiler -> lib文件夹中都有该jar包。

首先我们在哥斯拉文件的同级目录下新建一个文件夹,我这里取名为demo

然后我们在哥斯拉文件所在的文件夹路径下调用如下命令,切记要用是jdk11的java.exe来调用该命令,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

│ │ │ └─assets

│ │ └─php

│ │ └─assets

│ └─plugins

│ ├─cshap

│ │ └─assets

│ ├─java

│ │ └─assets

│ └─php

│ └─assets

└─util

└─http

分别是 core 、 images 、net 、 shells 、 util

我们只需要拷贝这几个文件夹,到IDEA的哥斯拉项目中即可。注意其中的net文件夹后续会删除。

0x04 调整依赖

哥斯拉的项目启动文件是 core.ui.MainActivity ,找到该文件后直接启动项目

当然是启动失败的呢

第一条错误信息为 java: 程序包com.formdev.flatlaf.demo.intellijthemes不存在

好的,现在开始对依赖文件进行调整。

上面错误信息的原因搭配上IDEA中爆红的部分,我们可以看出这是由于我们引入的com.formdev.flatlaf包缺乏com.formdev.flatlaf.demo这个子包,而哥斯拉项目需要引用这个子包中的文件。

这时候去github查看flatlaf项目的源代码,查看官方是否有提供有jar包,同时该jar包中有demo这个子包。

在github的搜索结果中,第一个项目 JFormDesigner/FlatLaf
是flatlaf的官方项目,我们先不看,因为有个更有意思的项目在下方,该项目写着 Godzilla 依赖的 flatlaf-demo-1.4.jar mvn
重新构建。

项目地址如下:

https://github.com/yhy0/flatlaf-demo-1.4

点击进入该项目,我们可以看到该项目中介绍了Gozilla依赖的是flatlaf-
demo库,且版本为1.4的版本。该项目的作者发现官方没有提供flatlaf-
demo的1.4版本的jar包,而且官方源代码的gradle生成的jar包存在问题,于是将官方1.4版本的源代码进行maven重新构建,生成了1.4版本的jar包,同时在该项目中提供了作者重新构建好的jar包。另外该项目的最下方提供了之前我们在github上面看到的哥斯拉源代码项目的地址。

那么官方是真的没有提供flatlaf.demo的1.4版本的jar包吗。我们首先进行官方的github项目。项目地址如下:

https://github.com/JFormDesigner/FlatLaf

在github项目中我们可以看到一个demo的位置,该位置提供了下载flatlaf-demo的jar包,我们点击下载。

可以看到下载的版本是1.6版本。复制下载链接,链接如下:

https://download.formdev.com/flatlaf/flatlaf-demo-latest.jar

该链接是下载最新版本的,那么如果我们修改下载的文件后缀呢,例如修改为

https://download.formdev.com/flatlaf/flatlaf-demo-1.4.jar

访问发现,可以成功下载1.4版本的jar包

那么既然1.4版本的jar包已经下载下来了,我们需要在IDEA中导入该依赖,导入步骤如下。

第一步、在IDEA中新建一个文件夹,名为lib

第二步、将下载下来的1.4版本的jar包放入该文件夹下

第三步、右键该文件夹,选择 Add as Library

至此,成功将该jar包加载为项目的依赖。添加依赖后,我们可以在项目中展开该jar包。

展开后我们发现该jar包中的com文件夹下的依赖和我们之前在pom.xml引入的com下的依赖一样,这时我们删除pom.xml中的com中的依赖。同时我们发现该jar包中net.miginfocom和我们之前引入到项目中的net文件夹内容一致,这时我们可以删除引入到项目中的net文件夹。

重构之后的项目目录如下。

重构之后的完整的pom.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

org.example

Gozilla

1.0-SNAPSHOT

<maven.compiler.source>8</maven.compiler.source>

<maven.compiler.target>8</maven.compiler.target>

org.xerial

sqlite-jdbc

3.34.0

org.javassist

javassist

3.27.0-GA

com.miglayout

miglayout-swing

5.3

com.miglayout

miglayout-core

5.3

com.formdev

svgSalamander

1.1.2.4

runtime

alimaven

aliyun maven

http://maven.aliyun.com/nexus/content/groups/public/

jcenter

bintray

http://jcenter.bintray.com

此时我们再用maven reload一下依赖,然后重新运行项目。

仍然报错了,但是错误原因变了,这次是由于 com.formdev.flatlaf.demo.intellijthemes.IJThemeInfo
类不对外开放。

访问发现该类并不是public类。这时候可以从官方的源代码中修改该类为public类,然后重新打包成jar包,但是我决定偷懒,直接用之前看到的项目作者打包提供的1.4版本的jar包。或者可以用哥斯拉源代码项目中lib下的1.4版本的jar包。两个项目的地址如下:

https://github.com/yhy0/flatlaf-demo-1.4

https://github.com/808Mak1r/GodzillaSource

替换lib中的jar包后,重新运行项目。至此,依赖问题已经解决,剩下的就是反编译后的源代码存在的语法问题了。

0x05 语法错误修改,成功运行项目

因为反编译后的语法问题都大同小异,因此挑几个不重复的语法问题讲。

java: 不兼容的类型: boolean无法转换为int

当出现这种boolean无法转换为int类型的语法问题是,我们查看反编译后的源代码,可以看到在这里readOneNum是表示从inputStream中读取的字节个数,因此,将readOneNum只定义一次,值修改为0即可。

java: 无法为最终变量cmdString分配值

这里的语法问题是为已经用final关键字定义过的变量cmdString重复赋值,该变量在定义时已经赋值为null了,重复赋值会报错,要解决该语法问题,直接在该变量定义时不赋值即可。

修改完语法问题后运行项目,即可成功运行。

0x06 后续问题

上面步骤已经能成功将哥斯拉作为项目运行了,但是运行后的项目依旧存在一些问题,如下。

因此还需要对报异常的位置进行查看,来做更进一步的修改。这里就由读者去进行后续的跟进了,修改源码也是学习的一环,当然也可以直接使用github上别人已经逆向出的源代码。

义一次,值修改为0即可。

[外链图片转存中…(img-N8uxOgDJ-1690791312177)]

java: 无法为最终变量cmdString分配值

[外链图片转存中…(img-uykA0EYN-1690791312179)]

这里的语法问题是为已经用final关键字定义过的变量cmdString重复赋值,该变量在定义时已经赋值为null了,重复赋值会报错,要解决该语法问题,直接在该变量定义时不赋值即可。

[外链图片转存中…(img-c2utkOui-1690791312181)]

修改完语法问题后运行项目,即可成功运行。

[外链图片转存中…(img-hEmD49h0-1690791312183)]

0x06 后续问题

上面步骤已经能成功将哥斯拉作为项目运行了,但是运行后的项目依旧存在一些问题,如下。

[外链图片转存中…(img-IGbcwJxu-1690791312185)]

[外链图片转存中…(img-G6TgKMbC-1690791312187)]

因此还需要对报异常的位置进行查看,来做更进一步的修改。这里就由读者去进行后续的跟进了,修改源码也是学习的一环,当然也可以直接使用github上别人已经逆向出的源代码。

网络安全学习路线

这是一份网络安全从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OesOoa9f-1690791312188)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑

阶段一:基础入门

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frUREKko-1690791312191)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

网络安全导论

渗透测试基础

网络基础

操作系统基础

Web安全基础

数据库基础

编程基础

CTF基础

该阶段学完即可年薪15w+

阶段二:技术进阶(到了这一步你才算入门)

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S5074bwt-1690791312193)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

弱口令与口令爆破

XSS漏洞

CSRF漏洞

SSRF漏洞

XXE漏洞

SQL注入

任意文件操作漏洞

业务逻辑漏洞

该阶段学完年薪25w+

阶段三:高阶提升

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iTBcObQK-1690791312194)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

反序列化漏洞

RCE

综合靶场实操项目

内网渗透

流量分析

日志分析

恶意代码分析

应急响应

实战训练

该阶段学完即可年薪30w+

阶段四:蓝队课程

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vBsLjnUk-1690791312196)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

蓝队基础

蓝队进阶

该部分主攻蓝队的防御,即更容易被大家理解的网络安全工程师。

攻防兼备,年薪收入可以达到40w+

阶段五:面试指南&阶段六:升级内容

img

需要上述路线图对应的网络安全配套视频、源码以及更多网络安全相关书籍&面试题等内容

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

同学们可以扫描下方二维码获取哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值