Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 22.12.2011, 16:31   #1
 Пехотинец
Аватар для daff26
 
daff26 на правильном пути
Регистрация: 06.02.2011
Сообщений: 69
Популярность: 49
Сказал(а) спасибо: 102
Поблагодарили 54 раз(а) в 31 сообщениях
 
По умолчанию Исходник Инжекта

Может кому и пригодиться, этот исходник Injector/
с исходника можно переделать под себя Инжектор.
Я думаю пригодиться для развития самого себя и форума.
Код:
#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("Процесс не найден!"), _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, "Чтения памяти", 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;
}
помог отблагодари....
  Ответить с цитированием
Пользователь сказал cпасибо:
danchik58 (06.01.2012)
Старый 09.01.2012, 01:00   #2
 Пехотинец
Аватар для daff26
 
daff26 на правильном пути
Регистрация: 06.02.2011
Сообщений: 69
Популярность: 49
Сказал(а) спасибо: 102
Поблагодарили 54 раз(а) в 31 сообщениях
 
По умолчанию Re: Исходник Инжекта

Цитата:
Сообщение от ۩Papa_Roach۩Посмотреть сообщение
daff26, не понял смысла данного исходника,
если выкладывать,
то думаю стоит задуматься над оформлением темы,
да и о описании всех действий...

Ты конечно извени, но это не гайд по созданию. А код для тех кто понимает из исхода что куда всавляется, и какую для этого создавать форму.Ну если кто не понимает могу сделать гайт со скинами.

Добавлено через 8 минут
[Ссылки могут видеть только зарегистрированные пользователи. ] вот пример.
И потом этот код только основа.
Нужно еще прописывать функции которые на форме.

Последний раз редактировалось daff26; 09.01.2012 в 01:16. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 18.01.2012, 15:09   #3
 Разведчик
Аватар для Assassin pro1
 
Assassin pro1 никому не известный тип
Регистрация: 18.01.2012
Сообщений: 6
Популярность: 12
Сказал(а) спасибо: 30
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Исходник Инжекта

14 ошибок при компиляции
  Ответить с цитированием
Старый 14.03.2012, 23:39   #4
 Разведчик
Аватар для _ziza_
 
_ziza_ скоро будет известен_ziza_ скоро будет известен_ziza_ скоро будет известен
Регистрация: 16.09.2011
Сообщений: 25
Популярность: 260
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 4 сообщениях
 
По умолчанию Re: Исходник Инжекта

а есть версия с инжектом, но прога еще не стартанула чтобы.

Просто в уже запущенной, легко детектировать новую либу чисто сравнивая при старте и текущим списком dll/
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 06:52.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net