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文件中配置下载源,不然会下载很慢,个人常用的源如下:

<repositories>

<repository>

<id>alimaven</id>

<name>aliyun maven</name>

<url>//maven.aliyun.com/nexus/content/groups/public/</url>

</repository>

<repository>

<id>jcenter</id>

<name>bintray</name>

<url>http://jcenter.bintray.com</url>

</repository>

</repositories>

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

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

<dependencies>

<dependency>

<groupId>org.xerial</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>

<dependency>

<groupId>com.miglayout</groupId>

<artifactId>miglayout-core</artifactId>

<version>5.3</version>

</dependency>

<!-- https://mvnrepository.com/artifact/com.formdev/svgSalamander -->

<dependency>

<groupId>com.formdev</groupId>

<artifactId>svgSalamander</artifactId>

<version>1.1.2.4</version>

<scope>runtime</scope>

</dependency>

</dependencies>

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文件夹下的依赖 -->

<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>

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">

<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>

<artifactId>Gozilla</artifactId>

<version>1.0-SNAPSHOT</version>

<properties>

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

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

</properties>

<dependencies>

<dependency>

<groupId>org.xerial</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>

<dependency>

<groupId>com.miglayout</groupId>

<artifactId>miglayout-core</artifactId>

<version>5.3</version>

</dependency>

<!-- https://mvnrepository.com/artifact/com.formdev/svgSalamander -->

<dependency>

<groupId>com.formdev</groupId>

<artifactId>svgSalamander</artifactId>

<version>1.1.2.4</version>

<scope>runtime</scope>

</dependency>

</dependencies>

<repositories>

<repository>

<id>alimaven</id>

<name>aliyun maven</name>

<url>http://maven.aliyun.com/nexus/content/groups/public/</url>

</repository>

<repository>

<id>jcenter</id>

<name>bintray</name>

<url>http://jcenter.bintray.com</url>

</repository>

</repositories>

</project>

此时我们再用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到1哥斯拉项目反编译初步搭建相关推荐

  1. NP管理器 NPManager v3.0.49 安卓APK逆向反编译工具

    NP管理器 NPManager v3.0.49 安卓APK逆向反编译工具 NP管理器 NPManager 安卓反编译工具,NP管理器是一款强大的安卓反编译或反汇编工具,虽然这个NPManager反编译 ...

  2. (转)PB项目反编译总结(用PBKILLER和PB反编译大师的RecoveryDW工具)

    最近在做PB的项目,该项目只有PBD文件,而没有源码,只能通过反编译PBD文件查看源码,逐步恢复该项目,由于之前没人接触过反编译,网上的PB资料也不是很多,所以一路都是自己摸索过来的,下面是我个人的一 ...

  3. 安卓修改大师v3.1.0.0:傻瓜式安卓反编译逆向修改工具

    安卓修改大师是一款专业免费对任何APK安装包进行反编译的软件,该软件可以替换应用程序界面上的任何文字和图片,还可以通过代码级别的修改,实现汉化.破解.功能增强,而且还能在任何界面添加自定义的代码和功能 ...

  4. 【django轻量级框架】(Python3.6.8+Django2.0)第一个Django项目与基础环境搭建

    一.前言 Django 是一个开放源代码的 Web 应用框架,由 Python 写成.采用了 MTV 的框架模式,即模型 M,模板 T 和视图 V.当然,网上也有人说 Django 采用了 MVC 的 ...

  5. Android开发笔记(七十)反编译初步

    查看平台源码 查看内核源码 Android的内核源码很大,有几个G,仔细找找网上有许多下载的地方.作为普通开发者,一般不需要阅读内核源码,但一点都不了解好像也不行,因为实际开发中有时候就得会那么一点点 ...

  6. Windows10+VS2017下GSL1.8_x86和sundials2.5.0配置及GITHUB项目schneider_et_al_2016_animaldiversity编译运行

    一.GSL库下载 GSL简介及下载地址:GSL - GNU Scientific Library GSL FTP下载地址:GSL FTP GSL for Windows地址:Gsl for Windo ...

  7. idea 项目jar反编译java_带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款阿里开源的 Java 诊断利器 Art ...

  8. Android APK+Dex文件反编译及回编译工具 v.1.8.0 测试版

    可显示APK文件自身图标 _______________________________________________________________________________________ ...

  9. android 反编译 脱壳,反编译、回编译、脱壳的简单测试

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 以前为了开发Xposed插件,对app进行过脱壳或通过其它工具查看源代码的等操作,这次想实现对app的反编译和回编译,这 ...

  10. Android APK+Dex文件反编译及回编译工具 比 APKtool GUI 好千倍

    Android APK+Dex文件反编译及回编译工具 v1.7.2 正式版                        Soyu Zom 出品 =========================== ...

最新文章

  1. 在angularjs应用中如何做选择评星的效果
  2. 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)
  3. Windows CE创建桌面快捷方式
  4. python理论知识选择题_python基础知识练习题(二)
  5. python基础知识-python基础知识整理(值得收藏)
  6. ecshop商品下面显示销售量
  7. .net zero power toole 破解日志
  8. gitignore文件的几种写法,Git忽略文件规则的配置方法
  9. python mysql编码_Python和MySql:Unicode和编码
  10. [渝粤教育] 天水师范学院 地理信息系统原理与方法 参考 资料
  11. exchange服务器维护,EXCHANGE故障排除步骤简述
  12. java isbn_ISBN书号查询示例代码
  13. 修复Kindle,解决:误把kindle做了启动U盘后windows无法读kindle内容问题
  14. ipad怎么压缩文件?教你一招快捷压缩图片
  15. DIT和DIF的基2FFT算法
  16. 计算机信息专业考研院校排名,2017年电子信息工程专业考研院校排名
  17. 基于java的租车管理系统(汽车租赁)
  18. 济南哪个学校学计算机好,济南计算机专业哪些学校好
  19. linux 多行注释
  20. hfai images | 自建镜像,环境配置的最后绝招

热门文章

  1. 几何公差(GDT)的特征项目及符号
  2. git使用教程10-修改 config 配置用户名和邮箱
  3. QT installs的使用,编译时拷贝文件
  4. 深富策略短线获利了结为主
  5. Python字符串专项练习题(1-16)
  6. 让世界不再有“此生未完成”,臻和科技为患者带来守护之力
  7. 37、T5L迪文屏C51开发之绘制2D形状
  8. 网络迷踪常用网站工具汇总(采集意见版)——炒饭论坛
  9. Unity Spine动画如何选定帧数(时间)播放
  10. Vue+FusionCharts 动态获取数据生成甘特图