所有命运馈赠的礼物,都已在暗中标好了价格。
—— 《断头王后》
一份迟到的二次开发文章,前人载树,后人乘凉。
1、CobaltStrike反编译
首先我们将IEDA中的java-decompiler.jar拿出来,一般在/plugins/java-decompiler.jar/lib/里面。然后新建两个文件夹来存放我们反编译的文件。其中cs_bin里面存放未反编译的文件。
然后提取其中的consoledecompiler,路径一般如下:
1 | org/jetbrains/java/decompiler/main/decompiler/ |
然后将斜杠改成点,得到:
1 | org.jetbrains.java.decompiler.main.decompiler.consoledecompiler |
使用方法如下:
1 | java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler |
会报错,提示缺少主类。我们需要跟上-dsg=true参数以及需要反编译的文件和反编译后的目录。
1 | java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dsg=true cs_bin/cobaltstrike.jar cs_src |
然后解压生成的文件,得到后缀为.java的文件。便可以直接导入到idea了。
打开idea新建项目,一路next
完成后新建一个xx_src与一个lib目录
然后复制刚刚解压的文件到新建的src目录中。未反编译的放入lib中
然后选择file里面的project Structure中的模块。
点击加号,选择lib目录下面的文件,点击apply.。确保是Compile
然后依次选择Artifacts—>jar—>from modules with dependencies 去新建一个Main Class
这个名字可以在lib—->cs.jar—->meta-inf—->menifest.mf中找到
然后找到反编译完的aggressor中,找到主类,右键选择refactor —-> copy
然后下选择文件夹,选择刚刚的src文件夹,并新建aggressor 文件夹。
效果如下:
添加一行代码,测试:
1 | JOptionPane.showMessageDialog(null,"hello world!!!"); |
现在所需要的修改就完成了,后面需要修改什么文件,都可以以copy的方式去复制、修改了。然后build测试:Build—–>Build Artifacts—–>Build,out文件夹就可以看到了。
然后添加一个jar配置,然后把刚刚的jar添加到路径中
添加配置:
如果打包有问题,可以把下面的文件复制过去
2、CobaltStrike特征修改
1、修改stager防止被扫:修改位置如下:
1 | cloudstrike/webserver.class |
主要是isStager函数,只要不是92或者93就行。这里首先需要修改checksum8,将其返回值改为:
1 | return sum |
随机生成文件,然后调用算法,得到需要的值。
1 | public class test { |
然后将该值放入:
1 | public static boolean isStager(String uri) { |
并修改
1 | common/CommonUtils中的 |
将返回值改成我们刚刚修改的文件名:
x64同理修改。
或者使用之前的师傅们改好的东西,直接把
1 | beacon/BeaconPayload.java |
复制过来。然后修改
1 | public static byte[] beacon_obfuscate(byte[] var0) { |
的异或值,再将所有的dll更改后放入即可。
2、修改源码。简单免杀:
shellcode生成的路径为:
1 | /aggressor/dialogs/PayloadGeneratorDialog.java |
以C为例,若需修改,直接选择ToC,跳转就可,位置在:
1 | encoders/Transforms.java |
我们便可以直接拿过了我们的加载器来使用
1 |
|
此时生成的.c文件如下: