|
Dll Injection[Наш 1ый инжектор] - Общение разработчиков - Программирование для Point Blank, общение и обсуждение разработок |
24.01.2013, 19:00
|
#1
|
|
|
|
Разведчик
|
Регистрация: 24.01.2013
Сообщений: 19
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 2 раз(а) в 2 сообщениях
|
Dll Injection[Наш 1ый инжектор]
Наш 1-ый инжектор.
Предположим что мы хотим добавить какую то новую возможность в клиент от какой либо онлайн игры(в нашем случае это Point Blank), но не можем поскольку у нас нету исходного кода, и мы слишком ленивые чтобы добавить её при помощи изменения уже готово исполняемого файла. И Кажется ,что - у нас нету никакой возможности этого сделать.
Порывшись в MSDN мы можем обнаружить что у нас есть возможность редактировать исполняемый файл прямо в памяти - используя WriteProcessMemory и ReadProcessMemory. Это уже хоть что-то, но это не очень удобно в случае если нам надо вставить туда достаточно большой кусок кода и причём желательно на Java.
К счастью программисты из MusDie всё уже придумали за нас - дали нам возможность создавать треды в удалённом процессе при помощи CreateRemoteThread, а также дав нам функцию LoadLibrary(и FreeLibrary), принимающую всего 1 параметр(ровно столько должна принимать функция треда).
Итак - наш план действий:
1.Открыть или создать нужный процесс.
2.Выделить в нём кусочек памяти который будет содержать имя нашей Dll. *
3.Записать в этот кусочек памяти имя.
4.Создать удалённый тред в процессе с точкой старта равной LoadLibrary, 5.и в качестве параметра передать ей аддресс имени нашей библиотеки.
6.Дождаться завершения нашего треда.
7.Создать удалённый тред в процессе с точкой старта равной FreeLibrary, и 8.в качестве параметра передать ей аддресс имени нашей библиотеки.
* - Мы не можем оставить его в своей памяти, поскольку тогда чужой процесс не сможет его прочитать.
Вот,что копировать
Код:
#include <winsock2.h>
#pragma comment ( lib , "kernel32.lib" )
#pragma comment ( lib , "user32.lib" )
#pragma comment ( lib , "advapi32.lib" )
#pragma comment ( lib , "ws2_32.lib" )
//стандартный заголовок
/*Функция создания процесса
* Cmd - строка содержащая название приложения которое надо запустить и параметры коммандной строки (Например: l2.exe -log)
* Suspended - Если тру, тред процесса будет при создании процесса остановлен.
* pi - Информация о процессе */
BOOL ProcessCreate(LPCSTR Cmd, BOOL Suspended, PROCESS_INFORMATION& pi)
{
STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
if(!CreateProcessA(NULL, (LPSTR)Cmd, NULL, NULL, FALSE, (Suspended)?CREATE_SUSPENDED:0, NULL, NULL, &si, &pi))return TRUE;
return TRUE;
}
/*Функция для выделения памяти в чужом процессе
* Process - хэндл процесса
* Size - сколько требуется выделить памяти */
LPVOID ProcessMemoryAlloc(HANDLE Process, UINT Size)
{
return VirtualAllocEx(Process,NULL,Size,MEM_COMMIT,PAGE_READWRITE);
}
/*Функция для освобождения памяти
* Process - хэндл процесса
* Addr - адресс */
VOID ProcessMemoryFree(HANDLE Process, LPVOID Addr)
{
VirtualFreeEx(Process, Addr, 0, MEM_DECOMMIT);
}
/*Функция для записи в память процесса
* Process - хэндл процесса
* Addr - адресс в памяте процесса
* Data - указатель на данные для записи
* Length - количество байт для записи */
BOOL ProcessWrite(HANDLE Process, LPVOID Addr, LPCVOID Data, UINT Length)
{
DWORD written;
if(!WriteProcessMemory(Process, Addr, Data, Length, &written))return FALSE;
return written == Length;
}
/*Функция создающая удалённый трэд (ака CreateRemoteThread)
* Process - хэндл процесса
* ThreadProc - адресс точки входа треда в памяти процесса
* Param - параметр который будет передан трэду
* Result - место куда будет помещён результат выполнения трэда */
BOOL ProcessExecute(HANDLE Process, LPTHREAD_START_ROUTINE ThreadProc, LPVOID Param, LPDWORD Result)
{
DWORD ThreadId;
HANDLE hThread = CreateRemoteThread(Process,NULL,0,ThreadProc, Param, 0, &ThreadId);
WaitForSingleObject(hThread, INFINITE);
GetExitCodeThread(hThread, Result);
return TRUE;
}
/* Удалённая загрузка длльки
* Process - хэндл процесса
* DllPath - путь до длл
* Length - длинна пути до длл, если равна 0 - функция сама воспользуется lstrlen и определит длинну */
HMODULE ProcessLoadLibrary(HANDLE Process,LPCSTR DllPath,UINT Length)
{
if(!Length)Length = lstrlen(DllPath) + 1;
LPTHREAD_START_ROUTINE LoadLibraryAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary("kernel32.dll"),"LoadLibraryA");
LPVOID MemAddr = ProcessMemoryAlloc(Process,Length);
if(!MemAddr)return NULL;
if(!ProcessWrite(Process, MemAddr, (LPCVOID)DllPath, Length))return NULL;
DWORD Result;
if(!ProcessExecute(Process, LoadLibraryAddr, MemAddr, &Result))return NULL;
ProcessMemoryFree(Process, MemAddr);
return (HMODULE)Result;
}
BOOL ProcessFreeLibrary(HANDLE Process,LPCSTR DllPath,UINT Length)
{
if(!Length)Length = lstrlen(DllPath) + 1;
LPTHREAD_START_ROUTINE FreeLibraryAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary("kernel32.dll"),"FreeLibraryA");
LPVOID MemAddr = ProcessMemoryAlloc(Process,Length);
if(!MemAddr)return NULL;
if(!ProcessWrite(Process, MemAddr, (LPCVOID)DllPath, Length))return FALSE;
DWORD Result;
if(!ProcessExecute(Process, FreeLibraryAddr, MemAddr, &Result))return FALSE;
ProcessMemoryFree(Process, MemAddr);
return TRUE;
}
char Program[] = "notepad.exe";
char Library[] = "D:\\fcc\\bin\\lib0.dll";
/*В данном случае приходится использовать абсолютный путь - поскольку notepad "не видит" lib.dll по относительному пути */
void Injector()
{
PROCESS_INFORMATION pi;
if(!ProcessCreate(Program, TRUE, pi))
{
MessageBox(0,"Cannot create process!","Error!",0);
return;
}
if(!ProcessLoadLibrary(pi.hProcess,Library,0))
{
MessageBox(0,"Cannot load library!","Error!",0);
return;
}
ProcessFreeLibrary(pi.hProcess,Library,0);
ResumeThread(pi.hThread);
}
And Library Code :
Код:
#include <winsock2.h>
#pragma comment ( lib , "kernel32.lib" )
#pragma comment ( lib , "user32.lib" )
#pragma comment ( lib , "advapi32.lib" )
#pragma comment ( lib , "ws2_32.lib" )
HANDLE hThread;
DWORD ThreadId;
DWORD WINAPI ThreadProc(LPVOID p)
{
MessageBox(0, "Injected =)", 0, 0);
return TRUE;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if(fdwReason == DLL_PROCESS_ATTACH)
{
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, &ThreadId);
DisableThreadLibraryCalls(hinstDLL);
}
return TRUE;
}
Зачем я создавал новый тред в dll ? - По не понятным мне причинам из созданного нами треда .dll нельзя использовать никакие функции user32.dll.
Предупреждаю.Инжектор рабочий ,но палится Frost'ом,для этого нам нужно хукать Frost(как я делаю),и делать скрытые внедерения.
Последний раз редактировалось FindYouBrain; 24.01.2013 в 19:06.
|
|
|
24.01.2013, 19:15
|
#2
|
|
|
|
Разведчик
|
Регистрация: 15.10.2010
Сообщений: 6
Популярность: -49
Сказал(а) спасибо: 0
Поблагодарили 8 раз(а) в 3 сообщениях
|
Re: Dll Injection[Наш 1ый инжектор]
1 UP)
Красава ща попытаюся сделать )
|
|
|
24.01.2013, 19:43
|
#3
|
|
|
|
Разведчик
|
Регистрация: 06.09.2012
Сообщений: 23
Популярность: 488
Сказал(а) спасибо: 10
Поблагодарили 11 раз(а) в 10 сообщениях
|
Re: Dll Injection[Наш 1ый инжектор]
Не понятно это что длл а какже тогда инжектить ??
|
|
|
24.01.2013, 19:44
|
#4
|
|
|
|
Разведчик
|
Регистрация: 24.01.2013
Сообщений: 19
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Dll Injection[Наш 1ый инжектор]
|
Цитата: |
|
|
|
|
|
|
|
|
|
Не понятно это что длл а какже тогда инжектить ??
|
|
|
|
|
|
ТЫ инжектишь эту dll,она выделяет кусок памяти для нашей dll,потом инжектишь свою dll.
Последний раз редактировалось FindYouBrain; 24.01.2013 в 19:49.
|
|
|
24.01.2013, 19:55
|
#5
|
|
|
|
Разведчик
|
Регистрация: 06.09.2012
Сообщений: 23
Популярность: 488
Сказал(а) спасибо: 10
Поблагодарили 11 раз(а) в 10 сообщениях
|
Re: Dll Injection[Наш 1ый инжектор]
|
|
|
24.01.2013, 19:57
|
#6
|
|
|
|
Разведчик
|
Регистрация: 24.01.2013
Сообщений: 19
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Dll Injection[Наш 1ый инжектор]
Я просто выложил код,для ознакомления.
|
|
|
26.01.2013, 01:43
|
#7
|
|
|
|
Пехотинец
|
Регистрация: 26.05.2010
Сообщений: 89
Популярность: 3087
Сказал(а) спасибо: 3
Поблагодарили 666 раз(а) в 268 сообщениях
|
Re: Dll Injection[Наш 1ый инжектор]
|
|
|
26.01.2013, 10:47
|
#9
|
|
|
|
Рыцарь-капитан
|
Регистрация: 29.01.2010
Сообщений: 547
Популярность: 41279
Сказал(а) спасибо: 692
Поблагодарили 2,270 раз(а) в 1,035 сообщениях
|
Re: Dll Injection[Наш 1ый инжектор]
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Помогите!] SQL Injection
|
iguano |
Вопросы, просьбы, обсуждение |
11 |
10.11.2012 15:50 |
[Помогите!] SQL injection
|
carl1993 |
Общение и обсуждение, архив Lineage 2 |
3 |
19.05.2012 12:59 |
SQL injection с ЛК
|
KillerTT |
Общение и обсуждение, архив Lineage 2 |
0 |
04.07.2011 00:32 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 16:54.
|
|