Knight online dll injection

bnmdmbrk

Yeni üye
21 Şub 2016
40
0
Zonguldak
S.a. TürkHackTeam ailesi. Yazdığım dll'yi oyuna inject ettiğimde 1-2 dk içinde oyun kapanıyor. Bende biraz araştırdım ve dll'nin görünmemesi için birkaç api buldum. Detours kütüphanesini kullanarak bunların birkaçını hooklamayı denedim ve şöyle bişey ortaya çıktı:

Kod:
#pragma region NtQueryVirtualMemory
FARPROC _NtQueryVirtualMemory = GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")), "NtQueryVirtualMemory");

typedef NTSTATUS(NTAPI *T_NtQueryVirtualMemory)(
	HANDLE						ProcessHandle, 
	P****						BaseAddress, 
	MEMORY_INFORMATION_CLASS	Type,
	P****						Out,
	SIZE_T						Length, 
	PSIZE_T						NumberOfBytesRead
	);
T_NtQueryVirtualMemory O_NtQueryVirtualMemory = (T_NtQueryVirtualMemory)(_NtQueryVirtualMemory);

NTSTATUS NTAPI F_NtQueryVirtualMemory(HANDLE& ProcessHandle, P****& BaseAddress, MEMORY_INFORMATION_CLASS& Type, P****& Out, SIZE_T& Length, PSIZE_T& NumberOfBytesRead)
{
	#ifdef DEBUG
		char buffer[255];
		sprintf_s(buffer, "[DllModule] - NtQueryVirtualMemory(%p, %d, %d, %d, %l, %l)", ProcessHandle, BaseAddress, Type, Out, Length, NumberOfBytesRead);
		OutputDebugString(buffer);
	#endif // DEBUG
	NTSTATUS Temp;

	Temp = O_NtQueryVirtualMemory(ProcessHandle, BaseAddress, Type, Out, Length, NumberOfBytesRead);

	return NULL;
}
#pragma endregion

#pragma region NtQueryInformationProcess 
FARPROC _NtQueryInformationProcess = GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")), "NtQueryInformationProcess ");

typedef NTSTATUS(WINAPI  *T_NtQueryInformationProcess)(
	HANDLE           ProcessHandle,
	PROCESSINFOCLASS ProcessInformationClass,
	P****            ProcessInformation,
	ULONG            ProcessInformationLength,
	PULONG           ReturnLength
	);

T_NtQueryInformationProcess  O_NtQueryInformationProcess = (T_NtQueryInformationProcess)(_NtQueryInformationProcess);

NTSTATUS NTAPI F_NtQueryInformationProcess(HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, P**** ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength)
{
	#ifdef DEBUG
		char buffer[255];
		sprintf_s(buffer, "[DllModule] - NtQueryInformationProcess(%p, %d, %p, %l, %p)", ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength);
		OutputDebugString(buffer);
	#endif // DEBUG

	DWORD dwResult = O_NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength);

	return dwResult;
}
#pragma endregion

**** detour()
{
#ifdef DEBUG
	char buffer[255];
	sprintf_s(buffer, "[DllModule] - Detour Functions");
	OutputDebugString(buffer);
#endif // DEBUG

	Detours::X86::DetourFunction((PBYTE)O_NtQueryVirtualMemory, (PBYTE)F_NtQueryVirtualMemory);
	Detours::X86::DetourFunction((PBYTE)O_NtQueryInformationProcess, (PBYTE)F_NtQueryInformationProcess);
}

**** undetour()
{
#ifdef DEBUG
	char buffer[255];
	sprintf_s(buffer, "[DllModule] - UnDetour Functions");
	OutputDebugString(buffer);
#endif // DEBUG

	Detours::X86::DetourRemove((PBYTE)F_NtQueryVirtualMemory);
	Detours::X86::DetourRemove((PBYTE)F_NtQueryInformationProcess);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LP**** lpReserved)
{
	DisableThreadLibraryCalls(hModule);
	HideModule(hModule);

	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		detour();
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	case DLL_PROCESS_DETACH:
		undetour();
		break;
	}
	return TRUE;
}

Ama bunları hookladığımda oyun direk kapanıyor. Bulduğum Api'lerin dışında başka Api'leri denedim ve onlarda sorun olmuyor, tabi yine 1-2 dakikaya oyun kapanıyor. Sanırım hook yönteminde problem, oyun bu apileri koruyor olmalı. Biraz daha araştırma yaptım ama işler iyice karıştı :D
Birisi IAT hooking dene demiş ve denedim olmadı.
Başka biri o detourla hook yapılan gerçek pointer değilde gerçek fonksiyonu saran fonksiyonun pointerı demiş. Bu konuda başkasıda bir video yapmıştı ve Olly'le exe'sinden o fonksiyonun gerçek pointerını bulup patern ve maskını çıkarmıştı ve bunlarla api'yi çalışma zamanında tekrar bulup hookluyordu. Bende bu yolu deniyim dedim. Exe'yi unpack ettim ama fonksiyonu bulmak o kadar kolay değilmiş :D
Hala denemeye devam ediyorum fakat gözüme o yolun ucuda aynı görünüyor.
Son olarakta Extreme Injector v3.6 kullanıyorum ve özellik olarak Manual Map ile Erase Pe ve Hide module işaretli.

Bana hook konusunda doğru yolda olup olmadığımı söyleyebilecek bir üstat var mı? Aşırı zorluyomuş insanı bu işler :D

Birde doğru yoldaysam olly'de aradığım fonksiyonu nasıl bulabileceğime dair ışık tutabilecek bir üstat var mı? Şu yöntemi dene, şununla oluyor veya şu konuya bak anlarsın gibi?
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.