
07.07.2019, 07:49
|
|
Новичок
Регистрация: 22.06.2019
Сообщений: 13
С нами:
3629559
Репутация:
13
|
|
Позволяет сначала выгрузить свой модуль а затем и удалить не прибегая к подгрузке других плагинов.
C++:
Код:
PVOID strq
=
nullptr
;
HMODULE hMDL
=
nullptr
;
DWORD __stdcall
SafeUnload
(
)
{
__asm
{
pusha
pushad
pushfd
push hMDL
call FreeLibrary
lea eax
,
strq
push eax
call DeleteFileA
popfd
popad
popa
}
return
0
;
}
DWORD __stdcall
UnloadEnd
(
)
{
return
0
;
}
// WARNING: Эта функция должна находится строго под SafeUnload иначе вам не правильно определит размер кода.
void
__stdcall
UnloadMeAndDelete
(
)
{
DWORD unload_size
=
(
(
DWORD
)
UnloadEnd
-
(
DWORD
)
SafeUnload
)
;
PVOID unloader
=
VirtualAlloc
(
0
,
unload_size
,
MEM_COMMIT
|
MEM_RESERVE
,
PAGE_EXECUTE_READWRITE
)
;
memcpy
(
unloader
,
SafeUnload
,
unload_size
)
;
byte call
=
0xE8
;
memcpy
(
(
void
*
)
(
(
DWORD
)
unloader
+
29
)
,
&
call
,
1
)
;
auto
FindDelta
=
[
]
(
DWORD DestinyAddress
,
DWORD SourceAddress
,
size_t InstructionLength
)
->
unsigned
int
{
return
DestinyAddress
-
(
SourceAddress
+
InstructionLength
)
;
}
;
DWORD addr
=
FindDelta
(
(
DWORD
)
&
DeleteFileA
,
(
(
DWORD
)
unloader
+
29
)
,
5
)
;
memcpy
(
(
void
*
)
(
(
DWORD
)
unloader
+
30
)
,
&
addr
,
4
)
;
byte nop
=
0x90
;
memcpy
(
(
void
*
)
(
(
DWORD
)
unloader
+
34
)
,
&
nop
,
1
)
;
PVOID dllPath
=
VirtualAlloc
(
0
,
256
,
MEM_COMMIT
|
MEM_RESERVE
,
PAGE_EXECUTE_READWRITE
)
;
DWORD pathAddr
=
(
DWORD
)
dllPath
;
memcpy
(
(
void
*
)
(
(
DWORD
)
unloader
+
24
)
,
&
pathAddr
,
4
)
;
CHAR FileName
[
MAX_PATH
+
1
]
;
GetModuleFileNameA
(
hMDL
,
FileName
,
MAX_PATH
+
1
)
;
memcpy
(
dllPath
,
FileName
,
strlen
(
FileName
)
)
;
typedef
DWORD
(
__stdcall
*
UnloadMe
)
(
)
;
UnloadMe UnloadIt
=
(
UnloadMe
)
unloader
;
CreateThread
(
0
,
0
,
(
LPTHREAD_START_ROUTINE
)
UnloadIt
,
0
,
0
,
0
)
;
}
// В dllmain`e где у вас PROCESS_ATTACH вставляем
hMDL
=
hModule
;
// Пример использования
UnloadMeAndDelete
(
)
;
Автор: ntharbinger
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|