injection dll в игру

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by GAiN, 16 Aug 2014.

  1. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    #1 GAiN, 16 Aug 2014
    Last edited: 17 Aug 2014
  2. neviens

    neviens Member

    Joined:
    9 Oct 2013
    Messages:
    82
    Likes Received:
    28
    Reputations:
    3
    Я обычно dll side-loading'ом пользуюсь.
    Смотрю, какие системные дллы подгружаются, копирую подходящую (типа wsock32.dll, msvcrt71.dll, итд) в директорию жертвы, добавляю в эту длл код типа LoadLibrary("LibraryToInject.dll"); или подправляю таблицу импорта.
    Некоторые, как, например, wsock32.dll и msimg32.dll, вообще можно самому написать с всем необходимым кодом уже внутри.
     
    1 person likes this.
  3. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    637
    Likes Received:
    246
    Reputations:
    42
    Через нее помнится делались кигены к аспротекту, так что метод крайне годный
     
  4. neviens

    neviens Member

    Joined:
    9 Oct 2013
    Messages:
    82
    Likes Received:
    28
    Reputations:
    3
    Если почитать это:
    http://www.unrealadmin.org/forums/showthread.php?t=10950&highlight=opengl32
    , то этот метод оказывается малопригодным. На сервере можно определить,
    какие дллы загружены в процесс и откуда. Значит надо пользоваться классикой жанра
    Code:
    #include <windows.h>
    #include <tlhelp32.h>
    #pragma comment(linker, "/NODEFAULTLIB /ENTRY:main /MERGE:.rdata=.text /SUBSYSTEM:WINDOWS")
    #define PROC_NAME "UT3.exe"
    #define LIB_NAME "winlibvr.dll"
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    HANDLE getProcHandle(char* procName)
    {
    	HANDLE h, hp = NULL;
    	PROCESSENTRY32 pe;
    
    	h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    	if(h != INVALID_HANDLE_VALUE)
    	{
    		pe.dwSize = sizeof(pe);
    		if(Process32First(h, &pe))
    		{
    			do {
    				if(!lstrcmpi(pe.szExeFile, procName))
    				{
    					hp = OpenProcess(PROCESS_ALL_ACCESS, 0, pe.th32ProcessID);
    					break;
    				}
    			} while(Process32Next(h, &pe));
    		}
    		CloseHandle(h);
    	}
    	return hp;
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    main()
    {
    	HANDLE hp, ht;
    	int tmp, ret = 0;
    	char* mem;
    
    	if((hp = getProcHandle(PROC_NAME)))
    	{
    		if((mem = VirtualAllocEx(hp, 0, 0x100, MEM_COMMIT, PAGE_READWRITE)))
    		{
    			if(WriteProcessMemory(hp, mem, LIB_NAME, sizeof(LIB_NAME), &tmp))
    			{
    				if((ht = CreateRemoteThread(hp, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, mem, 0, 0)))
    				{
    					WaitForSingleObject(ht, INFINITE);
    					GetExitCodeThread(ht, &ret);
    					CloseHandle(ht);
    				}
    			}
    			VirtualFreeEx(hp, mem, 0, MEM_RELEASE);
    		}
    		CloseHandle(hp);
    	}
    
    	if(ret)
    		MessageBox(NULL, "Library loaded", "OK", 0);
    	else
    		MessageBox(NULL, "Library NOT loaded", NULL, 0);
    	ExitProcess(0);
    }
    
    , назвать UT aimbot.dll малоприметном именем, изменить размер,
    добавить секцию ресурсов с версией файла и загружать из
    \system32 (\SysWOW64).
    А ещё лучше сделать из неё просто кусок кода, который
    загрузить и запустить с теми-же WriteProcessMemory() CreateRemoteThread().