HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 09.05.2019, 01:27
CleanLegend
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами: 6908018

Репутация: 213
По умолчанию

Привет, сегодня напишем простой инжектор с выгрузкой, с использованием функций LoadLibraryA и FreeLibrary

Алгоритм инжекта:

- получаем хэндл процесса в который будем инжектить

- получаем путь до нашей dll

- выделяем память для нашего пути

- записываем его

- получаем адрес LoadLibraryA и вызываем его через CreateRemoteThread​
- ожидаем завершения выполнения DllMain DLL_PROCESS_ATTACH

получаем id процесса:

C++:





Код:
DWORD
GetProcId
(
const
char
*
procname
)
{
PROCESSENTRY32 pe
;
HANDLE hSnap
;
pe
.
dwSize
=
sizeof
(
PROCESSENTRY32
)
;
hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
NULL
)
;
if
(
Process32First
(
hSnap
,
&
pe
)
)
{
do
{
if
(
strcmp
(
pe
.
szExeFile
,
procname
)
==
0
)
break
;
}
while
(
Process32Next
(
hSnap
,
&
pe
)
)
;
}
return
pe
.
th32ProcessID
;
}


C++:





Код:
// получаем хэндл процесса
HANDLE hProcess
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
GetProcId
(
"gta_sa.exe"
)
)
;
// Указываем путь до нашей dll
const
char
*
DllPath
=
"C:\\test.dll"
;
// получаем размер строки нашего пути
size_t SizePatch
=
strlen
(
DllPath
)
+
1
;
// выделяем память в gta_sa с размером нашей строки
LPVOID pDllPath
=
VirtualAllocEx
(
hProcess
,
NULL
,
SizePatch
,
MEM_COMMIT
,
PAGE_READWRITE
)
;
// записываем наш путь в выделенную память
WriteProcessMemory
(
hProcess
,
pDllPath
,
(
LPVOID
)
DllPath
,
SizePatch
,
NULL
)
;
HMODULE kernel
=
GetModuleHandleA
(
"Kernel32.dll"
)
;
// Получаем адрес kernel32
DWORD Adr
=
(
DWORD
)
GetProcAddress
(
kernel
,
"LoadLibraryA"
)
;
// получаем адрес функции LoadLibraryA
// Вызываем LoadLibraryA в gta_sa.exe с аргументом "C:\\test.dll" и возвращаем адрес нашего потока
HANDLE hThread
=
CreateRemoteThread
(
hProcess
,
0
,
0
,
(
LPTHREAD_START_ROUTINE
)
Adr
,
pDllPath
,
0
,
0
)
;
// Ожидаем завершение нашего потока(ждем завершения DllMain с аргументом DLL_PROCESS_ATTACH)
WaitForSingleObject
(
hThread
,
INFINITE
)
;
// Закрываем дескриптор потока
CloseHandle
(
hThread
)
;
// Освобождаем выделенную память
VirtualFreeEx
(
hProcess
,
pDllPath
,
SizePatch
,
MEM_RELEASE
)
;
// Закрываем дескриптор процесса
CloseHandle
(
hProcess
)
;


Алгоритм выгрузки:

- получаем хэндл процесса в который будем инжектить

- получаем адрес нашей загруженной библиотеки

- получаем адрес FreeLibrary и вызываем его через CreateRemoteThread

- ожидаем завершения выполнения DllMain DLL_PROCESS_DETACH

функция для получения адреса dll в другом процессе:

C++:





Код:
HMODULE
GetModuleHandleExtern
(
const
char
*
szModuleName
,
DWORD dwProcessId
)
{
if
(
!
szModuleName
||
!
dwProcessId
)
{
return
NULL
;
}
HANDLE hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
,
dwProcessId
)
;
if
(
hSnap
==
INVALID_HANDLE_VALUE
)
{
return
NULL
;
}
MODULEENTRY32 me
;
me
.
dwSize
=
sizeof
(
MODULEENTRY32
)
;
if
(
Module32First
(
hSnap
,
&
me
)
)
{
while
(
Module32Next
(
hSnap
,
&
me
)
)
{
if
(
!
strcmp
(
me
.
szModule
,
szModuleName
)
)
{
CloseHandle
(
hSnap
)
;
return
me
.
hModule
;
}
}
}
CloseHandle
(
hSnap
)
;
return
NULL
;
}


