Вопрос DLL-инжектор

Тема в разделе "C, C++", создана пользователем #WH1SKEY, 19 сен 2016.

Статус темы:
Закрыта.
  1. #WH1SKEY

    #WH1SKEY Пользователь

    Регистрация:
    19.09.2016
    Сообщения:
    6
    Симпатии:
    0
    Репутация:
    0
    Кто-нибудь покажите пожалуйста пример кода самой DLL с какой-нибудь банальной функцией и сам инжектор.
    Мне не нужно инжектить в самп, мне нужно в саму гта.
    Вроде кучу вариантов пробовал, но без успеха.
     
  2. Dark_Knight

    Dark_Knight Мое лицо, когда человек верующий.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.510
    Симпатии:
    761
    Репутация:
    208
    Total Injector
     
  3. #WH1SKEY

    #WH1SKEY Пользователь

    Регистрация:
    19.09.2016
    Сообщения:
    6
    Симпатии:
    0
    Репутация:
    0
    Если бы, но мне нужно свою.
     
  4. DarkP1xel

    DarkP1xel #ТГК
    BH Team

    Регистрация:
    17.06.2013
    Сообщения:
    2.271
    Симпатии:
    1.420
    Репутация:
    344
  5. FYP

    FYP админ какой-то

    Регистрация:
    09.03.2013
    Сообщения:
    1.154
    Симпатии:
    2.039
    Репутация:
    749
    делал давно и вообще не я. запускает приложение, указанное в параметре командной строки и инжектит в него все dll-файлы из папки FastLoader.
    это весь код и он работает. он не инжектит в уже запущенный процесс, но переделать, в принципе, очень просто.

    
    #include <Windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    bool RemoteLoadLibW(DWORD dwProcessId, PCWSTR pszLibFile)
    {
       HANDLE     hProcess = NULL, hThread = NULL;
       PWSTR     pszLibFileRemote = NULL;
    
       int iChars = 1 + lstrlenW(pszLibFile);
       int iSize = iChars * sizeof(WCHAR);  // calculate the size we need in the foreign process
    
       // open a handle to the foreign process
       hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
    
       if (hProcess == NULL)
         return false;
    
       // allocate space for the string in the foreign process
       pszLibFileRemote = (PWSTR) VirtualAllocEx(hProcess, NULL, iSize, MEM_COMMIT, PAGE_READWRITE);
    
       if (pszLibFileRemote == NULL)
         return false;
    
       // Copy the DLL path in to the foreign process
       if (!WriteProcessMemory(hProcess, pszLibFileRemote, (PVOID) pszLibFile, iSize, NULL))
         return false;
    
       // all DLLs are mapped in the local address space of a process and in 99% of all cases
       // it's nt.dll and then the kernel so the relative address of kernel functions is equal in
       // all processes
       LPTHREAD_START_ROUTINE pfnThreadRtn = (LPTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandleA("Kernel32"), "LoadLibraryW");
    
       if (pfnThreadRtn == NULL)
         return false;
    
       hThread = CreateRemoteThread(hProcess, NULL, 0, pfnThreadRtn, pszLibFileRemote, 0, NULL);
    
       // unable to create foreign thread
       if (hThread == NULL)
         return false;
    
       // wait for the remote-thread to finish
       WaitForSingleObject(hThread, INFINITE);
    
       // everything went smoothly till here so we assume that the injection was successful
       if (pszLibFileRemote != NULL)
         VirtualFreeEx(hProcess, pszLibFileRemote, iSize, MEM_RELEASE);
    
       if (hThread != NULL)
         CloseHandle(hThread);
    
       if (hProcess != NULL)
         CloseHandle(hProcess);
    
       return true;
    }
    
    bool RemoteLoadLibA(DWORD dwProcessId, PCSTR pszLibFile)
    {
       PWSTR pszLibFileW = NULL;  // pointer to the UNICODE string
    
       // allocate space for the converted UNICODE string
       pszLibFileW = (PWSTR) malloc((lstrlenA(pszLibFile) + 1) * sizeof(WCHAR));
    
       // convert from ANSI to UNICODE
       wsprintfW(pszLibFileW, L"%S", pszLibFile);
    
       // call the UNICODE version
       bool result = RemoteLoadLibW(dwProcessId, pszLibFileW);
    
       free(pszLibFileW);
    
       return result;
    }
    
    bool GetDebugPrivilege(void)
    {
       HANDLE  hToken;
       TOKEN_PRIVILEGES  CurrentTPriv;
       LUID  luidVal;
    
       if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) == FALSE)
         return 0;
    
       if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luidVal) == FALSE)
       {
         CloseHandle(hToken);
         return 0;
       }
    
       CurrentTPriv.PrivilegeCount = 1;
       CurrentTPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
       CurrentTPriv.Privileges[0].Luid = luidVal;
    
       BOOL result = AdjustTokenPrivileges(hToken, FALSE, &CurrentTPriv, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
    
       CloseHandle(hToken);
    
       return result == TRUE;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
       if (lpCmdLine[0] == '\0')
         return false;
    
       GetDebugPrivilege();
    
       PROCESS_INFORMATION piLoadee;
       STARTUPINFO siLoadee;
       memset(&piLoadee, 0, sizeof (PROCESS_INFORMATION));
       memset(&siLoadee, 0, sizeof (STARTUPINFO));
       siLoadee.cb = sizeof(STARTUPINFO);
       if (!CreateProcess(lpCmdLine, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &siLoadee, &piLoadee))
       {
         MessageBox(NULL, "Could not start process", NULL, MB_ICONEXCLAMATION | MB_OK);
         return 0;
       }
    
       WIN32_FIND_DATAA find;
       HANDLE search;
       if ((search = FindFirstFileA("FastLoader\\*.dll", &find)) != INVALID_HANDLE_VALUE)
       {
         do
         {
           char path[MAX_PATH] = "FastLoader\\";
           strcat_s(path, find.cFileName);
           if (!RemoteLoadLibA(piLoadee.dwProcessId, path))
           {
             char tmp[512];
             sprintf_s(tmp, "Could not inject %s", find.cFileName);
             MessageBox(NULL, tmp, NULL, MB_ICONEXCLAMATION | MB_OK);
           }
         } while (FindNextFileA(search, &find));
    
       }
    
       ResumeThread(piLoadee.hThread);
    
       return 0;
    }
    
     
  6. #WH1SKEY

    #WH1SKEY Пользователь

    Регистрация:
    19.09.2016
    Сообщения:
    6
    Симпатии:
    0
    Репутация:
    0
    DarkP1xel и FYP, спасибо огромное)
     
Статус темы:
Закрыта.