Код нахождения kernel32.dll через peb(From LSD Team)

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 21 авг 2005.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Здравствуйте.



    Читая оффлайновую версию сайта наткнулся на код:
    Код (Text):
    1.     mov eax, fs:[30h]
    2.     mov eax, [eax+0Ch]
    3.     mov esi, [eax+1Ch]
    4.     lodsd            
    5.     mov eax, [eax+08h] ; eax -> VA kernel32.dll


    Мне хочется составить список версий виндов где сработает

    этот код,Поэтому к вам просьба поместить результат работы

    kernel32.bat сюда или послать мне на мыло:

    int20h @ yandex . ru

    или же, если вы сомневаетесь в чистоте моих намерений,то:
    Код (Text):
    1. #include <iostream>
    2. #include <windows.h>
    3.  
    4. using namespace std;
    5.  
    6. int main()
    7. {
    8.     DWORD   kernel = NULL;
    9.     __asm   // From LSD Team
    10.     {
    11.         push    eax
    12.         push    esi
    13.         mov     eax,fs:[30h]
    14.         mov     eax,[eax+0ch]
    15.         mov     esi,[eax+1ch]
    16.         lodsd
    17.         mov     eax,[eax+08h]
    18.         mov     kernel,eax
    19.         pop     esi
    20.         pop     eax
    21.     }
    22.     cout << "Kernel32.dll PEB:\t\t\t\t";
    23.     cout << hex << uppercase << kernel << endl;
    24.     cout << "Kernel32.dll GetModuleHandle(\"kernel32.dll\"):\t";
    25.     cout << GetModuleHandle("kernel32.dll") << endl;
    26.     return 0;
    27. }


    заранее благодарен!

    [​IMG] _654521351__kernel32_20050821.rar
     
  2. ThEagle

    ThEagle New Member

    Публикаций:
    0
    Регистрация:
    21 авг 2005
    Сообщения:
    3
    C:\>project2

    Kernel32.dll PEB: 77E60000

    Kernel32.dll GetModuleHandle("kernel32.dll"): 77E60000



    C:\>



    Ось: Microsoft Windows XP [Версия 5.1.2600]



    WinXP SP1 RuS
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    По идее работает на всех WinNT.

    PS: я так делол в MsgBox compo, одним из условий которого было чтоб работало на WinNT 4.0+.
     
  4. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Код (Text):
    1. typedef struct  _KMODULEINFOLISTENTRY {  // получена чисто эксперементальным путем
    2.      DWORD      Flink;
    3.      DWORD      Blink;
    4.      DWORD      ModuleIBase;
    5.      DWORD      DllEntryPoint;
    6.      DWORD      Unknown2;
    7.      DWORD      Unknown3;
    8.      PWCHAR     ModuleName;
    9.  } KMODULEINFOLISTENTRY, *PKMODULEINFOLISTENTRY, **PPKMODULEINFOLISTENTRY;
    10. //-------------------------------------------------------------
    11.  
    12. //-------------------------------------------------------------
    13.  
    14.  
    15.  
    16. //--------- находим модуль Kernel32.dll в списке модулей процесса и возвращаем его базовый адрес
    17.  DWORD kwsGetModule(PWCHAR ModuleNameW)
    18.  {
    19.  int                    MNameLen;
    20.  int                    buflen;
    21.  PWCHAR                 pl;
    22.  PKMODULEINFOLISTENTRY  p,firstentry;
    23.  static WCHAR           s_array[0x200];
    24.  DWORD                  i,j;
    25.  static PPEB            pPeb = (PPEB)0x7ffdf000;                     // PEB
    26.  
    27.  __try{
    28.  
    29.  MNameLen = 0;
    30.  if (MmGetPhysicalAddress(pPeb).QuadPart == 0) return 0; // no user space this process has
    31.    for (MNameLen=0; ModuleNameW[MNameLen] !=0; MNameLen++) ModuleNameW[MNameLen] = RtlUpcaseUnicodeChar(*(ModuleNameW+MNameLen));
    32.    (DWORD)p = (DWORD)firstentry = *(PDWORD)pPeb->ProcessModuleInfo->ModuleHeader.List3.Flink;
    33.    for (i = 0; i<10001/* максимальное количество загруженных dll */ ;++i)  
    34. {
    35.       if (MmGetPhysicalAddress(p->ModuleName).QuadPart == 0) return 0;
    36.       pl = p->ModuleName;
    37.   RtlZeroMemory(s_array,sizeof(s_array));  // обнуляем массив
    38.     buflen = 0;
    39.   for (pl; *pl!=0;pl++)
    40.   {   s_array[buflen] = RtlUpcaseUnicodeChar(*pl);
    41.       buflen++;
    42.   }  
    43.     j = buflen*2 - MNameLen*2; // адрес строки в буфере откуда сравнивать
    44.     j = (DWORD)s_array + j;
    45.     if (!memcmp((PCHAR)j,ModuleNameW,MNameLen*2)) {return p->ModuleIBase;} // if strings are equal then return Ib of Kernel32.dll
    46.      if (MmGetPhysicalAddress((PKMODULEINFOLISTENTRY)p->Flink).QuadPart == 0) return 0;
    47.     p = (PKMODULEINFOLISTENTRY)(p->Flink);
    48.     if ((PDWORD)firstentry == (PDWORD)p) return 0;  // no kernel32.dll module mapped at this process space :)
    49. }
    50.  }
    51.  __except(EXCEPTION_EXECUTE_HANDLER){}
    52.     return 0; // oOPS!? :))






    Гы! моё )))) без всяких LSD Team )))

    Пользуйте
     
  5. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    это для нахождения из режима ядра было придумано изначально, искать можно любой модуль )
     
  6. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    кроме того, этот код проверен на всех версиях винд, начиная с 2k sp0 и заканчивая лонгхорном )).
     
  7. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    на 4ке непрверялось ввиду отстутствия последней
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    ой, вот теперь потерялся с кем пиво пить! :dntknw:(( То ли группу писавшую "Упаковщики", толи тебя, толи ... вобщем хрен кому налью, все равно не придет никто, рад бы! :) НО за код спасибо
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    А можно попросить авторский стиль оформления кода, или код обернуть в теги "
    Код (Text):
    1.  
    "
     
  10. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    EvilsInterrupt

    гыыы, лана, на мыло пришлю )) тока мыло напомни плиз, а то рыться в почтовом кармане становится с каждым днем все труднее и труднее )))
     
  11. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Не поверишь ведь, а я свое мыло в профиле однако держал! :))) НУ ладно, чтобы ты много не трудился я те тута пишу int20 @@@ yandex . ru