Skip to content

Commit e8c8e29

Browse files
committed
chore: update gen_help and gen_lua
1 parent c0338d1 commit e8c8e29

9 files changed

Lines changed: 88 additions & 48 deletions

File tree

client/cmd/genhelp/gen_help.go

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@ import (
44
"bytes"
55
"fmt"
66
"github.com/chainreactors/malice-network/client/assets"
7+
"github.com/chainreactors/malice-network/client/command"
78
"github.com/chainreactors/malice-network/client/command/addon"
89
"github.com/chainreactors/malice-network/client/command/alias"
910
"github.com/chainreactors/malice-network/client/command/armory"
11+
"github.com/chainreactors/malice-network/client/command/basic"
1012
"github.com/chainreactors/malice-network/client/command/build"
13+
"github.com/chainreactors/malice-network/client/command/cert"
14+
configCmd "github.com/chainreactors/malice-network/client/command/config"
15+
"github.com/chainreactors/malice-network/client/command/context"
1116
"github.com/chainreactors/malice-network/client/command/exec"
1217
"github.com/chainreactors/malice-network/client/command/explorer"
1318
"github.com/chainreactors/malice-network/client/command/extension"
@@ -17,16 +22,24 @@ import (
1722
"github.com/chainreactors/malice-network/client/command/listener"
1823
"github.com/chainreactors/malice-network/client/command/mal"
1924
"github.com/chainreactors/malice-network/client/command/modules"
25+
"github.com/chainreactors/malice-network/client/command/mutant"
2026
"github.com/chainreactors/malice-network/client/command/pipe"
27+
"github.com/chainreactors/malice-network/client/command/pipeline"
28+
"github.com/chainreactors/malice-network/client/command/pivot"
2129
"github.com/chainreactors/malice-network/client/command/privilege"
2230
"github.com/chainreactors/malice-network/client/command/reg"
2331
"github.com/chainreactors/malice-network/client/command/service"
2432
"github.com/chainreactors/malice-network/client/command/sessions"
2533
"github.com/chainreactors/malice-network/client/command/sys"
2634
"github.com/chainreactors/malice-network/client/command/tasks"
2735
"github.com/chainreactors/malice-network/client/command/taskschd"
36+
"github.com/chainreactors/malice-network/client/command/third"
37+
"github.com/chainreactors/malice-network/client/command/website"
38+
"github.com/chainreactors/malice-network/client/plugin"
2839
"github.com/chainreactors/malice-network/client/repl"
2940
"github.com/chainreactors/malice-network/helper/consts"
41+
"github.com/chainreactors/malice-network/helper/intermediate"
42+
"github.com/chainreactors/malice-network/helper/proto/services/clientrpc"
3043
"github.com/gookit/config/v2"
3144
"github.com/gookit/config/v2/yaml"
3245
"github.com/spf13/cobra"
@@ -185,6 +198,7 @@ func GenImplantHelp(con *repl.Console) {
185198
panic(err)
186199
}
187200
GenGroupHelp(implantMd, con, consts.ImplantGroup,
201+
basic.Commands,
188202
tasks.Commands,
189203
modules.Commands,
190204
explorer.Commands,
@@ -200,12 +214,17 @@ func GenImplantHelp(con *repl.Console) {
200214
reg.Commands,
201215
taskschd.Commands,
202216
privilege.Commands,
217+
third.Commands,
203218
)
204219

205220
GenGroupHelp(implantMd, con, consts.FileGroup,
206221
file.Commands,
207222
filesystem.Commands,
208223
pipe.Commands)
224+
225+
GenGroupHelp(implantMd, con, consts.PivotGroup,
226+
pivot.Commands,
227+
)
209228
}
210229

211230
func GenClientHelp(con *repl.Console) {
@@ -222,15 +241,47 @@ func GenClientHelp(con *repl.Console) {
222241
extension.Commands,
223242
armory.Commands,
224243
mal.Commands,
244+
configCmd.Commands,
245+
context.Commands,
246+
cert.Commands,
225247
)
226248

227249
GenGroupHelp(clientMd, con, consts.ListenerGroup,
228250
listener.Commands,
251+
website.Commands,
252+
pipeline.Commands,
229253
)
230254

231255
GenGroupHelp(clientMd, con, consts.GeneratorGroup,
232-
build.Commands)
256+
build.Commands,
257+
mutant.Commands)
258+
259+
}
260+
261+
func GenMalHelper(con *repl.Console, name string) {
262+
clientMd, err := os.Create(name + ".md")
263+
if err != nil {
264+
panic(err)
265+
}
233266

267+
rpc := clientrpc.NewMaliceRPCClient(nil)
268+
intermediate.RegisterBuiltin(rpc)
269+
command.RegisterClientFunc(con)
270+
command.RegisterImplantFunc(con)
271+
clientMd.Write([]byte(fmt.Sprintf("## %s\n", name)))
272+
for _, p := range plugin.GetGlobalMalManager().GetAllEmbeddedPlugins() {
273+
var cmds []*cobra.Command
274+
for _, cc := range p.CMDs {
275+
cmds = append(cmds, cc.Command)
276+
}
277+
sort.Sort(byName(cmds))
278+
for _, c := range cmds {
279+
c.SetHelpCommand(nil)
280+
_ = GenMarkdownTreeCustom(c, clientMd, func(s string) string {
281+
return "#" + strings.ReplaceAll(s, " ", "-")
282+
})
283+
}
284+
}
234285
}
235286

236287
func main() {
@@ -242,4 +293,5 @@ func main() {
242293

243294
GenClientHelp(con)
244295
GenImplantHelp(con)
296+
GenMalHelper(con, "community")
245297
}

client/cmd/genlua/gen_lua.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ func main() {
3333
vm := plugin.NewLuaVM()
3434
plug := &plugin.LuaPlugin{DefaultPlugin: &plugin.DefaultPlugin{MalManiFest: &plugin.MalManiFest{}}}
3535
plug.InitLuaContext(vm)
36+
plug.RegisterLuaFunction()
37+
3638
mals.GenerateLuaDefinitionFile(vm, intermediate.BuiltinPackage, plugin.ProtoPackage, intermediate.InternalFunctions.Package(intermediate.BuiltinPackage))
3739
mals.GenerateLuaDefinitionFile(vm, intermediate.RpcPackage, plugin.ProtoPackage, intermediate.InternalFunctions.Package(intermediate.RpcPackage))
3840
mals.GenerateLuaDefinitionFile(vm, intermediate.BeaconPackage, plugin.ProtoPackage, intermediate.InternalFunctions.Package(intermediate.BeaconPackage))

client/command/mal/load.go

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package mal
22

33
import (
4-
plugin2 "github.com/chainreactors/malice-network/client/plugin"
4+
"github.com/chainreactors/malice-network/client/plugin"
55
"path/filepath"
66

77
"github.com/chainreactors/logs"
@@ -15,28 +15,26 @@ import (
1515

1616
func MalLoadCmd(ctx *cobra.Command, con *repl.Console) error {
1717
dirPath := ctx.Flags().Arg(0)
18-
malManager := plugin2.GetGlobalMalManager()
19-
2018
manifestPath := filepath.Join(assets.GetMalsDir(), dirPath, m.ManifestFileName)
21-
manifest, err := plugin2.LoadMalManiFest(manifestPath)
19+
manifest, err := plugin.LoadMalManiFest(manifestPath)
2220
if err != nil {
2321
return err
2422
}
2523

26-
var plug plugin2.Plugin
24+
var plug plugin.Plugin
2725

2826
// 检查是否已加载
29-
if _, exists := malManager.GetExternalPlugin(manifest.Name); exists {
27+
if _, exists := con.MalManager.GetExternalPlugin(manifest.Name); exists {
3028
con.Log.Warnf("mal %s already loaded, reloading\n", manifest.Name)
31-
err := malManager.ReloadExternalMal(manifest.Name)
29+
err := con.MalManager.ReloadExternalMal(manifest.Name)
3230
if err != nil {
3331
return err
3432
}
3533
// 重新获取插件
36-
plug, _ = malManager.GetExternalPlugin(manifest.Name)
34+
plug, _ = con.MalManager.GetExternalPlugin(manifest.Name)
3735
} else {
3836
// 首次加载
39-
plug, err = malManager.LoadExternalMal(manifest)
37+
plug, err = con.MalManager.LoadExternalMal(manifest)
4038
if err != nil {
4139
return err
4240
}
@@ -64,16 +62,15 @@ func MalLoadCmd(ctx *cobra.Command, con *repl.Console) error {
6462
}
6563

6664
func LoadMal(con *repl.Console, rootCmd *cobra.Command, filename string) error {
67-
manifest, err := plugin2.LoadMalManiFest(filename)
65+
manifest, err := plugin.LoadMalManiFest(filename)
6866
if err != nil {
6967
return err
7068
}
7169
return LoadMalWithManifest(con, rootCmd, manifest)
7270
}
7371

74-
func LoadMalWithManifest(con *repl.Console, rootCmd *cobra.Command, manifest *plugin2.MalManiFest) error {
75-
malManager := plugin2.GetGlobalMalManager()
76-
plug, err := malManager.LoadExternalMal(manifest)
72+
func LoadMalWithManifest(con *repl.Console, rootCmd *cobra.Command, manifest *plugin.MalManiFest) error {
73+
plug, err := con.MalManager.LoadExternalMal(manifest)
7774
if err != nil {
7875
return err
7976
}
@@ -99,11 +96,9 @@ func LoadMalWithManifest(con *repl.Console, rootCmd *cobra.Command, manifest *pl
9996
}
10097

10198
func ListMalManifest(con *repl.Console) {
102-
malManager := plugin2.GetGlobalMalManager()
103-
10499
// 获取所有外部插件
105-
externalPlugins := malManager.GetAllExternalPlugins()
106-
embeddedPlugins := malManager.GetAllEmbeddedPlugins()
100+
externalPlugins := con.MalManager.GetAllExternalPlugins()
101+
embeddedPlugins := con.MalManager.GetAllEmbeddedPlugins()
107102

108103
if len(externalPlugins) == 0 && len(embeddedPlugins) == 0 {
109104
con.Log.Infof("No mal loaded")

client/command/mal/refresh.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package mal
22

33
import (
4-
"github.com/chainreactors/malice-network/client/plugin"
54
"github.com/chainreactors/malice-network/client/repl"
65
"github.com/chainreactors/malice-network/helper/consts"
76
"github.com/spf13/cobra"
87
)
98

109
func RefreshMalCmd(cmd *cobra.Command, con *repl.Console) error {
11-
malManager := plugin.GetGlobalMalManager()
1210
implantCmd := con.ImplantMenu()
1311

1412
// 移除所有mal组的命令
@@ -19,22 +17,22 @@ func RefreshMalCmd(cmd *cobra.Command, con *repl.Console) error {
1917
}
2018

2119
// 获取所有外部插件名称
22-
externalPlugins := malManager.GetAllExternalPlugins()
20+
externalPlugins := con.MalManager.GetAllExternalPlugins()
2321
var pluginNames []string
2422
for name := range externalPlugins {
2523
pluginNames = append(pluginNames, name)
2624
}
2725

2826
// 移除所有外部插件
2927
for _, name := range pluginNames {
30-
err := malManager.RemoveExternalMal(name)
28+
err := con.MalManager.RemoveExternalMal(name)
3129
if err != nil {
3230
con.Log.Warnf("Failed to remove plugin %s: %s\n", name, err)
3331
}
3432
}
3533

3634
// 重新加载所有外部mal插件
37-
for _, manifest := range malManager.GetPluginManifests() {
35+
for _, manifest := range con.MalManager.GetPluginManifests() {
3836
err := LoadMalWithManifest(con, implantCmd, manifest)
3937
if err != nil {
4038
con.Log.Errorf("Failed to load mal %s: %s\n", manifest.Name, err)

client/command/mal/remove.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package mal
33
import (
44
"errors"
55
"fmt"
6-
"github.com/chainreactors/malice-network/client/plugin"
76
"github.com/chainreactors/tui"
87
"os"
98
"path/filepath"
@@ -39,13 +38,11 @@ func RemoveMal(name string, con *repl.Console) error {
3938
return errors.New("mal name is required")
4039
}
4140

42-
malManager := plugin.GetGlobalMalManager()
43-
44-
if _, exists := malManager.GetEmbedPlugin(name); exists {
41+
if _, exists := con.MalManager.GetEmbedPlugin(name); exists {
4542
return errors.New("cannot remove embedded mal")
4643
}
4744

48-
plug, exists := malManager.GetExternalPlugin(name)
45+
plug, exists := con.MalManager.GetExternalPlugin(name)
4946
if !exists {
5047
return errors.New("mal not found")
5148
}
@@ -55,7 +52,7 @@ func RemoveMal(name string, con *repl.Console) error {
5552
implantMenu.RemoveCommand(cmd.Command)
5653
}
5754

58-
err := malManager.RemoveExternalMal(name)
55+
err := con.MalManager.RemoveExternalMal(name)
5956
if err != nil {
6057
return err
6158
}

client/plugin/embed.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ func NewEmbedPlugin(malPath, malName string, level MalLevel) (*EmbedPlugin, erro
9090
// 创建LuaPlugin
9191
luaPlugin := &LuaPlugin{
9292
DefaultPlugin: defaultPlugin,
93-
vmFns: make(map[string]lua.LGFunction),
9493
}
9594

9695
// 创建嵌入式插件
@@ -110,7 +109,7 @@ func (plug *EmbedPlugin) Run() error {
110109
if err != nil {
111110
return err
112111
}
113-
plug.registerLuaFunction()
112+
plug.RegisterLuaFunction()
114113
plug.setContext = func(vm *lua.LState) error {
115114
return plug.addEmbedLoader(vm)
116115
}

client/plugin/lua.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ func NewLuaMalPlugin(manifest *MalManiFest) (*LuaPlugin, error) {
6060

6161
mal := &LuaPlugin{
6262
DefaultPlugin: plug,
63-
vmFns: make(map[string]lua.LGFunction),
6463
}
6564

6665
return mal, nil
@@ -72,7 +71,7 @@ func (plug *LuaPlugin) Run() error {
7271
if err != nil {
7372
return err
7473
}
75-
plug.registerLuaFunction()
74+
plug.RegisterLuaFunction()
7675
err = plug.registerLuaOnHooks()
7776
if err != nil {
7877
return err
@@ -195,7 +194,8 @@ func (plug *LuaPlugin) InitLuaContext(vm *lua.LState) error {
195194
return nil
196195
}
197196

198-
func (plug *LuaPlugin) registerLuaFunction() {
197+
func (plug *LuaPlugin) RegisterLuaFunction() {
198+
plug.vmFns = make(map[string]lua.LGFunction)
199199
// 读取resource文件路径(文件系统版本)
200200
plug.registerFunction("script_resource", func(filename string) (string, error) {
201201
resourceFile := filepath.Join(assets.GetMalsDir(), plug.Name, "resources", filename)
@@ -294,6 +294,7 @@ func (plug *LuaPlugin) registerLuaFunction() {
294294
Short: short,
295295
Annotations: map[string]string{
296296
"ttp": ttp,
297+
"mal": plug.Name,
297298
},
298299
Run: func(cmd *cobra.Command, args []string) {
299300
go func() {

client/plugin/manager.go

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ import (
1212
)
1313

1414
var (
15-
globalMalManager *MalManager
16-
managerOnce sync.Once
15+
globalMalManager *MalManager = &MalManager{
16+
embeddedPlugins: make(map[string]*EmbedPlugin),
17+
externalPlugins: make(map[string]Plugin),
18+
globalPlugins: make([]*DefaultPlugin, 0),
19+
loadedCommands: make(Commands)}
1720
)
1821

1922
// MalManager 统一的mal插件管理器,分别管理嵌入式和外部插件
@@ -28,16 +31,9 @@ type MalManager struct {
2831

2932
// GetGlobalMalManager 获取全局mal管理器(单例)
3033
func GetGlobalMalManager() *MalManager {
31-
managerOnce.Do(func() {
32-
globalMalManager = &MalManager{
33-
embeddedPlugins: make(map[string]*EmbedPlugin),
34-
externalPlugins: make(map[string]Plugin),
35-
globalPlugins: make([]*DefaultPlugin, 0),
36-
loadedCommands: make(Commands),
37-
}
38-
// 初始化时加载所有插件
34+
if !globalMalManager.initialized {
3935
globalMalManager.initialize()
40-
})
36+
}
4137
return globalMalManager
4238
}
4339

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11

2-
function load_preset(arg_0)
2+
function load_prebuild(arg_0)
33
local session = active()
44
local arch = barch(session)
55

66
return load_module(session, "arg_0", script_resource("modules/" .. arg_0 .. "." .. arch .. ".dll"))
77
end
88

9-
local load_preset_cmd = command("load_preset", load_preset, "load full|fs|execute|sys|rem precompiled modules", "")
10-
bind_args_completer(load_preset_cmd, { values_completer({"full", "fs", "execute", "sys", "rem"}) })
9+
local load_prebuild_cmd = command("load_prebuild", load_prebuild, "load full|fs|execute|sys|rem precompiled modules", "")
10+
bind_args_completer(load_prebuild_cmd, { values_completer({"full", "fs", "execute", "sys", "rem"}) })

0 commit comments

Comments
 (0)