1use process_ghosting::{
5 init, GhostingBuilder, Architecture,
6 exe_to_hex_string, exe_to_hex_array, print_exe_hex,
7 parse_hex_string, bytes_to_hex_string, read_exe_bytes,
8 ghost_payload, ghost_payload_file, ghost_payload_hex,
9};
10use std::env;
11
12fn main() {
13 init();
17
18 println!("╔════════════════════════════════════════════╗");
19 println!("║ ProcessGhosting Full Demo ║");
20 println!("║ By BlackTechX ║");
21 println!("╚════════════════════════════════════════════╝\n");
22
23 let args: Vec<String> = env::args().collect();
24 let test_file = if args.len() > 1 { &args[1] } else { "C:\\Windows\\System32\\notepad.exe" };
25
26 println!("┌────────────────────────────────────────────┐");
30 println!("│ Section 1: Hex Utilities │");
31 println!("└────────────────────────────────────────────┘\n");
32
33 println!("[1.1] Parsing different hex formats:\n");
35
36 let formats = [
37 "4D5A9000",
38 "4D 5A 90 00",
39 "0x4D, 0x5A, 0x90, 0x00",
40 "\\x4D\\x5A\\x90\\x00",
41 ];
42
43 for fmt in &formats {
44 match parse_hex_string(fmt) {
45 Ok(bytes) => println!(" '{}' -> {:02X?}", fmt, bytes),
46 Err(e) => println!(" '{}' -> Error: {}", fmt, e),
47 }
48 }
49 println!();
50
51 println!("[1.2] Converting bytes to hex string:");
53 let sample_bytes = vec![0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00];
54 let hex_string = bytes_to_hex_string(&sample_bytes);
55 println!(" {:?} -> {}\n", sample_bytes, hex_string);
56
57 println!("[1.3] Reading file header as hex:");
59 match read_exe_bytes(test_file) {
60 Ok(bytes) => {
61 let preview: Vec<u8> = bytes.iter().take(32).cloned().collect();
62 println!(" File: {}", test_file);
63 println!(" Size: {} bytes", bytes.len());
64 println!(" First 32 bytes: {}", bytes_to_hex_string(&preview));
65 }
66 Err(e) => println!(" Error: {}", e),
67 }
68 println!();
69
70 println!("┌────────────────────────────────────────────┐");
74 println!("│ Section 2: Builder Patterns │");
75 println!("└────────────────────────────────────────────┘\n");
76
77 println!("[2.1] Builder from raw bytes:");
79 let sample = vec![0x4D, 0x5A];
80 let config = GhostingBuilder::new(&sample)
81 .x64()
82 .with_logging()
83 .build();
84 println!(" Payload size: {} bytes", config.payload.len());
85 println!(" Architecture: {}", config.architecture);
86 println!(" Verbose: {}\n", config.verbose);
87
88 println!("[2.2] Builder from file:");
90 match GhostingBuilder::from_file(test_file) {
91 Ok(builder) => {
92 let config = builder.x64().build();
93 println!(" Loaded: {} bytes\n", config.payload.len());
94 }
95 Err(e) => println!(" Error: {}\n", e),
96 }
97
98 println!("[2.3] Builder from hex string:");
100 match GhostingBuilder::from_hex_string("0x4D, 0x5A, 0x90, 0x00") {
101 Ok(builder) => {
102 let config = builder.build();
103 println!(" Parsed: {} bytes\n", config.payload.len());
104 }
105 Err(e) => println!(" Error: {}\n", e),
106 }
107
108 println!("[2.4] Architecture selection:");
110
111 let x64_config = GhostingBuilder::new(&[0x4D, 0x5A])
112 .x64()
113 .build();
114 println!(" .x64() -> {}", x64_config.architecture);
115
116 let x86_config = GhostingBuilder::new(&[0x4D, 0x5A])
117 .x86()
118 .build();
119 println!(" .x86() -> {}", x86_config.architecture);
120
121 let arch_config = GhostingBuilder::new(&[0x4D, 0x5A])
122 .architecture(Architecture::X64)
123 .build();
124 println!(" .architecture(X64) -> {}\n", arch_config.architecture);
125
126 println!("[2.5] Verbose control:");
128
129 let verbose = GhostingBuilder::new(&[0x4D, 0x5A])
130 .with_logging()
131 .build();
132 println!(" .with_logging() -> verbose: {}", verbose.verbose);
133
134 let silent = GhostingBuilder::new(&[0x4D, 0x5A])
135 .silent()
136 .build();
137 println!(" .silent() -> verbose: {}\n", silent.verbose);
138
139 println!("┌────────────────────────────────────────────┐");
143 println!("│ Section 3: Quick Functions │");
144 println!("└────────────────────────────────────────────┘\n");
145
146 println!("[3.1] Available quick functions:");
147 println!(" ghost_payload(&bytes) - Execute from bytes");
148 println!(" ghost_payload_file(path) - Execute from file");
149 println!(" ghost_payload_hex(hex_str) - Execute from hex string\n");
150
151 println!("┌────────────────────────────────────────────┐");
155 println!("│ Section 4: Execution Demo │");
156 println!("└────────────────────────────────────────────┘\n");
157
158 println!("[4.1] To execute process ghosting:");
159 println!();
160 println!(" // Method 1: Builder pattern");
161 println!(" GhostingBuilder::from_file(\"payload.exe\")?");
162 println!(" .x64()");
163 println!(" .with_logging()");
164 println!(" .execute()?;");
165 println!();
166 println!(" // Method 2: Quick function");
167 println!(" ghost_payload_file(\"payload.exe\")?;");
168 println!();
169 println!(" // Method 3: From embedded bytes");
170 println!(" const PAYLOAD: &[u8] = include_bytes!(\"payload.exe\");");
171 println!(" ghost_payload(PAYLOAD)?;");
172 println!();
173
174 println!("┌────────────────────────────────────────────┐");
190 println!("│ Demo Complete │");
191 println!("└────────────────────────────────────────────┘\n");
192}