ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

>>>>РАБОЧИЙ<<<< исходник DLL инжектора на C++
  #1  
Старый 28.03.2010, 19:30
_==wolf==_
Участник форума
Регистрация: 29.05.2008
Сообщений: 181
Провел на форуме:
979048

Репутация: 101
Отправить сообщение для _==wolf==_ с помощью ICQ
Cool >>>>РАБОЧИЙ<<<< исходник DLL инжектора на C++

Думали он здесь? Ан нет. Сам бъюсь весь день. Никак не могу нормально заинжектить... Все вылетает *ехе* с пометкой *dll*.dll_unloaded.
Имеются: *exe*, *dll*, *injector_exe*.
Необходимо с помощью *injector_exe* запустить с параметрами командной строки процесс *exe*, и проинжектить в него *dll*. Исходник этого дела и нужен)
Заранее спасибо.
 
Ответить с цитированием

  #2  
Старый 28.03.2010, 19:52
_==wolf==_
Участник форума
Регистрация: 29.05.2008
Сообщений: 181
Провел на форуме:
979048

Репутация: 101
Отправить сообщение для _==wolf==_ с помощью ICQ
По умолчанию

попробовал решить проблему на шарпе, он как-то ближе мне:
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: gta_sa.exe
Версия приложения: 0.0.0.0
Отметка времени приложения: 4270f18a
Имя модуля с ошибкой: samp.dll_unloaded