C++:





Код:
// получаем хэндл процесса
HANDLE hProcess
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
GetProcId
(
"gta_sa.exe"
)
)
;
// получаем адрес нашей загруженной библиотеки
HMODULE module
=
GetModuleHandleExtern
(
"test.dll"
,
GetProcId
(
"gta_sa.exe"
)
)
;
HMODULE kernel
=
GetModuleHandleA
(
"Kernel32.dll"
)
;
// Получаем адрес kernel32
DWORD Adr
=
(
DWORD
)
GetProcAddress
(
kernel
,
"FreeLibrary"
)
;
// получаем адрес функции FreeLibrary
// Вызываем FreeLibrary в gta_sa.exe с адресом нашей библиотеки и возвращаем адрес нашего потока
HANDLE hThread
=
CreateRemoteThread
(
hProcess
,
0
,
0
,
(
LPTHREAD_START_ROUTINE
)
Adr
,
module
,
0
,
0
)
;
// Ожидаем завершение нашего потока(ждем завершения DllMain с аргументом DLL_PROCESS_DETACH)
WaitForSingleObject
(
hThread
,
INFINITE
)
;
// Закрываем дескриптор потока
CloseHandle
(
hThread
)
;
// Закрываем дескриптор процесса
CloseHandle
(
hProcess
)
;
 
Ответить с цитированием

  #2  
Старый 09.05.2019, 01:31
RIPJake
Новичок
Регистрация: 03.08.2018
Сообщений: 22
С нами: 4094319

Репутация: 3
По умолчанию

LLA метод хороший

Но почему то в нашем мире все используют MMAP
 
Ответить с цитированием

  #3  
Старый 09.05.2019, 02:11
Cake_
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами: 4793630

Репутация: 133
По умолчанию

сф прокатит?
 
Ответить с цитированием

  #4  
Старый 09.05.2019, 12:34
silence
Новичок
Регистрация: 24.10.2006
Сообщений: 18
С нами: 10288463

Репутация: 0
По умолчанию

Где ссылка на то что получилось?
 
Ответить с цитированием

  #5  
Старый 09.05.2019, 13:26
#Rin
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами: 5663255

Репутация: 183


По умолчанию

Цитата:
Сообщение от cakebou  

сф прокатит?
Да.
 
Ответить с цитированием

  #6  
Старый 09.05.2019, 13:28
Azller Lollison
Познавший АНТИЧАТ
Регистрация: 20.07.2017
Сообщений: 1,292
С нами: 4639746

Репутация: 183


По умолчанию

Цитата:
Сообщение от Silence  

Где ссылка на то что получилось?
Сам скомпиль
 
Ответить с цитированием

  #7  
Старый 09.05.2019, 14:45
SiTrak
Участник форума
Регистрация: 14.01.2018
Сообщений: 192
С нами: 4384333

Репутация: 113
По умолчанию

А хуки снимать надо же?
 
Ответить с цитированием

  #8  
Старый 09.05.2019, 15:52
DarkP1xel
Флудер
Регистрация: 17.06.2013
Сообщений: 3,635
С нами: 6791977

Репутация: 183


По умолчанию

Цитата:
Сообщение от SiTrak  

А хуки снимать надо же?
Где ты здесь хуки увидел?
 
Ответить с цитированием

  #9  
Старый 09.05.2019, 16:56
SiTrak
Участник форума
Регистрация: 14.01.2018
Сообщений: 192
С нами: 4384333

Репутация: 113
По умолчанию

Цитата:
Сообщение от DarkP1xel  

Где ты здесь хуки увидел?
Если я допустим хочу выгрузить свою dll мне надо снимать хуки при выгрузке ?
 
Ответить с цитированием

  #10  
Старый 09.05.2019, 20:40
#Rin
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами: 5663255

Репутация: 183


По умолчанию

Цитата:
Сообщение от SiTrak  

Если я допустим хочу выгрузить свою dll мне надо снимать хуки при выгрузке ?
Логично что да. Но все ли хуки ты сможешь снять?

Например хуки виртуальных таблиц DirectX/RakNet определенно у тебя будут конфликтовать.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...