Здравствуйте. Читая оффлайновую версию сайта наткнулся на код: Код (Text): mov eax, fs:[30h] mov eax, [eax+0Ch] mov esi, [eax+1Ch] lodsd mov eax, [eax+08h] ; eax -> VA kernel32.dll Мне хочется составить список версий виндов где сработает этот код,Поэтому к вам просьба поместить результат работы kernel32.bat сюда или послать мне на мыло: int20h @ yandex . ru или же, если вы сомневаетесь в чистоте моих намерений,то: Код (Text): #include <iostream> #include <windows.h> using namespace std; int main() { DWORD kernel = NULL; __asm // From LSD Team { push eax push esi mov eax,fs:[30h] mov eax,[eax+0ch] mov esi,[eax+1ch] lodsd mov eax,[eax+08h] mov kernel,eax pop esi pop eax } cout << "Kernel32.dll PEB:\t\t\t\t"; cout << hex << uppercase << kernel << endl; cout << "Kernel32.dll GetModuleHandle(\"kernel32.dll\"):\t"; cout << GetModuleHandle("kernel32.dll") << endl; return 0; } заранее благодарен! _654521351__kernel32_20050821.rar
C:\>project2 Kernel32.dll PEB: 77E60000 Kernel32.dll GetModuleHandle("kernel32.dll"): 77E60000 C:\> Ось: Microsoft Windows XP [Версия 5.1.2600] WinXP SP1 RuS
По идее работает на всех WinNT. PS: я так делол в MsgBox compo, одним из условий которого было чтоб работало на WinNT 4.0+.
Код (Text): typedef struct _KMODULEINFOLISTENTRY { // получена чисто эксперементальным путем DWORD Flink; DWORD Blink; DWORD ModuleIBase; DWORD DllEntryPoint; DWORD Unknown2; DWORD Unknown3; PWCHAR ModuleName; } KMODULEINFOLISTENTRY, *PKMODULEINFOLISTENTRY, **PPKMODULEINFOLISTENTRY; //------------------------------------------------------------- //------------------------------------------------------------- //--------- находим модуль Kernel32.dll в списке модулей процесса и возвращаем его базовый адрес DWORD kwsGetModule(PWCHAR ModuleNameW) { int MNameLen; int buflen; PWCHAR pl; PKMODULEINFOLISTENTRY p,firstentry; static WCHAR s_array[0x200]; DWORD i,j; static PPEB pPeb = (PPEB)0x7ffdf000; // PEB __try{ MNameLen = 0; if (MmGetPhysicalAddress(pPeb).QuadPart == 0) return 0; // no user space this process has for (MNameLen=0; ModuleNameW[MNameLen] !=0; MNameLen++) ModuleNameW[MNameLen] = RtlUpcaseUnicodeChar(*(ModuleNameW+MNameLen)); (DWORD)p = (DWORD)firstentry = *(PDWORD)pPeb->ProcessModuleInfo->ModuleHeader.List3.Flink; for (i = 0; i<10001/* максимальное количество загруженных dll */ ;++i) { if (MmGetPhysicalAddress(p->ModuleName).QuadPart == 0) return 0; pl = p->ModuleName; RtlZeroMemory(s_array,sizeof(s_array)); // обнуляем массив buflen = 0; for (pl; *pl!=0;pl++) { s_array[buflen] = RtlUpcaseUnicodeChar(*pl); buflen++; } j = buflen*2 - MNameLen*2; // адрес строки в буфере откуда сравнивать j = (DWORD)s_array + j; if (!memcmp((PCHAR)j,ModuleNameW,MNameLen*2)) {return p->ModuleIBase;} // if strings are equal then return Ib of Kernel32.dll if (MmGetPhysicalAddress((PKMODULEINFOLISTENTRY)p->Flink).QuadPart == 0) return 0; p = (PKMODULEINFOLISTENTRY)(p->Flink); if ((PDWORD)firstentry == (PDWORD)p) return 0; // no kernel32.dll module mapped at this process space :) } } __except(EXCEPTION_EXECUTE_HANDLER){} return 0; // oOPS!? :)) Гы! моё )))) без всяких LSD Team ))) Пользуйте
ой, вот теперь потерялся с кем пиво пить! (( То ли группу писавшую "Упаковщики", толи тебя, толи ... вобщем хрен кому налью, все равно не придет никто, рад бы! НО за код спасибо
EvilsInterrupt гыыы, лана, на мыло пришлю )) тока мыло напомни плиз, а то рыться в почтовом кармане становится с каждым днем все труднее и труднее )))
Не поверишь ведь, а я свое мыло в профиле однако держал! )) НУ ладно, чтобы ты много не трудился я те тута пишу int20 @@@ yandex . ru