Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация

очередная неудачная DLL инжекция

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 25.06.2018, 23:52   #1
 Разведчик
Аватар для shaurmidze
 
shaurmidze никому не известный тип
Регистрация: 07.04.2017
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию очередная неудачная DLL инжекция

Добрый день!

Покопался на форуме, попробовал осуществить инжект, но безуспешно.

Сам инжектор:

Код:
#include "stdafx.h"
#include <Windows.h>
#include <TlHelp32.h>
#include <conio.h>

DWORD GetProcessID(char*);
wchar_t *convertCharArrayToLPCWSTR(const char*);
int main()
{
	printf("started\n");
	char libName[] = "D:\Projects\C++\PW\InjectDLL\Debug\InjectDLL.dll";
	int libSize = strlen(libName);
	char *name = _strdup("elementclient.exe");
	DWORD pID = GetProcessID(name);
	printf("pID = %d\n", pID);
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pID);
	if (hProcess == NULL)
	{
		int err = GetLastError();
		printf("Process didn't open by current PID, error: %d\n", err);
		_getch();
		return 0;
	}
	printf("Process opened\n");

	//PSTR remLibName = (PSTR)VirtualAllocEx(hProcess, 0, libSize, MEM_COMMIT, PAGE_READWRITE);
	LPVOID remLibName = VirtualAllocEx(hProcess, 0, libSize, MEM_COMMIT, PAGE_READWRITE);

	if (remLibName == NULL)
	{
		printf("VirtualAlloxEx failed\n");
		_getch();
		return 0;
	}

	printf("memory allocated\n");

	WriteProcessMemory(hProcess, remLibName, libName, libSize, 0);

	printf("memory writed\n");

	LPTHREAD_START_ROUTINE lprFunc = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(convertCharArrayToLPCWSTR("kernel32.dll")), "LoadLibraryA");//Получаем адрес процедуры и преобразовываем в тип адреса на функцию. 
	HANDLE hThread = CreateRemoteThread(hProcess, 0, 0, lprFunc, remLibName, 0, 0);//Создаем наш Тред и благополучно возвращаем 0 - удачное завершение.
	if ((hThread == NULL) || hThread == (INVALID_HANDLE_VALUE))
	{
		printf("error thread\n");
		_getch();
	}
	return 0;
}
//--------------------ПОИСК ИД ПО ИМЕНИ ПРОЦЕССА____--------------------
DWORD GetProcessID(char* lpNameProcess)
{
	printf("starting search PID\n");
	HANDLE snap;
	LPCWSTR nameProc = convertCharArrayToLPCWSTR(lpNameProcess);

	PROCESSENTRY32 pentry32;
	snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (snap == INVALID_HANDLE_VALUE) return 0;
	pentry32.dwSize = sizeof(PROCESSENTRY32);
	if (!Process32First(snap, &pentry32)) { CloseHandle(snap); return 0; }
	do
	{
		if (!lstrcmpi(nameProc, &pentry32.szExeFile[0]))
		{
			CloseHandle(snap);
			return pentry32.th32ProcessID;
		}
	} while (Process32Next(snap, &pentry32));
	CloseHandle(snap);
	return 0;
}
//--------------------ПРЕОБРАЗОВАНИЕ СИМВОЛОВ---------------------------
wchar_t *convertCharArrayToLPCWSTR(const char* charArray)
{
	wchar_t* wString = new wchar_t[4096];
	MultiByteToWideChar(CP_ACP, 0, charArray, -1, wString, 4096);
	return wString;
}
Код DLL

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

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
	{
		DWORD mobWID = 0x8010184A;
		DWORD Param1 = 0x9B3EEC;
		DWORD PtrFuncTarget = 0x005CC0C0;
		DWORD Param2 = 0x0EC;
		_asm
		{
			MOV EDI, mobWID                         // Вносим WID моба в регистр EDI
			MOV EBX, PtrFuncTarget                  // Вносим в свободный регистр адрес функции
			MOV EAX, DWORD PTR DS : [Param1]        //
			PUSH EDI                                // ; /Arg1
			MOV ECX, DWORD PTR DS : [EAX + 20]      // ; |
			ADD ECX, Param2                         // ; |
			CALL EBX                                // ; \elementc.00606A70
		};

		return true;
	}
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
Инжектор отрабатывает, но желаемых действий не наблюдается, наверняка допустил глупые ошибки, вот только найти их не могу :С, просьба ткнуть носом ну или указать куда рыть.
  Ответить с цитированием