то же самое((
 
Ответить с цитированием

  #3  
Старый 28.03.2010, 20:00
BastardFromHell
Познающий
Регистрация: 05.02.2010
Сообщений: 59
Провел на форуме:
360122

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

Код:
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>

#define LOGFILE "C:\\injection.log"
#define PROCESSNAME L"explorer.exe"

DWORD getProcessID();
int addLogMessage(char* str, int code);
BOOL setPrivilege(HANDLE hToken, LPCTSTR szPrivName, BOOL fEnable);

typedef FARPROC (WINAPI *LPMessageBox)(HWND, LPCWSTR, LPCWSTR, UINT);

typedef struct _InjectData {
	char				title[50];
	char				msg[50];	
	LPMessageBox		MessageB;
} InjectData, *PInjectData;

InjectData injectData = { 
	"Test",
	"Привет",
	NULL
};

static DWORD WINAPI InjectionMain(LPVOID lpParams) {
	
	PInjectData info = (PInjectData)lpParams;
	
	info->MessageB(NULL, (LPCWSTR)info->msg, (LPCWSTR)info->title, MB_OK);
	return 0;
}

static void __declspec( naked ) end_proc() {
}


int _tmain(int argc, _TCHAR* argv[]) {

	char		buffer [50];
	HANDLE		hToken;
	HANDLE		processHandel;
	HINSTANCE	userHinstance;
	
	DWORD processID = getProcessID();
	
	HANDLE hCurrentProc = GetCurrentProcess();

	if(!OpenProcessToken(hCurrentProc, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) { 
        addLogMessage("OpenProcessToken Error", GetLastError());
		return 0;
	} else { 
		if (!setPrivilege(hToken, SE_DEBUG_NAME, TRUE)) {
			addLogMessage("SetPrivlegesSE_DEBUG_NAME Error", GetLastError());
			return 0;
		} 
	} 

	if(processID == 0) {
		MessageBox(NULL, _T("Process not found!"), _T("Error"), MB_OK | MB_ICONERROR);
		return 0;
	}

	processHandel = OpenProcess(PROCESS_ALL_ACCESS, false, processID);
	if(processHandel == NULL) {
		addLogMessage("Open process error", GetLastError());
		return 0;
	}
	
	userHinstance = LoadLibrary(_T("user32.dll"));
	injectData.MessageB = (LPMessageBox) GetProcAddress(userHinstance, "MessageBoxA");

	DWORD ProcSize = (DWORD)end_proc - (DWORD)InjectionMain;
	sprintf_s(buffer, "Process size: %u", ProcSize);
	addLogMessage(buffer, 0);
	
	LPVOID lpProc	= VirtualAllocEx(processHandel, NULL, ProcSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
	LPVOID lpParams = VirtualAllocEx(processHandel, NULL, 1024, MEM_COMMIT, PAGE_READWRITE );
	
	if (!lpProc || !lpParams) {
		addLogMessage("Error allocating memory ", 1000);
		return 0;
	}

	sprintf_s(buffer, "Memory allocated at 0x%X and 0x%X", lpProc, lpParams );
	addLogMessage(buffer, 0);

	DWORD dwWritten;
	if(WriteProcessMemory(processHandel, lpProc, InjectionMain, ProcSize, &dwWritten ) == 0) {
		addLogMessage("WriteProcessMemory error", GetLastError());
		return 0;
	}

	if(WriteProcessMemory( processHandel, lpParams, &injectData, sizeof(injectData), &dwWritten ) == 0) {
		addLogMessage("WriteProcessMemory error", GetLastError());
		return 0;
	}

	sprintf_s(buffer, "Memory written", lpProc, lpParams );
	addLogMessage(buffer, 0);
	
	DWORD ThreadID;
	HANDLE hThread = CreateRemoteThread(processHandel, NULL, 0, (LPTHREAD_START_ROUTINE)lpProc, lpParams, 0, &ThreadID);

	if (hThread == NULL) {
		sprintf_s(buffer, "Error creating thread");
		addLogMessage(buffer, GetLastError());
		return 0;
	} else {
		WaitForSingleObject( hThread, INFINITE );
	}

    FreeLibrary(userHinstance);
	
	VirtualFreeEx(processHandel, lpProc, ProcSize, MEM_DECOMMIT );
	VirtualFreeEx(processHandel, lpParams, 1024, MEM_DECOMMIT );
    CloseHandle(processHandel);
	
	addLogMessage("Success injecting!", 0);

	return 0;
}

DWORD getProcessID() {
	DWORD processID = 0;
	HANDLE snapHandle;
	PROCESSENTRY32 processEntry = {0};

	if( (snapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)) == INVALID_HANDLE_VALUE ) {
        return 0;
	}

	processEntry.dwSize = sizeof(PROCESSENTRY32);
    Process32First(snapHandle, &processEntry);
	do {
		if ( wcscmp(processEntry.szExeFile, PROCESSNAME) == 0 ) {
			return processEntry.th32ProcessID;
		}
	} while (Process32Next(snapHandle,&processEntry));

	if ( snapHandle != INVALID_HANDLE_VALUE ) {
		CloseHandle(snapHandle);
	}

	return 0;
}

BOOL setPrivilege(HANDLE hToken, LPCTSTR szPrivName, BOOL fEnable) {
    TOKEN_PRIVILEGES tp;
    tp.PrivilegeCount = 1;
    LookupPrivilegeValue(NULL, szPrivName, &tp.Privileges[0].Luid);
    tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
    AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
    return((GetLastError() == ERROR_SUCCESS));
}

int addLogMessage(char* str, int code) {
	errno_t err;
	FILE* log;

	if((err = fopen_s(&log, LOGFILE, "a+")) != 0) {
		return -1;
	}
		
	fprintf(log, "[code: %u] %s\n", code, str);
	fclose(log);
	return 0;
}
пиу
 
Ответить с цитированием

  #4  
Старый 28.03.2010, 20:55
_==wolf==_
Участник форума
Регистрация: 29.05.2008
Сообщений: 181
Провел на форуме:
979048

Репутация: 101
Отправить сообщение для _==wolf==_ с помощью ICQ
По умолчанию

пиу не удался. мне надо длл заинъектит, где там длл? и нужно запустить процесс, а не в уже запущенный
 
Ответить с цитированием

  #5  
Старый 07.04.2010, 16:55
Interceptor
Новичок
Регистрация: 06.04.2010
Сообщений: 7
Провел на форуме:
34985

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

Хм, а что мешает переписать код и запустить процесс самому через CreateProcess(), потом сделать инъекцию, а в коде InjectionMain вместо MessageBox() вызвать LoadLibrary() и подгрузить свою длл?

Можно сделать сразу CreateRemoteThread() с адресом метода LoadLibrary() в целевом процессе.

Можно временно пропатчить IAT целевого процесса с заменой адреса какой-либо часто вызываемой системной функции на входную точку инъецированного кода, а потом пропатчить обратно.

Наиболее простой метод инъекции длл в процессы это использовать SetWindowsHookEx() - http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx
 
Ответить с цитированием

  #6  
Старый 07.04.2010, 17:04
noxjoker
Познающий
Регистрация: 07.08.2009
Сообщений: 85
Провел на форуме:
705829

Репутация: 53
Отправить сообщение для noxjoker с помощью ICQ
По умолчанию

На C# есть сорс (только рабочий)?
 
Ответить с цитированием

  #7  
Старый 07.04.2010, 17:47
Interceptor
Новичок
Регистрация: 06.04.2010
Сообщений: 7
Провел на форуме:
34985

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

На C# исходника нет, и не думаю что такое можно реализовать на C# так как все предполагает вызов WinAPI напрямую. Кроме того, в предложенном BastardFromHell коде вычисляется размер реального объектного кода который потом и копируется в память целевого процесса:
DWORD ProcSize = (DWORD)end_proc - (DWORD)InjectionMain;...
Ну и конечно же код метода InjectionMain() должен быть базонезависимым.
Если все это укладывается в концепцию C# то перевести предложенный исходник на C# не составит труда.
 
Ответить с цитированием

  #8  
Старый 07.04.2010, 18:31
Interceptor
Новичок
Регистрация: 06.04.2010
Сообщений: 7
Провел на форуме:
34985

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

Вот в той теме инъекцию на С# пишут:
http://forum.antichat.ru/thread190607.html
Там и код есть, может поможет.
 
Ответить с цитированием

  #9  
Старый 07.04.2010, 18:37
noxjoker
Познающий
Регистрация: 07.08.2009
Сообщений: 85
Провел на форуме:
705829

Репутация: 53
Отправить сообщение для noxjoker с помощью ICQ
По умолчанию

Я уже много раз пробовал и тому типу писал он тоже не знает.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[релиз] IcqMod DLL slesh С/С++, C#, Delphi, .NET, Asm 25 17.06.2010 17:40
Сырая загрузка DLL(скрытая) slesh Авторские статьи 16 17.03.2010 16:34
[релиз] Micro Web Server DLL slesh С/С++, C#, Delphi, .NET, Asm 10 28.11.2009 01:50
Inject DLL в процесс из kernel-mode slesh Авторские статьи 4 12.05.2009 02:05



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


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




ANTICHAT.XYZ