1. Внимание!
    Объявились мошенники, которые представляются администрацией форума и обманывают покупателей. У них есть своя группа ВКонтакте, копирующая нашу, и несколько аккаунтов, маскирующихся под аккаунты администраторов и гарантов форума.
    При проведении любых сделок с администраторами, гарантами и пользователями BlastHack настойчиво требуйте у них написать вам личное сообщение на форуме и ни в коем случае не продолжайте сделку при отказе выполнять это требование или если сообщение не было получено.

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

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

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

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

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

    Dark_Knight РКН Тян
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    2.207
    Лайки:
    606
    Репутация:
    188
    Total Injector
     
    #2
  3. #WH1SKEY

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

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

    DarkP1xel Δ9
    BH Team

    Регистрация:
    17.06.13
    Сообщения:
    1.872
    Лайки:
    1.153
    Репутация:
    308
  5. FYP

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

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

    Код (C++):
    Выделить всё двойным кликом
    #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;
    }
     
    #5
  6. #WH1SKEY

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

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