0x01 实现功能
- 封装各类传输的数据头,PNG/AVI/JPEG
- 实现自定义的webshell的连接
0x02 实现细节:
- 数据传输过程中的修改方式,原版webshell不需要修改
为了我们后续实际使用方便,直接新建一个webshell
连接类型,按照我们的需要,后续直接修改对应的类型即可
1. 首先我们复制原版jsp
下的类,新建一个自定义的webshell
类型,以diy_jsp
为例:

修改webshell各类功能在传输过程中的加密方法,你用到的所有功能都需要修改,意味着所有的类都需要修改下,具体修改DIY类型下所有的Encrypt()
方法
(觉得麻烦的话,完全可以自定义一个Encrypt方法
,后续所有的功能直接调用你新增的方法即可)

- 原版直接获取字节码,我们修改就将,新增数据拼接到原数据前后即可,以
视频流
的开头为例:(想添加什么头,自己定义即可)
前: UklGRmYKAQBBVkkgTElTVMAAAABoZHJsYXZpaDgAAAA1ggAAoDwAAAAAAAAQCAAAoQAAAAAAAAABAAAABw8AALgBAAB8AQ 新增bytep[]长度:72

后: /9k= 新增 byte[] 长度:2

2. 修改Params.java
的逻辑,使我们新创建的类型能够在实现功能时,调用到对应的类,直接复制原版的函数,新建一个,修改下路径/方法名即可

3. 修改原有的加解密方法,我们只封装一个文件头测试,实际可以自定义加解密方法,以及webshell的实现流程
新增一个解密方法,大致逻辑不变,只修改我们在本地接class字节码的有效范围,原版直接解密获取到字节码,修改版我们需要去掉新增文件头的那部分数据,只取有效的哪部分即可:
- 新增数据: 开头-byte[] 长度72 后部分 byte[] 长度 2
- 新建解密方法,取的时候,定义好取的部分即可
- 新增静态方法中的调用


4. 最后一步,修改UI下的方法,以及Utils下的插件调用功能
- 新增连接选项

- 获取插件数据的方法,新增即可

-
运行Main方法,发现已经成功添加新类型,我们后续的传输就按照自定义的方式去进行了,
实战发挥脑洞,修改加解密方法,修改参数获取方法,修改传输过程中方式等等....

- 数据传输

0x03 实际使用
- 将所有数据进行混淆,修改加解密方法
- 修改为参数传递,不直接传输数据,改为各类参数传递,伪造为正常业务流量