/
/
these functions are stub function, will be filled by python
unsigned char g_oepinit_code[]
=
{
0x90
};
unsigned char g_memreloc_code[]
=
{
0x90
};
unsigned char g_membindiat_code[]
=
{
0x90
};
unsigned char g_membindtls_code[]
=
{
0x90
};
unsigned char g_findloadlibrarya_code[]
=
{
0x90
};
unsigned char g_findgetprocaddress_code[]
=
{
0x90
};
void _makeoepcode(void
*
shellcode,
size_t shellcoderva, size_t dllrva,
DWORD orgexeoeprva, DWORD orgdlloeprva)
{
/
/
bind the pointer to
buffer
size_t oepinit_end
=
sizeof(g_oepinit_code);
size_t memreloc_start
=
FUNC_SIZE;
size_t membindiat_start
=
memreloc_start
+
FUNC_SIZE;
size_t membindtls_start
=
membindiat_start
+
FUNC_SIZE;
size_t findloadlibrarya_start
=
membindtls_start
+
FUNC_SIZE;
size_t findgetprocaddress_start
=
findloadlibrarya_start
+
FUNC_SIZE;
/
/
fill the address table
size_t
*
pexeoeprva
=
(size_t
*
)(g_oepinit_code
+
oepinit_end
-
8
*
sizeof(size_t));
size_t
*
pdllbrva
=
(size_t
*
)(g_oepinit_code
+
oepinit_end
-
7
*
sizeof(size_t));
size_t
*
pdlloeprva
=
(size_t
*
)(g_oepinit_code
+
oepinit_end
-
6
*
sizeof(size_t));
size_t
*
pmemrelocrva
=
(size_t
*
)(g_oepinit_code
+
oepinit_end
-
5
*
sizeof(size_t));
size_t
*
pmembindiatrva
=
(size_t
*
)(g_oepinit_code
+
oepinit_end
-
4
*
sizeof(size_t));
size_t
*
pmembindtlsrva
=
(size_t
*
)(g_oepinit_code
+
oepinit_end
-
3
*
sizeof(size_t));
size_t
*
pfindloadlibrarya
=
(size_t
*
)(g_oepinit_code
+
oepinit_end
-
2
*
sizeof(size_t));
size_t
*
pfindgetprocaddress
=
(size_t
*
)(g_oepinit_code
+
oepinit_end
-
1
*
sizeof(size_t));
*
pexeoeprva
=
orgexeoeprva;
*
pdllbrva
=
dllrva;
*
pdlloeprva
=
dllrva
+
orgdlloeprva;
*
pmemrelocrva
=
shellcoderva
+
memreloc_start;
*
pmembindiatrva
=
shellcoderva
+
membindiat_start;
*
pmembindtlsrva
=
shellcoderva
+
membindtls_start;
*
pfindloadlibrarya
=
shellcoderva
+
findloadlibrarya_start;
*
pfindgetprocaddress
=
shellcoderva
+
findgetprocaddress_start;
/
/
copy to the target
memcpy(shellcode ,
g_oepinit_code, sizeof(g_oepinit_code));
memcpy(shellcode
+
memreloc_start,
g_memreloc_code, sizeof(g_memreloc_code));
memcpy(shellcode
+
membindiat_start,
g_membindiat_code, sizeof(g_membindiat_code));
memcpy(shellcode
+
membindtls_start,
g_membindtls_code, sizeof(g_membindtls_code));
memcpy(shellcode
+
findloadlibrarya_start,
g_findloadlibrarya_code, sizeof(g_findloadlibrarya_code));
memcpy(shellcode
+
findgetprocaddress_start,
g_findgetprocaddress_code, sizeof(g_findgetprocaddress_code));
}