rtexit-method 0.1.19 → 0.1.21

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,86 @@
1
+ #!/bin/bash
2
+ # Phase 3 — Active Directory & Windows
3
+ source "$(dirname "$0")/lib.sh"
4
+
5
+ phase_header "PHASE 3 — Active Directory & Windows"
6
+
7
+ section "Impacket Suite"
8
+ chk "impacket-psexec" impacket-psexec
9
+ chk "impacket-smbexec" impacket-smbexec
10
+ chk "impacket-wmiexec" impacket-wmiexec
11
+ chk "impacket-secretsdump" impacket-secretsdump
12
+ chk "impacket-GetUserSPNs" impacket-GetUserSPNs
13
+ chk "impacket-GetNPUsers" impacket-GetNPUsers
14
+ chk "impacket-ntlmrelayx" impacket-ntlmrelayx
15
+ chk "impacket-rpcdump" impacket-rpcdump
16
+ chk "impacket-samrdump" impacket-samrdump
17
+ chk "impacket-lookupsid" impacket-lookupsid
18
+ chk "impacket-ticketer" impacket-ticketer
19
+ chk "impacket-getST" impacket-getST
20
+
21
+ section "Core AD Tools"
22
+ chk "certipy" certipy
23
+ chk "evil-winrm" evil-winrm
24
+ chk "bloodhound-python" bloodhound-python
25
+ chk "kerbrute" kerbrute
26
+ chk "netexec" netexec
27
+ chk "crackmapexec" crackmapexec
28
+ chk "ldeep" ldeep
29
+ chk "windapsearch" windapsearch
30
+
31
+ section "Enumeration"
32
+ chk "ldapdomaindump" ldapdomaindump
33
+ chk "enum4linux" enum4linux
34
+ chk "enum4linux-ng" enum4linux-ng
35
+ chk "nbtscan" nbtscan
36
+ chk "smbmap" smbmap
37
+ chk "smbclient" smbclient
38
+
39
+ section "Coercion & Relay"
40
+ chk "responder" responder
41
+ chk "mitm6" mitm6
42
+ chk_py "coercer" coercer
43
+ chk_dir "PetitPotam" /opt/PetitPotam
44
+ chk_dir "krbrelayx" /opt/krbrelayx
45
+
46
+ section "ADCS Attacks"
47
+ chk_dir "PKINITtools" /opt/PKINITtools
48
+ chk "certipy" certipy
49
+
50
+ section "Kerberos Attacks"
51
+ chk_dir "KrbRelayUp" /opt/KrbRelayUp
52
+ chk_py "pywhisker" pywhisker
53
+
54
+ section "CVE Exploits"
55
+ chk_dir "Zerologon" /opt/CVE-2020-1472
56
+ chk_dir "PrintNightmare" /opt/PrintNightmare
57
+ chk_dir "NoPac" /opt/noPac
58
+
59
+ section "Persistence"
60
+ chk_dir "ADFSpoof (SAML)" /opt/ADFSpoof
61
+ chk_py "bloodyAD" bloodyAD
62
+ chk_dir "pyGPOAbuse" /opt/pyGPOAbuse
63
+
64
+ section "Credential Hunting"
65
+ chk_py "pypykatz" pypykatz
66
+ chk_dir "DonPAPI" /opt/DonPAPI
67
+ chk_py "pyrdp" pyrdp
68
+
69
+ section "Evasion (AD)"
70
+ chk_dir "SysWhispers3" /opt/SysWhispers3
71
+ chk_dir "ScareCrow" /opt/ScareCrow
72
+ chk_dir "KrbRelayUp" /opt/KrbRelayUp
73
+
74
+ section "BloodHound"
75
+ chk_dir "BloodHound.py" /opt/BloodHound.py
76
+ chk "bloodhound-python" bloodhound-python
77
+
78
+ section "Post-Auth Lateral"
79
+ chk_py "DeathStar" deathstar
80
+ chk_dir "DeathStar" /opt/DeathStar
81
+
82
+ section "Exchange / SharePoint"
83
+ chk "roadrecon" roadrecon
84
+ chk_py "roadtools" roadtools
85
+
86
+ phase_summary
@@ -0,0 +1,60 @@
1
+ #!/bin/bash
2
+ # Phase 4 — Cloud Platforms
3
+ source "$(dirname "$0")/lib.sh"
4
+
5
+ phase_header "PHASE 4 — Cloud Platforms (AWS / Azure / GCP)"
6
+
7
+ section "AWS"
8
+ chk "aws" aws
9
+ chk "pacu" pacu
10
+ chk "enumerate-iam" enumerate-iam
11
+ chk "awswhoami" awswhoami
12
+ chk_py "boto3" boto3
13
+ chk_py "botocore" botocore
14
+ chk_py "principalmapper" principalmapper
15
+ chk "cloudfox" cloudfox
16
+ chk_py "s3scanner" s3scanner
17
+ chk_py "prowler" prowler
18
+ chk "stratus" stratus
19
+ chk_dir "cloud_enum" /opt/cloud_enum
20
+ chk_py "checkov" checkov
21
+
22
+ section "Azure"
23
+ chk "az" az
24
+ chk "azcopy" azcopy
25
+ chk "roadrecon" roadrecon
26
+ chk_py "roadtools" roadtools
27
+ chk "teamfiltration" teamfiltration
28
+ chk_py "msticpy" msticpy
29
+
30
+ section "GCP"
31
+ chk_py "google.cloud.storage" google.cloud.storage
32
+ chk_py "gcp_scanner" gcp_scanner
33
+
34
+ section "Kubernetes"
35
+ chk "kubectl" kubectl
36
+ chk "kubectx" kubectx
37
+ chk "kubens" kubens
38
+ chk "helm" helm
39
+ chk "kube-hunter" kube-hunter
40
+ chk "kube-bench" kube-bench
41
+ chk "peirates" peirates
42
+ chk "kubesploit" kubesploit
43
+
44
+ section "Container Escape"
45
+ chk "cdk" cdk
46
+ chk "deepce" deepce
47
+ chk "botb" botb
48
+ chk "trivy" trivy
49
+ chk "dive" dive
50
+
51
+ section "IaC Security"
52
+ chk "checkov" checkov
53
+ chk "syft" syft
54
+ chk "grype" grype
55
+ chk "dependency-check" dependency-check
56
+
57
+ section "Multi-Cloud"
58
+ chk_py "scoutsuite" ScoutSuite
59
+
60
+ phase_summary
@@ -0,0 +1,58 @@
1
+ #!/bin/bash
2
+ # Phase 5 — Mobile Testing
3
+ source "$(dirname "$0")/lib.sh"
4
+
5
+ phase_header "PHASE 5 — Mobile Testing (Android / iOS / BLE)"
6
+
7
+ section "Android Core"
8
+ chk "adb" adb
9
+ chk "apktool" apktool
10
+ chk "jadx" jadx
11
+ chk "dex2jar" d2j-dex2jar
12
+
13
+ section "Frida & Dynamic Analysis"
14
+ chk "frida" frida
15
+ chk "frida-ps" frida-ps
16
+ chk "frida-trace" frida-trace
17
+ chk "objection" objection
18
+ chk "setup-frida-server" setup-frida-server
19
+
20
+ section "SSL Pinning Bypass"
21
+ chk_py "reFlutter" reflutter
22
+ chk "apk-mitm" apk-mitm
23
+
24
+ section "APK Repackaging"
25
+ chk "uber-apk-signer" uber-apk-signer
26
+ chk_file "uber-apk-signer.jar" /opt/uber-apk-signer/uber-apk-signer.jar
27
+
28
+ section "Static Analysis"
29
+ chk "apkleaks" apkleaks
30
+ chk_py "androguard" androguard
31
+ chk_py "trufflehog3" trufflehog3
32
+
33
+ section "Component Exploitation"
34
+ chk_py "drozer" drozer
35
+ chk_file "drozer-agent.apk" /opt/drozer/drozer-agent.apk
36
+
37
+ section "Cross-Platform Apps"
38
+ chk_py "hermes-dec" hermes
39
+ chk_py "hbctool" hbctool
40
+ chk_py "doldrums" doldrums
41
+ chk_py "lz4" lz4
42
+ chk "monodis" monodis
43
+ chk "js-beautify" js-beautify
44
+
45
+ section "Malware & C2"
46
+ chk "qrcode" qrcode
47
+ chk_py "qrcode" qrcode
48
+ chk_dir "TheFatRat" /opt/TheFatRat
49
+ chk "msfvenom" msfvenom
50
+
51
+ section "iOS"
52
+ chk "ssh" ssh
53
+
54
+ section "BLE"
55
+ chk_py "bleak" bleak
56
+ chk_dir "crackle" /opt/crackle
57
+
58
+ phase_summary
@@ -0,0 +1,62 @@
1
+ #!/bin/bash
2
+ # Phase 6 — C2 & Post-Exploitation
3
+ source "$(dirname "$0")/lib.sh"
4
+
5
+ phase_header "PHASE 6 — C2 Frameworks & Post-Exploitation"
6
+
7
+ section "C2 Frameworks"
8
+ chk "msfconsole" msfconsole
9
+ chk "msfvenom" msfvenom
10
+ chk "sliver-client" sliver-client
11
+ chk_dir "Empire" /opt/Empire
12
+ chk_dir "Villain" /opt/Villain
13
+ chk_dir "PoshC2" /opt/PoshC2
14
+ chk_dir "Havoc" /opt/Havoc
15
+
16
+ section "Tunneling & Pivoting"
17
+ chk "chisel" chisel
18
+ chk "ligolo-proxy" ligolo-proxy
19
+ chk "ligolo-agent" ligolo-agent
20
+ chk "socat" socat
21
+ chk "proxychains4" proxychains4
22
+
23
+ section "DNS Tunneling"
24
+ chk "iodine" iodine
25
+ chk_dir "dnscat2" /opt/dnscat2
26
+
27
+ section "Payload Generation"
28
+ chk "msfvenom" msfvenom
29
+ chk_dir "ScareCrow" /opt/ScareCrow
30
+ chk_py "donut-shellcode" donut
31
+ chk_dir "Veil" /opt/Veil
32
+ chk_dir "macro_pack" /opt/macro_pack
33
+
34
+ section "Evasion"
35
+ chk_dir "SysWhispers3" /opt/SysWhispers3
36
+ chk_py "pypykatz" pypykatz
37
+
38
+ section "Persistence / AD"
39
+ chk_dir "DeathStar" /opt/DeathStar
40
+ chk_dir "DonPAPI" /opt/DonPAPI
41
+ chk_py "bloodyAD" bloodyAD
42
+
43
+ section "Lateral Movement"
44
+ chk "evil-winrm" evil-winrm
45
+ chk "netexec" netexec
46
+ chk "crackmapexec" crackmapexec
47
+ chk "impacket-wmiexec" impacket-wmiexec
48
+ chk "impacket-psexec" impacket-psexec
49
+ chk "impacket-smbexec" impacket-smbexec
50
+
51
+ section "Credential Extraction"
52
+ chk_py "pypykatz" pypykatz
53
+ chk_dir "DonPAPI" /opt/DonPAPI
54
+
55
+ section "RDP"
56
+ chk_py "pyrdp" pyrdp
57
+
58
+ section "Purple Team"
59
+ chk_dir "Atomic Red Team" /opt/atomic-red-team
60
+ chk_dir "Caldera" /opt/caldera
61
+
62
+ phase_summary
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+ # Phase 7 — OSINT & Recon
3
+ source "$(dirname "$0")/lib.sh"
4
+
5
+ phase_header "PHASE 7 — OSINT & Intelligence Gathering"
6
+
7
+ section "Email & People"
8
+ chk "theHarvester" theHarvester
9
+ chk_py "h8mail" h8mail
10
+ chk_py "holehe" holehe
11
+ chk_py "maigret" maigret
12
+ chk_py "socialscan" socialscan
13
+ chk_opt "GHunt" ghunt
14
+
15
+ section "Username / Social"
16
+ chk_dir "CrossLinked" /opt/CrossLinked
17
+ chk_py "sherlock" sherlock
18
+
19
+ section "Domain Intelligence"
20
+ chk "shodan" shodan
21
+ chk_py "censys" censys
22
+ chk_py "duckduckgo_search" duckduckgo_search
23
+ chk_py "ipinfo" ipinfo
24
+
25
+ section "GitHub / Code Recon"
26
+ chk "gitleaks" gitleaks
27
+ chk_py "trufflehog" trufflehog
28
+ chk "git-dumper" git-dumper
29
+ chk_py "PyGithub" github
30
+
31
+ section "Passive Recon"
32
+ chk "gau" gau
33
+ chk "waybackurls" waybackurls
34
+ chk_dir "recon-ng" /opt/recon-ng
35
+ chk_py "spiderfoot" sflib
36
+
37
+ section "OSINT Frameworks"
38
+ chk_dir "recon-ng" /opt/recon-ng
39
+ chk_py "spiderfoot" sflib
40
+
41
+ section "Network Intelligence"
42
+ chk "whois" whois
43
+ chk "dnsrecon" dnsrecon
44
+ chk "dnsenum" dnsenum
45
+ chk "fierce" fierce
46
+ chk "nbtscan" nbtscan
47
+
48
+ phase_summary
@@ -0,0 +1,53 @@
1
+ #!/bin/bash
2
+ # Phase 8 — Passwords & Credentials
3
+ source "$(dirname "$0")/lib.sh"
4
+
5
+ phase_header "PHASE 8 — Password Attacks & Credential Access"
6
+
7
+ section "Hash Cracking"
8
+ chk "hashcat" hashcat
9
+ chk "john" john
10
+ chk "ophcrack" ophcrack
11
+
12
+ section "Online Brute Force"
13
+ chk "hydra" hydra
14
+ chk "medusa" medusa
15
+ chk "ncrack" ncrack
16
+ chk_py "patator" patator
17
+
18
+ section "Spray"
19
+ chk "kerbrute" kerbrute
20
+ chk "netexec" netexec
21
+
22
+ section "Wordlist Generation"
23
+ chk "cewl" cewl
24
+ chk "crunch" crunch
25
+ chk "cupp" cupp
26
+ chk_opt "mentalist" mentalist
27
+
28
+ section "Kerberos"
29
+ chk "impacket-GetUserSPNs" impacket-GetUserSPNs
30
+ chk "impacket-GetNPUsers" impacket-GetNPUsers
31
+ chk "impacket-ticketer" impacket-ticketer
32
+ chk "impacket-getST" impacket-getST
33
+
34
+ section "LSASS / Memory"
35
+ chk_py "pypykatz" pypykatz
36
+ chk_dir "DonPAPI" /opt/DonPAPI
37
+
38
+ section "Windows Credential Stores"
39
+ chk "impacket-secretsdump" impacket-secretsdump
40
+ chk "impacket-samrdump" impacket-samrdump
41
+
42
+ section "Wordlists"
43
+ chk_dir "SecLists" /opt/SecLists
44
+ chk_file "rockyou.txt" /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt
45
+
46
+ section "Crypto / Hashing"
47
+ chk_py "pycryptodome" Crypto
48
+ chk_py "hashpumpy" hashpumpy
49
+ chk_py "sympy" sympy
50
+ chk_py "gmpy2" gmpy2
51
+ chk_py "ecdsa" ecdsa
52
+
53
+ phase_summary
@@ -0,0 +1,67 @@
1
+ #!/bin/bash
2
+ # Phase 9 — Binary Analysis & Reverse Engineering
3
+ source "$(dirname "$0")/lib.sh"
4
+
5
+ phase_header "PHASE 9 — Binary Analysis & Reverse Engineering"
6
+
7
+ section "Debuggers"
8
+ chk "gdb" gdb
9
+ chk_dir "pwndbg" /opt/pwndbg
10
+ chk_dir "GEF" /root/.gef
11
+
12
+ section "Disassemblers / Decompilers"
13
+ chk "radare2" radare2
14
+ chk "r2" r2
15
+ chk "ghidra" ghidra
16
+ chk "objdump" objdump
17
+ chk "jadx" jadx
18
+
19
+ section "Binary Analysis"
20
+ chk "binwalk" binwalk
21
+ chk "strings" strings
22
+ chk "file" file
23
+ chk "xxd" xxd
24
+ chk "hexedit" hexedit
25
+ chk "nm" nm
26
+ chk "readelf" readelf
27
+ chk "ltrace" ltrace
28
+ chk "strace" strace
29
+ chk "patchelf" patchelf
30
+
31
+ section "Exploit Development"
32
+ chk_py "pwntools" pwn
33
+ chk "ROPgadget" ROPgadget
34
+ chk_py "ropper" ropper
35
+ chk "nasm" nasm
36
+
37
+ section "Python Libraries"
38
+ chk_py "capstone" capstone
39
+ chk_py "keystone" keystone
40
+ chk_py "unicorn" unicorn
41
+ chk_py "angr" angr
42
+
43
+ section "Obfuscation / Strings"
44
+ chk_py "floss" floss
45
+
46
+ section "Fuzzing"
47
+ chk "afl-fuzz" afl-fuzz
48
+ chk "radamsa" radamsa
49
+ chk_py "boofuzz" boofuzz
50
+
51
+ section "YARA"
52
+ chk "yara" yara
53
+ chk_py "yara" yara
54
+ chk_dir "YARA-Rules" /opt/yara-rules
55
+
56
+ section "Malware Analysis"
57
+ chk_py "volatility3" volatility3
58
+ chk_dir "volatility3" /opt/volatility3
59
+ chk "foremost" foremost
60
+ chk "bulk_extractor" bulk_extractor
61
+
62
+ section "Forensics"
63
+ chk "exiftool" exiftool
64
+ chk "binwalk" binwalk
65
+ chk "sleuthkit" fls
66
+
67
+ phase_summary
@@ -0,0 +1,175 @@
1
+ #!/bin/bash
2
+ # RTExit — Master Tool Verification Script
3
+ # Usage:
4
+ # bash rt-verify-all.sh → full verbose report
5
+ # bash rt-verify-all.sh --quick → phase summary only
6
+ # bash rt-verify-all.sh --phase 3 → single phase
7
+
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+
10
+ RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
11
+ BLUE='\033[0;34m'; CYAN='\033[0;36m'; GRAY='\033[0;37m'
12
+ BOLD='\033[1m'; NC='\033[0m'
13
+
14
+ QUICK=0; SINGLE_PHASE=0
15
+
16
+ while [[ $# -gt 0 ]]; do
17
+ case $1 in
18
+ --quick) QUICK=1; shift ;;
19
+ --phase) SINGLE_PHASE=$2; shift 2 ;;
20
+ *) shift ;;
21
+ esac
22
+ done
23
+
24
+ # Strip ANSI codes helper
25
+ strip_ansi() { sed 's/\x1b\[[0-9;]*m//g; s/\x1b\[[0-9]*[A-Za-z]//g'; }
26
+
27
+ # Banner
28
+ clear
29
+ printf "${RED}"
30
+ cat << 'EOF'
31
+ ██████╗ ████████╗███████╗██╗ ██╗██╗████████╗
32
+ ██╔══██╗╚══██╔══╝██╔════╝╚██╗██╔╝██║╚══██╔══╝
33
+ ██████╔╝ ██║ █████╗ ╚███╔╝ ██║ ██║
34
+ ██╔══██╗ ██║ ██╔══╝ ██╔██╗ ██║ ██║
35
+ ██║ ██║ ██║ ███████╗██╔╝ ██╗██║ ██║
36
+ ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝
37
+ EOF
38
+ printf "${NC}"
39
+ printf "${BOLD} RTExit Full Tool Verification — 300+ Tools${NC}\n"
40
+ printf " $(date '+%Y-%m-%d %H:%M:%S')\n\n"
41
+
42
+ PHASES=(
43
+ "1:phase1-scanning.sh:Scanning & Recon"
44
+ "2:phase2-web.sh:Web Application Testing"
45
+ "3:phase3-ad.sh:Active Directory & Windows"
46
+ "4:phase4-cloud.sh:Cloud Platforms"
47
+ "5:phase5-mobile.sh:Mobile Testing"
48
+ "6:phase6-c2.sh:C2 & Post-Exploitation"
49
+ "7:phase7-osint.sh:OSINT & Intelligence"
50
+ "8:phase8-creds.sh:Passwords & Credentials"
51
+ "9:phase9-binary.sh:Binary Analysis & RE"
52
+ "10:phase10-network.sh:Network & WiFi"
53
+ "11:phase11-specialist.sh:Specialist"
54
+ )
55
+
56
+ GRAND_PASS=0; GRAND_FAIL=0; GRAND_WARN=0; GRAND_TOTAL=0
57
+ declare -a SUMMARY=()
58
+ declare -a ALL_MISSING=()
59
+
60
+ for entry in "${PHASES[@]}"; do
61
+ NUM=$(echo "$entry" | cut -d: -f1)
62
+ SCRIPT=$(echo "$entry" | cut -d: -f2)
63
+ NAME=$(echo "$entry" | cut -d: -f3)
64
+
65
+ [ "$SINGLE_PHASE" -ne 0 ] && [ "$NUM" -ne "$SINGLE_PHASE" ] && continue
66
+
67
+ SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT"
68
+ [ ! -f "$SCRIPT_PATH" ] && continue
69
+
70
+ # Run phase and capture output
71
+ OUTPUT=$(bash "$SCRIPT_PATH" 2>/dev/null)
72
+ CLEAN=$(echo "$OUTPUT" | strip_ansi)
73
+
74
+ # Count results
75
+ P=$(echo "$CLEAN" | grep -c '✅' 2>/dev/null || echo 0)
76
+ F=$(echo "$CLEAN" | grep -c '❌' 2>/dev/null || echo 0)
77
+ W=$(echo "$CLEAN" | grep -c '⚠️' 2>/dev/null || echo 0)
78
+ T=$((P + F))
79
+ PCT=0; [ "$T" -gt 0 ] && PCT=$((P * 100 / T))
80
+
81
+ # Collect missing tool names
82
+ while IFS= read -r line; do
83
+ TOOL=$(echo "$line" | grep '❌' | awk '{print $2}' | head -1)
84
+ [ -n "$TOOL" ] && ALL_MISSING+=("Phase${NUM}/${NAME}: ${TOOL}")
85
+ done <<< "$CLEAN"
86
+
87
+ GRAND_PASS=$((GRAND_PASS + P))
88
+ GRAND_FAIL=$((GRAND_FAIL + F))
89
+ GRAND_WARN=$((GRAND_WARN + W))
90
+ GRAND_TOTAL=$((GRAND_TOTAL + T))
91
+
92
+ # Store for summary
93
+ SUMMARY+=("$NUM:$NAME:$P:$F:$T:$PCT")
94
+
95
+ # Print full output if not quick
96
+ if [ "$QUICK" -eq 0 ]; then
97
+ echo "$OUTPUT"
98
+ echo ""
99
+ else
100
+ # Quick mode — one line per phase
101
+ if [ "$PCT" -ge 90 ]; then COLOR="${GREEN}"
102
+ elif [ "$PCT" -ge 70 ]; then COLOR="${YELLOW}"
103
+ else COLOR="${RED}"; fi
104
+
105
+ printf " Phase %2d │ %-32s │ ${GREEN}%3d✅${NC} ${RED}%3d❌${NC} │ %b%3d%%${NC}\n" \
106
+ "$NUM" "$NAME" "$P" "$F" "$COLOR" "$PCT"
107
+ fi
108
+ done
109
+
110
+ # ── Summary Table ─────────────────────────────────────────────────────────────
111
+ echo ""
112
+ printf "${CYAN}${BOLD}┌──────────────────────────────────────────────────────────────┐${NC}\n"
113
+ printf "${CYAN}${BOLD}│ VERIFICATION SUMMARY │${NC}\n"
114
+ printf "${CYAN}${BOLD}├────┬──────────────────────────────────┬──────┬──────┬───────┤${NC}\n"
115
+ printf "${CYAN}${BOLD}│ Ph │ Phase Name │ ✅ │ ❌ │ %% │${NC}\n"
116
+ printf "${CYAN}${BOLD}├────┼──────────────────────────────────┼──────┼──────┼───────┤${NC}\n"
117
+
118
+ for entry in "${SUMMARY[@]}"; do
119
+ NUM=$(echo "$entry" | cut -d: -f1)
120
+ NAME=$(echo "$entry" | cut -d: -f2)
121
+ P=$(echo "$entry" | cut -d: -f3)
122
+ F=$(echo "$entry" | cut -d: -f4)
123
+ T=$(echo "$entry" | cut -d: -f5)
124
+ PCT=$(echo "$entry" | cut -d: -f6)
125
+
126
+ if [ "$PCT" -ge 90 ]; then PCOL="${GREEN}"
127
+ elif [ "$PCT" -ge 70 ]; then PCOL="${YELLOW}"
128
+ else PCOL="${RED}"; fi
129
+
130
+ printf "│ ${BOLD}%2d${NC} │ %-32s │ ${GREEN}%4d${NC} │ ${RED}%4d${NC} │ %b%5d%%${NC} │\n" \
131
+ "$NUM" "$NAME" "$P" "$F" "$PCOL" "$PCT"
132
+ done
133
+
134
+ printf "${CYAN}${BOLD}├────┴──────────────────────────────────┴──────┴──────┴───────┤${NC}\n"
135
+
136
+ GRAND_PCT=0; [ "$GRAND_TOTAL" -gt 0 ] && GRAND_PCT=$((GRAND_PASS * 100 / GRAND_TOTAL))
137
+ if [ "$GRAND_PCT" -ge 90 ]; then GCOL="${GREEN}"
138
+ elif [ "$GRAND_PCT" -ge 70 ]; then GCOL="${YELLOW}"
139
+ else GCOL="${RED}"; fi
140
+
141
+ printf "${CYAN}${BOLD}│${NC} ${BOLD}TOTAL${NC} ${GREEN}${BOLD}%4d${NC} ${RED}${BOLD}%4d${NC} %b${BOLD}%4d%%${NC} ${CYAN}${BOLD}│${NC}\n" \
142
+ "$GRAND_PASS" "$GRAND_FAIL" "$GCOL" "$GRAND_PCT"
143
+ printf "${CYAN}${BOLD}└──────────────────────────────────────────────────────────────┘${NC}\n"
144
+
145
+ # ── Progress Bar ──────────────────────────────────────────────────────────────
146
+ echo ""
147
+ printf " "
148
+ BAR=50; FILLED=$((GRAND_PCT * BAR / 100))
149
+ printf "${BOLD}[${NC}"
150
+ for ((i=0; i<BAR; i++)); do
151
+ [ $i -lt $FILLED ] && printf "${GCOL}█${NC}" || printf "${GRAY}░${NC}"
152
+ done
153
+ printf "${BOLD}]${NC} %b${BOLD} %d%%${NC} (%d / %d tools)\n" "$GCOL" "$GRAND_PCT" "$GRAND_PASS" "$GRAND_TOTAL"
154
+
155
+ # ── Missing Tools ─────────────────────────────────────────────────────────────
156
+ if [ "${#ALL_MISSING[@]}" -gt 0 ]; then
157
+ echo ""
158
+ printf "${RED}${BOLD} ❌ Missing Tools:${NC}\n"
159
+ for m in "${ALL_MISSING[@]}"; do
160
+ printf " ${RED}•${NC} %s\n" "$m"
161
+ done
162
+ fi
163
+
164
+ # ── Verdict ───────────────────────────────────────────────────────────────────
165
+ echo ""
166
+ if [ "$GRAND_PCT" -ge 95 ]; then
167
+ printf " ${GREEN}${BOLD}🔥 ELITE — Full APT-level toolkit. Ready for any engagement.${NC}\n"
168
+ elif [ "$GRAND_PCT" -ge 85 ]; then
169
+ printf " ${GREEN}${BOLD}✅ PROFESSIONAL — Ready for most engagements.${NC}\n"
170
+ elif [ "$GRAND_PCT" -ge 70 ]; then
171
+ printf " ${YELLOW}${BOLD}⚠️ OPERATIONAL — Install missing tools before engagement.${NC}\n"
172
+ else
173
+ printf " ${RED}${BOLD}❌ INCOMPLETE — Run: bash /opt/rtexit/scripts/rt-native-install.sh${NC}\n"
174
+ fi
175
+ echo ""