rtexit-method 0.1.17 → 0.1.18

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.
@@ -0,0 +1,319 @@
1
+ #!/bin/bash
2
+ # RTExit — Tool Verification Script
3
+ # Checks all tools referenced in RTExit skills are installed
4
+
5
+ RED='\033[0;31m'
6
+ GREEN='\033[0;32m'
7
+ YELLOW='\033[1;33m'
8
+ BLUE='\033[0;34m'
9
+ NC='\033[0m'
10
+
11
+ PASS=0
12
+ FAIL=0
13
+ WARN=0
14
+
15
+ check() {
16
+ local name="$1"
17
+ local cmd="$2"
18
+ if command -v "$cmd" &>/dev/null 2>&1; then
19
+ echo -e " ${GREEN}✓${NC} $name"
20
+ ((PASS++))
21
+ else
22
+ echo -e " ${RED}✗${NC} $name"
23
+ ((FAIL++))
24
+ fi
25
+ }
26
+
27
+ check_path() {
28
+ local name="$1"
29
+ local path="$2"
30
+ if [ -f "$path" ] || [ -d "$path" ]; then
31
+ echo -e " ${GREEN}✓${NC} $name"
32
+ ((PASS++))
33
+ else
34
+ echo -e " ${RED}✗${NC} $name"
35
+ ((FAIL++))
36
+ fi
37
+ }
38
+
39
+ check_python() {
40
+ local name="$1"
41
+ local module="$2"
42
+ if python3 -c "import $module" &>/dev/null 2>&1; then
43
+ echo -e " ${GREEN}✓${NC} $name"
44
+ ((PASS++))
45
+ else
46
+ echo -e " ${YELLOW}⚠${NC} $name — optional"
47
+ ((WARN++))
48
+ fi
49
+ }
50
+
51
+ echo ""
52
+ echo "═══════════════════════════════════════════"
53
+ echo " RTExit Tool Verification v3.0"
54
+ echo "═══════════════════════════════════════════"
55
+
56
+ # ── RECON & OSINT ─────────────────────────────
57
+ echo ""
58
+ echo -e "${BLUE}[ RECON & OSINT ]${NC}"
59
+ check "nmap" "nmap"
60
+ check "masscan" "masscan"
61
+ check "subfinder" "subfinder"
62
+ check "amass" "amass"
63
+ check "httpx" "httpx"
64
+ check "nuclei" "nuclei"
65
+ check "ffuf" "ffuf"
66
+ check "gobuster" "gobuster"
67
+ check "theHarvester" "theHarvester"
68
+ check "shodan" "shodan"
69
+ check "gau" "gau"
70
+ check "waybackurls" "waybackurls"
71
+ check "gowitness" "gowitness"
72
+ check "gitleaks" "gitleaks"
73
+ check "recon-ng" "recon-ng"
74
+ check "fierce" "fierce"
75
+ check "dnsrecon" "dnsrecon"
76
+ check "dnsenum" "dnsenum"
77
+ check "nbtscan" "nbtscan"
78
+ check "smbmap" "smbmap"
79
+ check "enum4linux" "enum4linux"
80
+ check_python "enum4linux-ng" "enum4linux_ng"
81
+ check_python "maigret" "maigret"
82
+ check_python "holehe" "holehe"
83
+ check_python "ghunt" "ghunt"
84
+ check_python "spiderfoot" "sflib"
85
+ check "h8mail" "h8mail"
86
+ check "crosslinked" "crosslinked"
87
+
88
+ # ── WEB APPLICATION ───────────────────────────
89
+ echo ""
90
+ echo -e "${BLUE}[ WEB APPLICATION ]${NC}"
91
+ check "sqlmap" "sqlmap"
92
+ check "ghauri" "ghauri"
93
+ check "dalfox" "dalfox"
94
+ check "nikto" "nikto"
95
+ check "wfuzz" "wfuzz"
96
+ check "whatweb" "whatweb"
97
+ check "wafw00f" "wafw00f"
98
+ check "testssl.sh" "testssl.sh"
99
+ check "mitmproxy" "mitmproxy"
100
+ check "arjun" "arjun"
101
+ check "x8" "x8"
102
+ check "smuggler" "smuggler"
103
+ check "jwt_tool" "jwt_tool"
104
+ check "grpcurl" "grpcurl"
105
+ check_python "graphw00f" "graphw00f"
106
+ check_python "clairvoyance" "clairvoyance"
107
+ check "zap" "zap"
108
+ check "interactsh-client" "interactsh-client"
109
+
110
+ # ── ACTIVE DIRECTORY ──────────────────────────
111
+ echo ""
112
+ echo -e "${BLUE}[ ACTIVE DIRECTORY ]${NC}"
113
+ check "impacket-psexec" "impacket-psexec"
114
+ check "impacket-secretsdump" "impacket-secretsdump"
115
+ check "impacket-GetUserSPNs" "impacket-GetUserSPNs"
116
+ check "impacket-GetNPUsers" "impacket-GetNPUsers"
117
+ check "certipy" "certipy"
118
+ check "evil-winrm" "evil-winrm"
119
+ check "bloodhound-python" "bloodhound-python"
120
+ check "kerbrute" "kerbrute"
121
+ check "netexec" "netexec"
122
+ check "responder" "responder"
123
+ check "mitm6" "mitm6"
124
+ check "coercer" "coercer"
125
+ check "pyrdp-mitm" "pyrdp-mitm"
126
+ check_python "donpapi" "DonPAPI"
127
+ check_path "NoPac" "/opt/noPac"
128
+ check_path "PKINITtools" "/opt/PKINITtools"
129
+ check_path "PetitPotam" "/opt/PetitPotam"
130
+
131
+ # ── CLOUD ─────────────────────────────────────
132
+ echo ""
133
+ echo -e "${BLUE}[ CLOUD ]${NC}"
134
+ check "aws" "aws"
135
+ check "kubectl" "kubectl"
136
+ check "pacu" "pacu"
137
+ check "roadrecon" "roadrecon"
138
+ check "pmapper" "pmapper"
139
+ check "prowler" "prowler"
140
+ check "stratus" "stratus"
141
+ check "teamfiltration" "teamfiltration"
142
+ check_python "scoutsuite" "ScoutSuite"
143
+ check "kube-hunter" "kube-hunter"
144
+ check "cloudlist" "cloudlist"
145
+ check "mapcidr" "mapcidr"
146
+
147
+ # ── PASSWORD & HASHES ─────────────────────────
148
+ echo ""
149
+ echo -e "${BLUE}[ PASSWORD & HASHES ]${NC}"
150
+ check "hashcat" "hashcat"
151
+ check "john" "john"
152
+ check "hydra" "hydra"
153
+ check "medusa" "medusa"
154
+ check "cewl" "cewl"
155
+ check "crunch" "crunch"
156
+ check "cupp" "cupp"
157
+ check "pypykatz" "pypykatz"
158
+ check_python "patator" "patator"
159
+ check "onesixtyone" "onesixtyone"
160
+
161
+ # ── POST-EXPLOITATION & C2 ────────────────────
162
+ echo ""
163
+ echo -e "${BLUE}[ POST-EXPLOITATION & C2 ]${NC}"
164
+ check "msfconsole" "msfconsole"
165
+ check "sliver-client" "sliver-client"
166
+ check "chisel" "chisel"
167
+ check "ligolo-proxy" "ligolo-proxy"
168
+ check "socat" "socat"
169
+ check "iodine" "iodine"
170
+ check_path "Empire" "/opt/Empire"
171
+ check_path "Villain" "/opt/Villain"
172
+ check_path "PoshC2" "/opt/PoshC2"
173
+ check_path "Atomic Red Team" "/opt/atomic-red-team/atomics"
174
+ check_path "Caldera" "/opt/caldera"
175
+
176
+ # ── NETWORK ───────────────────────────────────
177
+ echo ""
178
+ echo -e "${BLUE}[ NETWORK ]${NC}"
179
+ check "tcpdump" "tcpdump"
180
+ check "tshark" "tshark"
181
+ check "bettercap" "bettercap"
182
+ check "ettercap" "ettercap"
183
+ check "dsniff" "dsniff"
184
+ check "arpwatch" "arpwatch"
185
+ check "netsniff-ng" "netsniff-ng"
186
+ check "hping3" "hping3"
187
+ check "proxychains4" "proxychains4"
188
+ check "macchanger" "macchanger"
189
+ check "sslstrip" "sslstrip"
190
+
191
+ # ── EXPLOITATION ──────────────────────────────
192
+ echo ""
193
+ echo -e "${BLUE}[ EXPLOITATION ]${NC}"
194
+ check "searchsploit" "searchsploit"
195
+ check "phpggc" "phpggc"
196
+ check "beef-xss" "beef-xss"
197
+ check_path "SET" "/opt/setoolkit"
198
+ check "gophish" "gophish"
199
+ check_path "routersploit" "/opt/routersploit"
200
+ check "weevely" "weevely"
201
+ check_python "king-phisher" "king_phisher"
202
+
203
+ # ── BINARY ANALYSIS & RE ──────────────────────
204
+ echo ""
205
+ echo -e "${BLUE}[ BINARY ANALYSIS & REVERSE ENGINEERING ]${NC}"
206
+ check "gdb" "gdb"
207
+ check "radare2" "r2"
208
+ check "ghidra" "ghidra"
209
+ check "binwalk" "binwalk"
210
+ check "strings" "strings"
211
+ check "ltrace" "ltrace"
212
+ check "strace" "strace"
213
+ check "pwntools" "pwn"
214
+ check "floss" "floss"
215
+ check "objdump" "objdump"
216
+
217
+ # ── FUZZING ───────────────────────────────────
218
+ echo ""
219
+ echo -e "${BLUE}[ FUZZING ]${NC}"
220
+ check "afl-fuzz" "afl-fuzz"
221
+ check "radamsa" "radamsa"
222
+ check_python "boofuzz" "boofuzz"
223
+
224
+ # ── FORENSICS ─────────────────────────────────
225
+ echo ""
226
+ echo -e "${BLUE}[ FORENSICS ]${NC}"
227
+ check "foremost" "foremost"
228
+ check "dc3dd" "dc3dd"
229
+ check "testdisk" "testdisk"
230
+ check "bulk_extractor" "bulk_extractor"
231
+ check "exiftool" "exiftool"
232
+ check "vol" "vol"
233
+ check_path "volatility3" "/opt/volatility3"
234
+
235
+ # ── STEGANOGRAPHY ─────────────────────────────
236
+ echo ""
237
+ echo -e "${BLUE}[ STEGANOGRAPHY ]${NC}"
238
+ check "steghide" "steghide"
239
+ check "zsteg" "zsteg"
240
+ check "stegsolve" "stegsolve"
241
+ check "binwalk" "binwalk"
242
+ check "exiftool" "exiftool"
243
+ check_python "stegoveritas" "stegoveritas"
244
+
245
+ # ── MOBILE ────────────────────────────────────
246
+ echo ""
247
+ echo -e "${BLUE}[ MOBILE ]${NC}"
248
+ check "apktool" "apktool"
249
+ check "jadx" "jadx"
250
+ check "frida" "frida"
251
+ check "objection" "objection"
252
+ check "apkleaks" "apkleaks"
253
+ check "dex2jar" "dex2jar"
254
+ check_python "drozer" "drozer"
255
+ check "adb" "adb"
256
+ check "peirates" "peirates"
257
+ check "ScareCrow" "ScareCrow"
258
+ check "adb" "adb"
259
+
260
+ # ── CONTAINER & KUBERNETES ────────────────────
261
+ echo ""
262
+ echo -e "${BLUE}[ CONTAINER & KUBERNETES ]${NC}"
263
+ check "cdk" "cdk"
264
+ check "deepce" "deepce"
265
+ check "botb" "botb"
266
+ check "trivy" "trivy"
267
+ check "dive" "dive"
268
+ check "kubectl" "kubectl"
269
+ check "kube-hunter" "kube-hunter"
270
+ check_path "peirates" "/opt/peirates"
271
+
272
+ # ── EVASION & PAYLOAD GENERATION ─────────────
273
+ echo ""
274
+ echo -e "${BLUE}[ EVASION & PAYLOAD GENERATION ]${NC}"
275
+ check_path "Veil" "/opt/Veil"
276
+ check_path "macro_pack" "/opt/macro_pack"
277
+ check_path "Donut" "/opt/godonuts"
278
+ check_path "ScareCrow" "/opt/ScareCrow"
279
+ check "msfvenom" "msfvenom"
280
+ check_path "electronegativity" "/usr/local/bin/electronegativity"
281
+
282
+ # ── AI/LLM SECURITY ───────────────────────────
283
+ echo ""
284
+ echo -e "${BLUE}[ AI/LLM SECURITY ]${NC}"
285
+ check_python "garak" "garak"
286
+ check "promptfoo" "promptfoo"
287
+
288
+ # ── VOIP & HARDWARE ───────────────────────────
289
+ echo ""
290
+ echo -e "${BLUE}[ VOIP & HARDWARE/IOT ]${NC}"
291
+ check_path "sipvicious" "/opt/sipvicious"
292
+ check "rtpbreak" "rtpbreak"
293
+ check "pjsua" "pjsua"
294
+ check "openocd" "openocd"
295
+ check "flashrom" "flashrom"
296
+ check "avrdude" "avrdude"
297
+ check_path "ucsniff" "/opt/ucsniff"
298
+
299
+ # ── OSINT SPECIALIZED ─────────────────────────
300
+ echo ""
301
+ echo -e "${BLUE}[ OSINT SPECIALIZED ]${NC}"
302
+ check "interactsh-client" "interactsh-client"
303
+ check "chaos" "chaos"
304
+ check "cloudlist" "cloudlist"
305
+ check_python "h8mail" "h8mail"
306
+
307
+ # ── SUMMARY ───────────────────────────────────
308
+ echo ""
309
+ echo "═══════════════════════════════════════════"
310
+ echo -e " ${GREEN}✓ Passed: $PASS${NC} | ${RED}✗ Failed: $FAIL${NC} | ${YELLOW}⚠ Warnings: $WARN${NC}"
311
+ TOTAL=$((PASS + FAIL))
312
+ PCT=$((PASS * 100 / TOTAL))
313
+ echo -e " Coverage: ${GREEN}$PCT%${NC} ($PASS/$TOTAL tools)"
314
+ echo "═══════════════════════════════════════════"
315
+ echo ""
316
+
317
+ if [ $FAIL -gt 0 ]; then
318
+ echo -e "${YELLOW}Tip: Some tools install on first use. Run: apt-get install <tool> or pip3 install <tool>${NC}"
319
+ fi
@@ -1,48 +1,91 @@
1
- const { renderBanner } = require('../lib/banner');
2
- const { resolveRepoRoot, resolveTargetRoot } = require('../lib/paths');
3
- const { copyPackagedAssets } = require('../lib/copy-assets');
4
- const { writeUserConfig } = require('../lib/write-config');
5
- const { askInstallQuestions } = require('../lib/prompts');
6
- const { resolveSkillSet } = require('../lib/profiles');
7
-
8
- async function installCommand(options = {}) {
9
- const repoRoot = options.repoRoot || resolveRepoRoot();
10
- const cwd = options.cwd || process.cwd();
11
- const io = options.io || console;
12
- const promptAdapter = options.promptAdapter || askInstallQuestions;
13
-
14
- io.log(renderBanner());
15
-
16
- const answers = await promptAdapter({ cwd });
17
- if (!answers.confirmed) {
18
- io.log('RTExit install cancelled.');
19
- return;
20
- }
21
-
22
- const targetRoot = resolveTargetRoot(answers.targetDirectory);
23
-
24
- const ides = answers.ides && answers.ides.length ? answers.ides : ['agents'];
25
- const allowedSkills = resolveSkillSet(answers.profiles || ['all']);
26
- await copyPackagedAssets({ repoRoot, targetRoot, ides, allowedSkills });
27
- await writeUserConfig({
28
- targetRoot,
29
- answers: {
30
- language: answers.language,
31
- document_output_language: answers.document_output_language,
32
- },
33
- });
34
-
35
- const ideFolders = ides.map((ide) => {
36
- const map = { agents: '.agents/skills', claude: '.claude/skills', trae: '.trae/skills', codex: '.codex/skills' };
37
- return map[ide] || `.${ide}/skills`;
38
- });
39
-
40
- io.log('RTExit installed successfully.');
41
- io.log(`Skills installed: ${allowedSkills.size} skills into ${ideFolders.join(', ')}`);
42
- io.log('Next steps:');
43
- io.log('1. Open _rtexit/config.user.toml and complete client/project details');
44
- io.log('2. Open your AI IDE in this project');
45
- io.log('3. Start with rt-help');
46
- }
47
-
48
- module.exports = { installCommand };
1
+ const { renderBanner } = require('../lib/banner');
2
+ const { resolveRepoRoot, resolveTargetRoot } = require('../lib/paths');
3
+ const { copyPackagedAssets } = require('../lib/copy-assets');
4
+ const { writeUserConfig } = require('../lib/write-config');
5
+ const { askInstallQuestions } = require('../lib/prompts');
6
+ const { resolveSkillSet } = require('../lib/profiles');
7
+ const path = require('node:path');
8
+ const fs = require('node:fs');
9
+
10
+ async function installCommand(options = {}) {
11
+ const repoRoot = options.repoRoot || resolveRepoRoot();
12
+ const cwd = options.cwd || process.cwd();
13
+ const io = options.io || console;
14
+ const promptAdapter = options.promptAdapter || askInstallQuestions;
15
+
16
+ io.log(renderBanner());
17
+
18
+ const answers = await promptAdapter({ cwd });
19
+ if (!answers.confirmed) {
20
+ io.log('RTExit install cancelled.');
21
+ return;
22
+ }
23
+
24
+ const targetRoot = resolveTargetRoot(answers.targetDirectory);
25
+
26
+ const ides = answers.ides && answers.ides.length ? answers.ides : ['agents'];
27
+ const allowedSkills = resolveSkillSet(answers.profiles || ['all']);
28
+ await copyPackagedAssets({ repoRoot, targetRoot, ides, allowedSkills });
29
+ await writeUserConfig({
30
+ targetRoot,
31
+ answers: {
32
+ language: answers.language,
33
+ document_output_language: answers.document_output_language,
34
+ },
35
+ });
36
+
37
+ const ideFolders = ides.map((ide) => {
38
+ const map = { agents: '.agents/skills', claude: '.claude/skills', trae: '.trae/skills', codex: '.codex/skills' };
39
+ return map[ide] || `.${ide}/skills`;
40
+ });
41
+
42
+ const dockerComposePath = path.join(targetRoot, 'docker', 'docker-compose.yml');
43
+ const dockerInstalled = fs.existsSync(dockerComposePath);
44
+
45
+ io.log('');
46
+ io.log('════════════════════════════════════════════');
47
+ io.log(' RTExit installed successfully!');
48
+ io.log('════════════════════════════════════════════');
49
+ io.log('');
50
+ io.log(` Skills: ${allowedSkills.size} skills → ${ideFolders.join(', ')}`);
51
+ io.log('');
52
+
53
+ if (dockerInstalled) {
54
+ io.log(' ┌─ STEP 1: Start the Docker Lab ─────────────────────────────┐');
55
+ io.log(' │ │');
56
+ io.log(' │ cd docker │');
57
+ io.log(' │ docker compose up -d │');
58
+ io.log(' │ │');
59
+ io.log(' │ First run downloads ~4GB image. Subsequent starts: <5s │');
60
+ io.log(' └─────────────────────────────────────────────────────────────┘');
61
+ io.log('');
62
+ io.log(' ┌─ STEP 2: Enter the Shell ───────────────────────────────────┐');
63
+ io.log(' │ │');
64
+ io.log(' │ docker exec -it rtexit-kali bash │');
65
+ io.log(' │ │');
66
+ io.log(' │ 300+ tools ready. Your project is at /workspace │');
67
+ io.log(' └─────────────────────────────────────────────────────────────┘');
68
+ io.log('');
69
+ io.log(' ┌─ STEP 3: Configure & Start ─────────────────────────────────┐');
70
+ io.log(' │ │');
71
+ io.log(' │ 1. Edit _rtexit/config.user.toml (client/project info) │');
72
+ io.log(' │ 2. Open your AI IDE in this directory │');
73
+ io.log(' │ 3. Start with: rt-help │');
74
+ io.log(' │ │');
75
+ io.log(' └─────────────────────────────────────────────────────────────┘');
76
+ io.log('');
77
+ io.log(' Docker README: docker/README.md');
78
+ io.log(' Build locally: see docker/README.md → "Build Locally" section');
79
+ } else {
80
+ io.log(' Next steps:');
81
+ io.log(' 1. Edit _rtexit/config.user.toml with your engagement details');
82
+ io.log(' 2. Open your AI IDE in this project');
83
+ io.log(' 3. Start with rt-help');
84
+ }
85
+
86
+ io.log('');
87
+ io.log('════════════════════════════════════════════');
88
+ io.log('');
89
+ }
90
+
91
+ module.exports = { installCommand };
@@ -24,6 +24,7 @@ function getInstallEntries(ides = ['agents'], allowedSkills = null) {
24
24
  { type: 'path', value: 'packaged-assets/templates', target: 'templates' },
25
25
  { type: 'path', value: 'packaged-assets/resources', target: 'resources' },
26
26
  { type: 'path', value: 'packaged-assets/RTEXIT.md', target: 'RTEXIT.md' },
27
+ { type: 'path', value: 'packaged-assets/docker', target: 'docker' },
27
28
  ];
28
29
  }
29
30