vlambda博客
学习文章列表

哥斯拉源码分析(一)生成shell

前言


老大给的新的任务,写一款webshell管理工具。打算分析下冰蝎和哥斯拉源码,借鉴一下思路。


第一篇就先简单分析下webshell的生成过程。shell内容放下一篇。


源码分析


先找到对应ui类,在按钮事件上打个断点



这里需要注意,哥斯拉的点击事件是通过反射动态绑定的,通过按钮名+Click即可找到对应的点击事件。

哥斯拉源码分析(一)生成shell


随后点击生成,即可断下来

哥斯拉源码分析(一)生成shell


哥斯拉源码分析(一)生成shell


最前面就是两个简单的校验,接下来是根据不同配置获取加密器

哥斯拉源码分析(一)生成shell


哥斯拉源码分析(一)生成shell


这里加密器是从cryptionMap里面获取取出来的

哥斯拉源码分析(一)生成shell


回头看看cryptionMap哪来的,有一个扫描的方法,会去解析/shells/cryptions/下的所有带@CryptionAnnotation注解的类,并添加进map


哥斯拉源码分析(一)生成shell

哥斯拉源码分析(一)生成shell



而这个扫描方法是在主程序初始化的时候调用


哥斯拉源码分析(一)生成shell

除此之外还初始化了,插件、payload等等资源


随后回到主线


哥斯拉源码分析(一)生成shell

判断获取到的加密器,有没有@CryptionAnnotation注解,随后初始化加密器返回。

哥斯拉源码分析(一)生成shell

然后调用加密器的generate方法

哥斯拉源码分析(一)生成shell


进来之后获取模板,然后替换传入的pass和key

哥斯拉源码分析(一)生成shell


然后根据选择的后缀,再次获取模板,接着就是判断是否开启上帝模式


shell生成后,就通过JFileChooser选择写出到指定文件


最后完事,整个过程还是比较简单。