@bengabay94/mrzero 0.1.1-alpha.1 → 0.2.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/templates/MrZeroExploitDeveloper.template.md +258 -0
- package/agents/templates/MrZeroMapperOS.template.md +180 -0
- package/agents/templates/MrZeroVulnHunterOS.template.md +174 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +137 -44
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +12 -11
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/config/agents.d.ts +0 -4
- package/dist/config/agents.d.ts.map +1 -1
- package/dist/config/agents.js +4 -22
- package/dist/config/agents.js.map +1 -1
- package/dist/config/tool-strings.d.ts +33 -0
- package/dist/config/tool-strings.d.ts.map +1 -0
- package/dist/config/tool-strings.js +148 -0
- package/dist/config/tool-strings.js.map +1 -0
- package/dist/config/tools.d.ts +2 -1
- package/dist/config/tools.d.ts.map +1 -1
- package/dist/config/tools.js +21 -24
- package/dist/config/tools.js.map +1 -1
- package/dist/installer/docker.d.ts.map +1 -1
- package/dist/installer/docker.js +12 -13
- package/dist/installer/docker.js.map +1 -1
- package/dist/installer/launcher.d.ts +13 -0
- package/dist/installer/launcher.d.ts.map +1 -0
- package/dist/installer/launcher.js +142 -0
- package/dist/installer/launcher.js.map +1 -0
- package/dist/installer/mcp.d.ts.map +1 -1
- package/dist/installer/mcp.js +2 -50
- package/dist/installer/mcp.js.map +1 -1
- package/dist/installer/platforms.d.ts +3 -3
- package/dist/installer/platforms.d.ts.map +1 -1
- package/dist/installer/platforms.js +92 -17
- package/dist/installer/platforms.js.map +1 -1
- package/dist/installer/template-renderer.d.ts +28 -0
- package/dist/installer/template-renderer.d.ts.map +1 -0
- package/dist/installer/template-renderer.js +210 -0
- package/dist/installer/template-renderer.js.map +1 -0
- package/dist/utils/platform.d.ts +10 -0
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/platform.js +64 -1
- package/dist/utils/platform.js.map +1 -1
- package/docker/Dockerfile +37 -15
- package/package.json +1 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tool strings for agent template rendering.
|
|
4
|
+
*
|
|
5
|
+
* Each agent has a set of tools, and each tool has multiple placeholder strings
|
|
6
|
+
* that get inserted into the agent's system prompt template based on what
|
|
7
|
+
* tools the user chose to install.
|
|
8
|
+
*
|
|
9
|
+
* Placeholder naming convention:
|
|
10
|
+
* - TOOL_LIST_{TOOLNAME}: Tool description in the "available tools" list
|
|
11
|
+
* - TOOL_USAGE_{TOOLNAME}: How to use the tool in methodology sections
|
|
12
|
+
* - TOOL_RESULTS_{TOOLNAME}: Tool results section in report templates
|
|
13
|
+
* - TOOL_DESC_{TOOLNAME}: Additional tool description paragraphs
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.TOOL_STRINGS = void 0;
|
|
17
|
+
exports.getAgentToolStrings = getAgentToolStrings;
|
|
18
|
+
exports.getToolStrings = getToolStrings;
|
|
19
|
+
exports.getAgentTools = getAgentTools;
|
|
20
|
+
exports.TOOL_STRINGS = {
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// MrZeroMapperOS - Attack Surface Mapping Agent
|
|
23
|
+
// ============================================================================
|
|
24
|
+
MrZeroMapperOS: {
|
|
25
|
+
opengrep: {
|
|
26
|
+
TOOL_LIST_OPENGREP: ' - **opengrep**: Pattern-based code analysis for vulnerability detection',
|
|
27
|
+
TOOL_USAGE_OPENGREP: '- Execute opengrep with security rulesets for the detected languages',
|
|
28
|
+
TOOL_RESULTS_OPENGREP: `### opengrep
|
|
29
|
+
[Summary of pattern-based findings]`,
|
|
30
|
+
},
|
|
31
|
+
gitleaks: {
|
|
32
|
+
TOOL_LIST_GITLEAKS: ' - **Gitleaks**: Scanning for hardcoded secrets and sensitive data',
|
|
33
|
+
TOOL_RESULTS_GITLEAKS: `### Gitleaks
|
|
34
|
+
[Summary of secrets scanning results]`,
|
|
35
|
+
},
|
|
36
|
+
codeql: {
|
|
37
|
+
TOOL_LIST_CODEQL: ' - **CodeQL**: Deep semantic code analysis and taint tracking',
|
|
38
|
+
TOOL_USAGE_CODEQL: '- Run CodeQL queries focused on taint analysis and injection vulnerabilities',
|
|
39
|
+
TOOL_RESULTS_CODEQL: `### CodeQL
|
|
40
|
+
[Summary of semantic analysis results]`,
|
|
41
|
+
},
|
|
42
|
+
joern: {
|
|
43
|
+
TOOL_LIST_JOERN: ' - **Joern**: Code property graph analysis for security flaws',
|
|
44
|
+
TOOL_USAGE_JOERN: '- Use Joern for control flow and data flow analysis',
|
|
45
|
+
TOOL_RESULTS_JOERN: `### Joern
|
|
46
|
+
[Summary of code property graph analysis]`,
|
|
47
|
+
},
|
|
48
|
+
bearer: {
|
|
49
|
+
TOOL_LIST_BEARER: ' - **Bearer**: Security and privacy scanning for sensitive data flows',
|
|
50
|
+
TOOL_USAGE_BEARER: '- Execute Bearer to identify sensitive data handling',
|
|
51
|
+
TOOL_RESULTS_BEARER: `### Bearer
|
|
52
|
+
[Summary of sensitive data flow findings]`,
|
|
53
|
+
},
|
|
54
|
+
linguist: {
|
|
55
|
+
TOOL_LIST_LINGUIST: ' - **Linguist**: Language detection and codebase composition analysis',
|
|
56
|
+
TOOL_USAGE_LINGUIST: '- Run Linguist to understand language composition',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
// ============================================================================
|
|
60
|
+
// MrZeroVulnHunterOS - Vulnerability Hunting Agent
|
|
61
|
+
// ============================================================================
|
|
62
|
+
MrZeroVulnHunterOS: {
|
|
63
|
+
opengrep: {
|
|
64
|
+
TOOL_DESC_OPENGREP: `**Opengrep**: Use for pattern-based detection of common vulnerability patterns across multiple languages. Excellent for finding injection flaws, authentication issues, and cryptographic mistakes.`,
|
|
65
|
+
},
|
|
66
|
+
codeql: {
|
|
67
|
+
TOOL_DESC_CODEQL: `**CodeQL**: Deploy for deep semantic analysis and data flow tracking. Use to trace attacker-controlled input through the codebase to sensitive sinks.`,
|
|
68
|
+
},
|
|
69
|
+
joern: {
|
|
70
|
+
TOOL_DESC_JOERN: `**Joern**: Utilize for code property graph analysis, especially effective for discovering complex control-flow and data-flow vulnerabilities in C/C++ code.`,
|
|
71
|
+
},
|
|
72
|
+
infer: {
|
|
73
|
+
TOOL_DESC_INFER: `**Infer**: Apply for static analysis of memory safety issues, null pointer dereferences, and resource leaks in Java, C, C++, and Objective-C. Note: Only available on x86_64 Linux.`,
|
|
74
|
+
},
|
|
75
|
+
gitleaks: {
|
|
76
|
+
TOOL_DESC_GITLEAKS: `**Gitleaks**: Scan for accidentally committed secrets, private keys, API tokens, and sensitive credentials in git history.`,
|
|
77
|
+
},
|
|
78
|
+
slither: {
|
|
79
|
+
TOOL_DESC_SLITHER: `**Slither**: Use exclusively for Solidity smart contract analysis. Essential for detecting reentrancy, oracle manipulation, and other DeFi-specific vulnerabilities.`,
|
|
80
|
+
},
|
|
81
|
+
trivy: {
|
|
82
|
+
TOOL_DESC_TRIVY: `**Trivy**: Employ for dependency and container vulnerability scanning to identify known CVEs in third-party libraries.`,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// MrZeroExploitDeveloper - Exploit Development Agent
|
|
87
|
+
// ============================================================================
|
|
88
|
+
MrZeroExploitDeveloper: {
|
|
89
|
+
// CLI Tools
|
|
90
|
+
pwntools: {
|
|
91
|
+
TOOL_LIST_PWNTOOLS: '- **pwntools**: Python exploitation framework for CTF and exploit development',
|
|
92
|
+
TOOL_USAGE_PWNTOOLS: '- Use pwntools as the primary framework for binary exploitation',
|
|
93
|
+
},
|
|
94
|
+
ropper: {
|
|
95
|
+
TOOL_LIST_ROPPER: '- **ROPgadget/Ropper**: ROP chain gadget finder and builder',
|
|
96
|
+
TOOL_USAGE_ROPPER: '- Build ROP chains using ROPgadget and one_gadget findings or ropper via pwntools framework',
|
|
97
|
+
},
|
|
98
|
+
one_gadget: {
|
|
99
|
+
TOOL_LIST_ONEGADGET: '- **one_gadget**: Find one-shot RCE gadgets in libc',
|
|
100
|
+
},
|
|
101
|
+
// System tools (detected, not installed by us)
|
|
102
|
+
checksec: {
|
|
103
|
+
TOOL_LIST_CHECKSEC: '- **Standard Linux utilities**: objdump, readelf, checksec, strings, nm, ldd',
|
|
104
|
+
},
|
|
105
|
+
// MCP Servers
|
|
106
|
+
'pwndbg-mcp': {
|
|
107
|
+
TOOL_LIST_PWNDBG: '- **GDB with pwndbg plugin**: Dynamic analysis, debugging, memory inspection (Linux)',
|
|
108
|
+
TOOL_USAGE_PWNDBG: '- Debug failures using GDB/pwndbg',
|
|
109
|
+
TOOL_DEBUG_PWNDBG: `### Debugging Integration
|
|
110
|
+
\`\`\`python
|
|
111
|
+
# Attach GDB for debugging
|
|
112
|
+
p = gdb.debug('./vulnerable', '''
|
|
113
|
+
break *main+100
|
|
114
|
+
continue
|
|
115
|
+
''')
|
|
116
|
+
\`\`\``,
|
|
117
|
+
},
|
|
118
|
+
'ghidra-mcp': {
|
|
119
|
+
TOOL_LIST_GHIDRA: '- **Ghidra**: Static analysis and reverse engineering disassembler',
|
|
120
|
+
},
|
|
121
|
+
'metasploit-mcp': {
|
|
122
|
+
TOOL_LIST_METASPLOIT: '- **Metasploit Framework**: Exploit modules, payloads, encoders, and post-exploitation',
|
|
123
|
+
},
|
|
124
|
+
'ida-pro-mcp': {
|
|
125
|
+
TOOL_LIST_IDA: '- **IDA Pro**: Advanced disassembler for static analysis and reverse engineering',
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Get all tool strings for a specific agent
|
|
131
|
+
*/
|
|
132
|
+
function getAgentToolStrings(agentName) {
|
|
133
|
+
return exports.TOOL_STRINGS[agentName];
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get tool strings for a specific tool within an agent
|
|
137
|
+
*/
|
|
138
|
+
function getToolStrings(agentName, toolName) {
|
|
139
|
+
return exports.TOOL_STRINGS[agentName]?.[toolName];
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get all tools that have strings defined for a specific agent
|
|
143
|
+
*/
|
|
144
|
+
function getAgentTools(agentName) {
|
|
145
|
+
const agentStrings = exports.TOOL_STRINGS[agentName];
|
|
146
|
+
return agentStrings ? Object.keys(agentStrings) : [];
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=tool-strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-strings.js","sourceRoot":"","sources":["../../src/config/tool-strings.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AA6HH,kDAEC;AAKD,wCAEC;AAKD,sCAGC;AApIY,QAAA,YAAY,GAAqC;IAC5D,+EAA+E;IAC/E,gDAAgD;IAChD,+EAA+E;IAC/E,cAAc,EAAE;QACd,QAAQ,EAAE;YACR,kBAAkB,EAAE,4EAA4E;YAChG,mBAAmB,EAAE,sEAAsE;YAC3F,qBAAqB,EAAE;oCACO;SAC/B;QACD,QAAQ,EAAE;YACR,kBAAkB,EAAE,sEAAsE;YAC1F,qBAAqB,EAAE;sCACS;SACjC;QACD,MAAM,EAAE;YACN,gBAAgB,EAAE,iEAAiE;YACnF,iBAAiB,EAAE,8EAA8E;YACjG,mBAAmB,EAAE;uCACY;SAClC;QACD,KAAK,EAAE;YACL,eAAe,EAAE,iEAAiE;YAClF,gBAAgB,EAAE,qDAAqD;YACvE,kBAAkB,EAAE;0CACgB;SACrC;QACD,MAAM,EAAE;YACN,gBAAgB,EAAE,yEAAyE;YAC3F,iBAAiB,EAAE,sDAAsD;YACzE,mBAAmB,EAAE;0CACe;SACrC;QACD,QAAQ,EAAE;YACR,kBAAkB,EAAE,yEAAyE;YAC7F,mBAAmB,EAAE,mDAAmD;SACzE;KACF;IAED,+EAA+E;IAC/E,mDAAmD;IACnD,+EAA+E;IAC/E,kBAAkB,EAAE;QAClB,QAAQ,EAAE;YACR,kBAAkB,EAAE,qMAAqM;SAC1N;QACD,MAAM,EAAE;YACN,gBAAgB,EAAE,uJAAuJ;SAC1K;QACD,KAAK,EAAE;YACL,eAAe,EAAE,6JAA6J;SAC/K;QACD,KAAK,EAAE;YACL,eAAe,EAAE,qLAAqL;SACvM;QACD,QAAQ,EAAE;YACR,kBAAkB,EAAE,4HAA4H;SACjJ;QACD,OAAO,EAAE;YACP,iBAAiB,EAAE,sKAAsK;SAC1L;QACD,KAAK,EAAE;YACL,eAAe,EAAE,wHAAwH;SAC1I;KACF;IAED,+EAA+E;IAC/E,qDAAqD;IACrD,+EAA+E;IAC/E,sBAAsB,EAAE;QACtB,YAAY;QACZ,QAAQ,EAAE;YACR,kBAAkB,EAAE,+EAA+E;YACnG,mBAAmB,EAAE,iEAAiE;SACvF;QACD,MAAM,EAAE;YACN,gBAAgB,EAAE,6DAA6D;YAC/E,iBAAiB,EAAE,6FAA6F;SACjH;QACD,UAAU,EAAE;YACV,mBAAmB,EAAE,qDAAqD;SAC3E;QACD,+CAA+C;QAC/C,QAAQ,EAAE;YACR,kBAAkB,EAAE,8EAA8E;SACnG;QACD,cAAc;QACd,YAAY,EAAE;YACZ,gBAAgB,EAAE,sFAAsF;YACxG,iBAAiB,EAAE,mCAAmC;YACtD,iBAAiB,EAAE;;;;;;;OAOlB;SACF;QACD,YAAY,EAAE;YACZ,gBAAgB,EAAE,oEAAoE;SACvF;QACD,gBAAgB,EAAE;YAChB,oBAAoB,EAAE,wFAAwF;SAC/G;QACD,aAAa,EAAE;YACb,aAAa,EAAE,kFAAkF;SAClG;KACF;CACF,CAAC;AAEF;;GAEG;AACH,SAAgB,mBAAmB,CAAC,SAAiB;IACnD,OAAO,oBAAY,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,SAAiB,EAAE,QAAgB;IAChE,OAAO,oBAAY,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,SAAiB;IAC7C,MAAM,YAAY,GAAG,oBAAY,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC"}
|
package/dist/config/tools.d.ts
CHANGED
|
@@ -6,10 +6,11 @@ export interface ToolConfig {
|
|
|
6
6
|
checkCommand?: string;
|
|
7
7
|
installCommand?: string;
|
|
8
8
|
wrapperName?: string;
|
|
9
|
+
unsupportedOnLinuxArm64?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export declare const DOCKER_TOOLS: Record<string, ToolConfig>;
|
|
11
12
|
export declare const PYTHON_TOOLS: Record<string, ToolConfig>;
|
|
12
13
|
export declare const RUBY_TOOLS: Record<string, ToolConfig>;
|
|
13
14
|
export declare const SYSTEM_TOOLS: Record<string, ToolConfig>;
|
|
14
|
-
export declare const DOCKER_IMAGE
|
|
15
|
+
export declare const DOCKER_IMAGE: string;
|
|
15
16
|
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAyFnD,CAAC;AAIF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAM,CAAC;AAE3D,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAM,CAAC;AAEzD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAwBnD,CAAC;AAIF,eAAO,MAAM,YAAY,QAAmD,CAAC"}
|
package/dist/config/tools.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DOCKER_IMAGE = exports.SYSTEM_TOOLS = exports.RUBY_TOOLS = exports.PYTHON_TOOLS = exports.DOCKER_TOOLS = void 0;
|
|
4
|
+
const platform_js_1 = require("../utils/platform.js");
|
|
4
5
|
exports.DOCKER_TOOLS = {
|
|
6
|
+
// Static Analysis Tools
|
|
5
7
|
opengrep: {
|
|
6
8
|
name: 'opengrep',
|
|
7
9
|
displayName: 'Opengrep',
|
|
@@ -19,9 +21,10 @@ exports.DOCKER_TOOLS = {
|
|
|
19
21
|
codeql: {
|
|
20
22
|
name: 'codeql',
|
|
21
23
|
displayName: 'CodeQL',
|
|
22
|
-
description: 'Deep semantic code analysis and taint tracking',
|
|
24
|
+
description: 'Deep semantic code analysis and taint tracking (not available on Linux ARM64)',
|
|
23
25
|
installMethod: 'docker',
|
|
24
26
|
wrapperName: 'codeql',
|
|
27
|
+
unsupportedOnLinuxArm64: true,
|
|
25
28
|
},
|
|
26
29
|
joern: {
|
|
27
30
|
name: 'joern',
|
|
@@ -33,9 +36,10 @@ exports.DOCKER_TOOLS = {
|
|
|
33
36
|
infer: {
|
|
34
37
|
name: 'infer',
|
|
35
38
|
displayName: 'Infer',
|
|
36
|
-
description: 'Static analysis for memory safety issues',
|
|
39
|
+
description: 'Static analysis for memory safety issues (not available on Linux ARM64)',
|
|
37
40
|
installMethod: 'docker',
|
|
38
41
|
wrapperName: 'infer',
|
|
42
|
+
unsupportedOnLinuxArm64: true,
|
|
39
43
|
},
|
|
40
44
|
bearer: {
|
|
41
45
|
name: 'bearer',
|
|
@@ -65,42 +69,33 @@ exports.DOCKER_TOOLS = {
|
|
|
65
69
|
installMethod: 'docker',
|
|
66
70
|
wrapperName: 'linguist',
|
|
67
71
|
},
|
|
68
|
-
|
|
69
|
-
name: 'tree-sitter',
|
|
70
|
-
displayName: 'Tree-sitter',
|
|
71
|
-
description: 'Syntax tree parsing for code understanding',
|
|
72
|
-
installMethod: 'docker',
|
|
73
|
-
wrapperName: 'tree-sitter',
|
|
74
|
-
},
|
|
75
|
-
};
|
|
76
|
-
exports.PYTHON_TOOLS = {
|
|
72
|
+
// Exploitation Tools
|
|
77
73
|
pwntools: {
|
|
78
74
|
name: 'pwntools',
|
|
79
75
|
displayName: 'pwntools',
|
|
80
76
|
description: 'CTF framework and exploit development library',
|
|
81
|
-
installMethod: '
|
|
82
|
-
|
|
83
|
-
installCommand: 'uv tool install --python 3.12 pwntools',
|
|
77
|
+
installMethod: 'docker',
|
|
78
|
+
wrapperName: 'pwn',
|
|
84
79
|
},
|
|
85
80
|
ropper: {
|
|
86
81
|
name: 'ropper',
|
|
87
82
|
displayName: 'Ropper',
|
|
88
83
|
description: 'ROP gadget finder and binary analysis',
|
|
89
|
-
installMethod: '
|
|
90
|
-
|
|
91
|
-
installCommand: 'uv tool install --python 3.12 ropper',
|
|
84
|
+
installMethod: 'docker',
|
|
85
|
+
wrapperName: 'ropper',
|
|
92
86
|
},
|
|
93
|
-
};
|
|
94
|
-
exports.RUBY_TOOLS = {
|
|
95
87
|
one_gadget: {
|
|
96
88
|
name: 'one_gadget',
|
|
97
89
|
displayName: 'one_gadget',
|
|
98
90
|
description: 'Find one-shot RCE gadgets in libc',
|
|
99
|
-
installMethod: '
|
|
100
|
-
|
|
101
|
-
installCommand: 'gem install one_gadget',
|
|
91
|
+
installMethod: 'docker',
|
|
92
|
+
wrapperName: 'one_gadget',
|
|
102
93
|
},
|
|
103
94
|
};
|
|
95
|
+
// Keep these for backward compatibility but they're now empty
|
|
96
|
+
// All tools are Docker-based except for MCP-connected tools
|
|
97
|
+
exports.PYTHON_TOOLS = {};
|
|
98
|
+
exports.RUBY_TOOLS = {};
|
|
104
99
|
exports.SYSTEM_TOOLS = {
|
|
105
100
|
docker: {
|
|
106
101
|
name: 'docker',
|
|
@@ -112,7 +107,7 @@ exports.SYSTEM_TOOLS = {
|
|
|
112
107
|
gdb: {
|
|
113
108
|
name: 'gdb',
|
|
114
109
|
displayName: 'GDB',
|
|
115
|
-
description: 'GNU Debugger',
|
|
110
|
+
description: 'GNU Debugger (required for pwndbg MCP)',
|
|
116
111
|
installMethod: 'apt',
|
|
117
112
|
checkCommand: 'gdb --version',
|
|
118
113
|
installCommand: 'sudo apt-get install -y gdb',
|
|
@@ -126,5 +121,7 @@ exports.SYSTEM_TOOLS = {
|
|
|
126
121
|
installCommand: 'sudo apt-get install -y checksec',
|
|
127
122
|
},
|
|
128
123
|
};
|
|
129
|
-
|
|
124
|
+
const version = (0, platform_js_1.getPackageVersion)();
|
|
125
|
+
const dockerTag = version === 'latest' ? 'latest' : `v${version}`;
|
|
126
|
+
exports.DOCKER_IMAGE = `ghcr.io/bengabay1994/mrzero-tools:${dockerTag}`;
|
|
130
127
|
//# sourceMappingURL=tools.js.map
|
package/dist/config/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/installer/docker.ts"],"names":[],"mappings":"AA2BA,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAYxD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CA8BzD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/installer/docker.ts"],"names":[],"mappings":"AA2BA,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAYxD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CA8BzD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4C5E;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBtE;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAcnE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D"}
|
package/dist/installer/docker.js
CHANGED
|
@@ -120,11 +120,12 @@ async function createWrapperScript(toolName) {
|
|
|
120
120
|
return false;
|
|
121
121
|
}
|
|
122
122
|
const wrappersDir = (0, platform_js_1.getWrappersDir)();
|
|
123
|
-
const
|
|
123
|
+
const wrapperName = tool.wrapperName || toolName;
|
|
124
|
+
const wrapperPath = path.join(wrappersDir, wrapperName);
|
|
124
125
|
// Ensure wrappers directory exists
|
|
125
126
|
fs.mkdirSync(wrappersDir, { recursive: true });
|
|
126
127
|
// Generate wrapper content
|
|
127
|
-
let toolCommand =
|
|
128
|
+
let toolCommand = wrapperName;
|
|
128
129
|
// Some tools need special handling
|
|
129
130
|
switch (toolName) {
|
|
130
131
|
case 'joern':
|
|
@@ -136,14 +137,11 @@ async function createWrapperScript(toolName) {
|
|
|
136
137
|
case 'linguist':
|
|
137
138
|
toolCommand = 'github-linguist';
|
|
138
139
|
break;
|
|
139
|
-
case 'tree-sitter':
|
|
140
|
-
toolCommand = 'python3 -m tree_sitter';
|
|
141
|
-
break;
|
|
142
140
|
default:
|
|
143
|
-
toolCommand =
|
|
141
|
+
toolCommand = wrapperName;
|
|
144
142
|
}
|
|
145
143
|
const wrapperContent = WRAPPER_TEMPLATE
|
|
146
|
-
.replace(/{{TOOL_NAME}}/g,
|
|
144
|
+
.replace(/{{TOOL_NAME}}/g, wrapperName)
|
|
147
145
|
.replace(/{{TOOL_COMMAND}}/g, toolCommand);
|
|
148
146
|
try {
|
|
149
147
|
fs.writeFileSync(wrapperPath, wrapperContent, { mode: 0o755 });
|
|
@@ -151,7 +149,7 @@ async function createWrapperScript(toolName) {
|
|
|
151
149
|
return true;
|
|
152
150
|
}
|
|
153
151
|
catch (error) {
|
|
154
|
-
logger_js_1.logger.error(`Failed to create wrapper for ${
|
|
152
|
+
logger_js_1.logger.error(`Failed to create wrapper for ${wrapperName}: ${error}`);
|
|
155
153
|
return false;
|
|
156
154
|
}
|
|
157
155
|
}
|
|
@@ -159,16 +157,17 @@ async function createAllWrappers(tools) {
|
|
|
159
157
|
logger_js_1.logger.header('Installing CLI wrappers');
|
|
160
158
|
const wrappersDir = (0, platform_js_1.getWrappersDir)();
|
|
161
159
|
logger_js_1.logger.info(`Wrappers directory: ${wrappersDir}`);
|
|
162
|
-
for (const
|
|
163
|
-
await createWrapperScript(
|
|
160
|
+
for (const toolName of tools) {
|
|
161
|
+
await createWrapperScript(toolName);
|
|
164
162
|
}
|
|
165
163
|
// Check if wrappers dir is in PATH
|
|
166
164
|
const pathEnv = process.env.PATH || '';
|
|
167
165
|
if (!pathEnv.includes(wrappersDir)) {
|
|
168
166
|
logger_js_1.logger.blank();
|
|
169
|
-
logger_js_1.logger.
|
|
170
|
-
logger_js_1.logger.info(`
|
|
171
|
-
logger_js_1.logger.info(`
|
|
167
|
+
logger_js_1.logger.info(`Note: Tools installed to ${wrappersDir}`);
|
|
168
|
+
logger_js_1.logger.info(`Use the MrZero launcher to ensure correct PATH:`);
|
|
169
|
+
logger_js_1.logger.info(` mrzero opencode`);
|
|
170
|
+
logger_js_1.logger.info(` mrzero claude`);
|
|
172
171
|
}
|
|
173
172
|
}
|
|
174
173
|
async function removeWrappers(tools) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/installer/docker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,0CAYC;AAED,4CA8BC;AAED,8CAOC;AAED,
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/installer/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Download and install the MrZero launcher binary
|
|
3
|
+
*/
|
|
4
|
+
export declare function downloadLauncher(): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Remove the MrZero launcher binary
|
|
7
|
+
*/
|
|
8
|
+
export declare function removeLauncher(): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Check if the launcher is installed
|
|
11
|
+
*/
|
|
12
|
+
export declare function isLauncherInstalled(): boolean;
|
|
13
|
+
//# sourceMappingURL=launcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/installer/launcher.ts"],"names":[],"mappings":"AA0DA;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAsCzD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAG7C"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.downloadLauncher = downloadLauncher;
|
|
37
|
+
exports.removeLauncher = removeLauncher;
|
|
38
|
+
exports.isLauncherInstalled = isLauncherInstalled;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const https = __importStar(require("https"));
|
|
42
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
43
|
+
const platform_js_1 = require("../utils/platform.js");
|
|
44
|
+
const LAUNCHER_REPO = 'bengabay1994/MrZero';
|
|
45
|
+
/**
|
|
46
|
+
* Download a file from URL, following redirects
|
|
47
|
+
*/
|
|
48
|
+
function downloadFile(url, dest) {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
const file = fs.createWriteStream(dest);
|
|
51
|
+
const request = (currentUrl, redirectCount = 0) => {
|
|
52
|
+
if (redirectCount > 5) {
|
|
53
|
+
reject(new Error('Too many redirects'));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const protocol = currentUrl.startsWith('https') ? https : require('http');
|
|
57
|
+
protocol.get(currentUrl, (response) => {
|
|
58
|
+
// Handle redirects
|
|
59
|
+
if (response.statusCode === 302 || response.statusCode === 301) {
|
|
60
|
+
const redirectUrl = response.headers.location;
|
|
61
|
+
if (redirectUrl) {
|
|
62
|
+
request(redirectUrl, redirectCount + 1);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (response.statusCode !== 200) {
|
|
67
|
+
fs.unlink(dest, () => { });
|
|
68
|
+
reject(new Error(`HTTP ${response.statusCode}: Failed to download`));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
response.pipe(file);
|
|
72
|
+
file.on('finish', () => {
|
|
73
|
+
file.close();
|
|
74
|
+
resolve();
|
|
75
|
+
});
|
|
76
|
+
file.on('error', (err) => {
|
|
77
|
+
fs.unlink(dest, () => { });
|
|
78
|
+
reject(err);
|
|
79
|
+
});
|
|
80
|
+
}).on('error', (err) => {
|
|
81
|
+
fs.unlink(dest, () => { });
|
|
82
|
+
reject(err);
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
request(url);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Download and install the MrZero launcher binary
|
|
90
|
+
*/
|
|
91
|
+
async function downloadLauncher() {
|
|
92
|
+
const binaryName = (0, platform_js_1.getLauncherBinaryName)();
|
|
93
|
+
const launcherPath = (0, platform_js_1.getLauncherPath)();
|
|
94
|
+
const launcherDir = path.dirname(launcherPath);
|
|
95
|
+
const version = (0, platform_js_1.getPackageVersion)();
|
|
96
|
+
logger_js_1.logger.step(`Downloading MrZero launcher (${binaryName}, v${version})`);
|
|
97
|
+
// Ensure directory exists
|
|
98
|
+
fs.mkdirSync(launcherDir, { recursive: true });
|
|
99
|
+
// Build download URL for specific version
|
|
100
|
+
const versionTag = version === 'latest' ? 'latest' : `v${version}`;
|
|
101
|
+
const url = `https://github.com/${LAUNCHER_REPO}/releases/download/${versionTag}/${binaryName}`;
|
|
102
|
+
try {
|
|
103
|
+
await downloadFile(url, launcherPath);
|
|
104
|
+
// Make executable (Linux/macOS)
|
|
105
|
+
if (process.platform !== 'win32') {
|
|
106
|
+
fs.chmodSync(launcherPath, 0o755);
|
|
107
|
+
}
|
|
108
|
+
logger_js_1.logger.success(`Installed launcher to ${launcherPath}`);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
logger_js_1.logger.error(`Failed to download launcher: ${error}`);
|
|
113
|
+
logger_js_1.logger.blank();
|
|
114
|
+
logger_js_1.logger.warning('The launcher could not be installed.');
|
|
115
|
+
logger_js_1.logger.warning('Without the launcher, tools installed on your system may take');
|
|
116
|
+
logger_js_1.logger.warning('precedence over MrZero\'s containerized tools, which could cause');
|
|
117
|
+
logger_js_1.logger.warning('unexpected behavior.');
|
|
118
|
+
logger_js_1.logger.blank();
|
|
119
|
+
logger_js_1.logger.info('You can still use MrZero tools by manually setting your PATH:');
|
|
120
|
+
logger_js_1.logger.info(' export PATH="$HOME/.local/bin/mrzero-tools:$PATH"');
|
|
121
|
+
logger_js_1.logger.info('Then run opencode or claude directly.');
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Remove the MrZero launcher binary
|
|
127
|
+
*/
|
|
128
|
+
async function removeLauncher() {
|
|
129
|
+
const launcherPath = (0, platform_js_1.getLauncherPath)();
|
|
130
|
+
if (fs.existsSync(launcherPath)) {
|
|
131
|
+
fs.unlinkSync(launcherPath);
|
|
132
|
+
logger_js_1.logger.success('Removed MrZero launcher');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Check if the launcher is installed
|
|
137
|
+
*/
|
|
138
|
+
function isLauncherInstalled() {
|
|
139
|
+
const launcherPath = (0, platform_js_1.getLauncherPath)();
|
|
140
|
+
return fs.existsSync(launcherPath);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/installer/launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/installer/mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/installer/mcp.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AA8LD,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+BpF;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAYzF;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgC7E"}
|
package/dist/installer/mcp.js
CHANGED
|
@@ -42,45 +42,6 @@ const shell_js_1 = require("../utils/shell.js");
|
|
|
42
42
|
const logger_js_1 = require("../utils/logger.js");
|
|
43
43
|
const platform_js_1 = require("../utils/platform.js");
|
|
44
44
|
const mcp_servers_js_1 = require("../config/mcp-servers.js");
|
|
45
|
-
const detector_js_1 = require("./detector.js");
|
|
46
|
-
async function checkPrerequisite(serverName) {
|
|
47
|
-
const server = mcp_servers_js_1.MCP_SERVERS[serverName];
|
|
48
|
-
if (!server?.requiresPrerequisite) {
|
|
49
|
-
return { met: true };
|
|
50
|
-
}
|
|
51
|
-
switch (server.requiresPrerequisite) {
|
|
52
|
-
case 'pwndbg': {
|
|
53
|
-
const status = await (0, detector_js_1.detectPwndbg)();
|
|
54
|
-
if (!status.installed) {
|
|
55
|
-
return { met: false, reason: 'pwndbg is not installed' };
|
|
56
|
-
}
|
|
57
|
-
return { met: true };
|
|
58
|
-
}
|
|
59
|
-
case 'ghidra': {
|
|
60
|
-
const status = await (0, detector_js_1.detectGhidra)();
|
|
61
|
-
if (!status.installed) {
|
|
62
|
-
return { met: false, reason: 'Ghidra is not installed' };
|
|
63
|
-
}
|
|
64
|
-
return { met: true };
|
|
65
|
-
}
|
|
66
|
-
case 'metasploit': {
|
|
67
|
-
const status = await (0, detector_js_1.detectMetasploit)();
|
|
68
|
-
if (!status.installed) {
|
|
69
|
-
return { met: false, reason: 'Metasploit is not installed' };
|
|
70
|
-
}
|
|
71
|
-
return { met: true };
|
|
72
|
-
}
|
|
73
|
-
case 'ida-pro': {
|
|
74
|
-
const status = await (0, detector_js_1.detectIdaPro)();
|
|
75
|
-
if (!status.installed) {
|
|
76
|
-
return { met: false, reason: 'IDA Pro is not installed' };
|
|
77
|
-
}
|
|
78
|
-
return { met: true };
|
|
79
|
-
}
|
|
80
|
-
default:
|
|
81
|
-
return { met: true };
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
45
|
async function installPwndbgMcp() {
|
|
85
46
|
const server = mcp_servers_js_1.MCP_SERVERS['pwndbg-mcp'];
|
|
86
47
|
const mcpDir = (0, platform_js_1.getMcpServersDir)();
|
|
@@ -252,17 +213,8 @@ async function installMcpServer(serverName) {
|
|
|
252
213
|
reason: `Unknown MCP server: ${serverName}`,
|
|
253
214
|
};
|
|
254
215
|
}
|
|
255
|
-
//
|
|
256
|
-
|
|
257
|
-
if (!prereq.met) {
|
|
258
|
-
logger_js_1.logger.warning(`Skipping ${server.displayName}: ${prereq.reason}`);
|
|
259
|
-
return {
|
|
260
|
-
name: server.name,
|
|
261
|
-
installed: false,
|
|
262
|
-
skipped: true,
|
|
263
|
-
reason: prereq.reason,
|
|
264
|
-
};
|
|
265
|
-
}
|
|
216
|
+
// Note: We no longer check prerequisites here since user explicitly chose to install
|
|
217
|
+
// The warning about prerequisites is shown during MCP server selection
|
|
266
218
|
switch (serverName) {
|
|
267
219
|
case 'pwndbg-mcp':
|
|
268
220
|
return installPwndbgMcp();
|