Старый 27.06.2018, 12:47   #2
-= Мастер Света =-
 Рыцарь-лейтенант
Аватар для Smertig
 
Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
Отправить сообщение для Smertig с помощью ICQ Отправить сообщение для Smertig с помощью Skype™
 
По умолчанию Re: очередная неудачная DLL инжекция

Цитата:
char libName[] = "D:\Projects\C++\PW\InjectDLL\Debug\InjectDLL.dll" ;

Бросилось в глаза, остальное не смотрел. Удвой '\':
Код:
char libName[] = "D:\\Projects\\C++\\PW\\InjectDLL\\Debug\\InjectDLL.dll";
Чтобы подобных ошибок не возникало, советую проверять различные коды ошибок и прочее.
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.
  Ответить с цитированием
Пользователь сказал cпасибо:
MembRupt (27.06.2018)
Старый 27.06.2018, 13:57   #3
 Разведчик
Аватар для shaurmidze
 
shaurmidze никому не известный тип
Регистрация: 07.04.2017
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: очередная неудачная DLL инжекция

Спасибо, как домой приду - попробую.

Коды ошибок ловить используя GetLastError() ?
Я в основном через брейкпоинты отслеживаю, но на libName забыл посмотреть)
  Ответить с цитированием
Старый 27.06.2018, 14:50   #4
 Разведчик
Аватар для growl13
 
growl13 никому не известный тип
Регистрация: 06.02.2013
Сообщений: 24
Популярность: 10
Сказал(а) спасибо: 8
Поблагодарили 3 раз(а) в 2 сообщениях
 
По умолчанию Re: очередная неудачная DLL инжекция

Небольшой совет по winAPI.

Можно использовать Process32FirstW и Process32NextW вместо Process32First и Process32Next при получении Id процесса.
Приставка W означает что считывание строк будет происходить в юникоде и не нужно будет преобразовывать имя с помощью функции convertCharArrayToLPCWSTR.
По сути если она больше нигде не используется, то ее можно будет удалить чтобы не накапливать не нужный код.

Последний раз редактировалось growl13; 27.06.2018 в 14:56.
  Ответить с цитированием
Старый 27.06.2018, 16:18   #5
 Разведчик
Аватар для shaurmidze
 
shaurmidze никому не известный тип
Регистрация: 07.04.2017
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: очередная неудачная DLL инжекция

Спасибо за совет, в winAPI не углублялся, хотя про unicode и ANSI у Рихтера в самом начале написано.

Дополню сабж, начитался что начиная с висты у Windows появился механизм защиты памяти, и к win10 ситуация только ухудшилась, пробовал внедрять не DLL, а код. Тред создаётся, GetLastError показывает 0, после чего программа завершает работу, а с ней падает и клиент.
Возможно зря я копаю форум на предмет таких старых механизмов, может быть есть смысл пробовать под ХР ?
  Ответить с цитированием
Старый 27.06.2018, 16:41   #6
 Разведчик
Аватар для j091
 
j091 никому не известный тип
Регистрация: 16.02.2011
Сообщений: 26
Популярность: 10
Сказал(а) спасибо: 87
Поблагодарили 10 раз(а) в 5 сообщениях
 
По умолчанию Re: очередная неудачная DLL инжекция

При запуске от имени администратора под win 10 всё замечательно инжектится и работает.
  Ответить с цитированием
Старый 27.06.2018, 16:46   #7
 Разведчик
Аватар для shaurmidze
 
shaurmidze никому не известный тип
Регистрация: 07.04.2017
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: очередная неудачная DLL инжекция

А можешь привести код инжектора ?
Просто я не уверен и в инжекторе, и в DLLке, запускаю аналогично от админа.

Ну или хотя бы часть кода с созданием указателя на функцию и запуск треда.

Последний раз редактировалось shaurmidze; 27.06.2018 в 16:48.
  Ответить с цитированием
Ответ

Метки
dll injection

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Файл] Очередная база SetFer Базы серверов и брут 7 05.07.2011 21:08
[Обсуждение] Очередная проблема c WP faKebook Общение и обсуждение 0 03.11.2010 19:13
[Обсуждение] Очередная война Snova_s_vami Общение и обсуждение 22 30.08.2010 22:40

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

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

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