11"""
22this file is for automaticly generate some shellcodes stub informations
3- v0.3.2 , developed by devseed
3+ v0.3.3 , developed by devseed
44"""
55import re
66import sys
@@ -11,51 +11,85 @@ def gen_oepinit_code32():
1111 ks = Ks (KS_ARCH_X86 , KS_MODE_32 )
1212 code_str = f"""
1313 // for relative address, get the base of addr
14- call geteip ;
14+ call getip ;
1515 lea ebx, [eax-5];
1616
17+ // get the imagebase
18+ mov eax, 0x30; // to avoid relative addressing
19+ mov edi, dword ptr fs:[eax]; //peb
20+ mov edi, [edi + 0ch]; //ldr
21+ mov edi, [edi + 14h]; //InMemoryOrderLoadList, this
22+ mov edi, [edi -8h + 18h]; //this.DllBase
23+
1724 // get loadlibrarya, getprocaddress
18- call [ebx + findloadlibrarya];
25+ mov eax, [ebx + findloadlibrarya];
26+ add eax, edi;
27+ call eax;
1928 mov [ebx + findloadlibrarya], eax;
20- call [ebx + findgetprocaddress];
29+ mov eax, [ebx + findgetprocaddress];
30+ add eax, edi;
31+ call eax;
2132 mov [ebx + findgetprocaddress], eax;
2233
34+ // reloc
35+ mov eax, [ebx + dllrva];
36+ add eax, edi;
37+ push eax;
38+ push eax;
39+ mov eax, [ebx + memrelocrva];
40+ add eax, edi;
41+ call eax;
42+
2343 // bind iat
24- push [ebx + findgetprocaddress]; // arg3, getprocaddress
25- push [ebx + findloadlibrarya]; // arg2, loadlibraryas
26- push [ebx + dllbase]; // arg1, dllbase value
27- call [ebx + membindiat];
28- add esp, 0xc;
44+ mov eax, [ebx + findgetprocaddress];
45+ push eax; // arg3, getprocaddress
46+ mov eax, [ebx + findloadlibrarya];
47+ push eax; // arg2, loadlibraryas
48+ mov eax, [ebx + dllrva];
49+ add eax, edi;
50+ push eax; // arg1, dllbase value
51+ mov eax, [ebx + membindiatrva];
52+ add eax, edi
53+ call eax;
2954
3055 // bind tls
31- xor edx, edx;
32- inc edx; // arg2, reason for tls
33- push edx;
34- push [ebx + dllbase] // arg1, dllbase
35- call [ebx + membindtls]
36- add esp, 0x8;
37-
56+ xor eax, eax;
57+ inc eax;
58+ push eax; // arg2, reason for tls
59+ mov eax, [ebx + dllrva]
60+ add eax, edi;
61+ push eax; // arg1, dllbase
62+ mov eax, [ebx + membindtlsrva];
63+ add eax, edi;
64+ call eax;
65+
3866 // call dll oep, for dll entry
3967 xor eax, eax;
4068 push eax; // lpvReserved
41- inc eax;
69+ inc eax;
4270 push eax; // fdwReason, DLL_PROCESS_ATTACH
43- push [ebx + dllbase]; // hinstDLL
44- call [ebx+dlloepva];
71+ mov eax, [ebx + dllrva];
72+ add eax, edi;
73+ push eax; // hinstDLL
74+ mov eax, [ebx + dlloeprva];
75+ add eax, edi;
76+ call eax;
4577
4678 // jmp to origin oep
47- jmp [ebx+exeoepva];
79+ mov eax, [ebx+exeoeprva];
80+ add eax, edi;
81+ jmp eax;
4882
49- geteip :
83+ getip :
5084 mov eax, [esp]
5185 ret
5286
53- exeoepva : nop;nop;nop;nop;
54- dllbase : nop;nop;nop;nop;
55- dlloepva : nop;nop;nop;nop;
56- memreloc : nop;nop;nop;nop;
57- membindiat : nop;nop;nop;nop;
58- membindtls : nop;nop;nop;nop;
87+ exeoeprva : nop;nop;nop;nop;
88+ dllrva : nop;nop;nop;nop;
89+ dlloeprva : nop;nop;nop;nop;
90+ memrelocrva : nop;nop;nop;nop;
91+ membindiatrva : nop;nop;nop;nop;
92+ membindtlsrva : nop;nop;nop;nop;
5993 findloadlibrarya: nop;nop;nop;nop;
6094 findgetprocaddress: nop;nop;nop;nop;
6195 """
@@ -68,57 +102,87 @@ def gen_oepinit_code64():
68102 ks = Ks (KS_ARCH_X86 , KS_MODE_64 )
69103 code_str = f"""
70104 // for relative address, get the base of addr
71- call geteip ;
105+ call getip ;
72106 lea rbx, [rax-5];
73107 push rcx;
74108 push rdx;
75109 push r8;
76110 push r9;
77111 sub rsp, 0x28; // this is for memory 0x10 align
78112
113+ // get the imagebase
114+ mov rax, 0x60; // to avoid relative addressing
115+ mov rdi, qword ptr gs:[rax]; //peb
116+ mov rdi, [rdi + 18h]; //ldr
117+ mov rdi, [rdi + 20h]; //InMemoryOrderLoadList, this
118+ mov rdi, [rdi -10h + 30h]; //this.DllBase
119+
79120 // get loadlibrarya, getprocaddress
80- call [rbx + findloadlibrarya];
121+ mov rax, [rbx + findloadlibrarya];
122+ add rax, rdi;
123+ call rax;
81124 mov [rbx + findloadlibrarya], rax;
82- call [rbx + findgetprocaddress];
125+ mov rax, [rbx + findgetprocaddress];
126+ add rax, rdi;
127+ call rax;
83128 mov [rbx + findgetprocaddress], rax;
84129
130+ // reloc
131+ mov rcx, [rbx + dllrva];
132+ add rcx, rdi;
133+ mov rdx, rcx;
134+ mov rax, [rbx + memrelocrva];
135+ add rax, rdi;
136+ call rax;
137+
85138 // bind iat
86139 mov r8, [rbx + findgetprocaddress]; // arg3, getprocaddress
87140 mov rdx, [rbx + findloadlibrarya]; // arg2, loadlibraryas
88- mov rcx, [rbx + dllbase]; // arg1, dllbase value
89- call [rbx + membindiat];
141+ mov rcx, [rbx + dllrva];
142+ add rcx, rdi; // arg1, dllbase value
143+ mov rax, [rbx + membindiatrva];
144+ add rax, rdi
145+ call rax;
90146
91147 // bind tls
92148 xor rdx, rdx;
93149 inc rdx; // argc, reason for tls
94- mov rcx, [rbx + dllbase] // arg1, dllbase
95- call [rbx + membindtls]
150+ mov rcx, [rbx + dllrva]
151+ add rcx, rdi; // arg1, dllbase
152+ mov rax, [rbx + membindtlsrva];
153+ add rax, rdi;
154+ call rax;
96155
97156 // call dll oep, for dll entry
98157 xor r8, r8; // lpvReserved
99158 xor rdx, rdx;
100159 inc rdx; // fdwReason, DLL_PROCESS_ATTACH
101- mov rcx, [rbx + dllbase]; // hinstDLL
102- call [rbx+dlloepva];
160+ mov rcx, [rbx + dllrva];
161+ add rcx, rdi; // hinstDLL
162+ mov rax, [rbx + dlloeprva];
163+ add rax, rdi;
164+ call rax;
103165
104166 // jmp to origin oep
105167 add rsp, 0x28;
106168 pop r9;
107169 pop r8;
108170 pop rdx;
109171 pop rcx;
110- jmp [rbx+exeoepva];
172+ mov rax, [rbx+exeoeprva];
173+ add rax, rdi;
174+ jmp rax;
111175
112- geteip :
176+ getip :
113177 mov rax, [rsp]
114178 ret
115179
116- exeoepva : nop;nop;nop;nop;nop;nop;nop;nop;
117- dllbase : nop;nop;nop;nop;nop;nop;nop;nop;
118- dlloepva : nop;nop;nop;nop;nop;nop;nop;nop;
119- memreloc : nop;nop;nop;nop;nop;nop;nop;nop;
120- membindiat : nop;nop;nop;nop;nop;nop;nop;nop;
121- membindtls : nop;nop;nop;nop;nop;nop;nop;nop;
180+ exeoeprva : nop;nop;nop;nop;nop;nop;nop;nop;
181+ dllrva : nop;nop;nop;nop;nop;nop;nop;nop;
182+ dlloeprva : nop;nop;nop;nop;nop;nop;nop;nop;
183+ memrelocrva : nop;nop;nop;nop;nop;nop;nop;nop;
184+ membindiatrva : nop;nop;nop;nop;nop;nop;nop;nop;
185+ membindtlsrva : nop;nop;nop;nop;nop;nop;nop;nop;
122186 findloadlibrarya: nop;nop;nop;nop;nop;nop;nop;nop;
123187 findgetprocaddress: nop;nop;nop;nop;nop;nop;nop;nop;
124188 """
@@ -194,4 +258,5 @@ def main():
194258v0.3, x86 and x64 no need to use exe's LoadLibraryA
195259v0.3.1, fix x64 attach dll crash by align stack with 0x10
196260v0.3.2, add support for ordinal iat and tls
261+ v0.3.3, add support for aslr
197262"""
0 commit comments