HELP -> Работа с NTDLL.DLL

Discussion in 'Реверсинг' started by GlOFF, 25 Nov 2007.

  1. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Из своей программы, получаю адресс загрузки NTDLL.DLL и хочу анализировать PE-заголовок, но при попытки проверки MZ-сигнатуры выдается сообщение об ошибки, ошибка доступа к памяти, доступ к памяти запрешен!
    VirtualProtect на весь SizeOfImage из NTDLL.DLL тоже не помогает, хотя функция возвращает не ноль.
    При просмотре программы через ollyDBG, моя программа анализирует загловок NTDLL.DLL и выполняет то, что запланировано без ошибок.

    Как я понел: При выполнении моей проги в контексте отладчика (т.е. при просмотре в ольке) ошибок при обращении к адрессному пространству NTDLL.DLL - НЕТ, как добиться нормальной работы, в чем тут проблема??? :confused:
     
    #1 GlOFF, 25 Nov 2007
    Last edited: 25 Nov 2007
  2. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    395
    Reputations:
    297
    фрагмент кода в студию
     
  3. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Code:
    mov edx, 7C900000
    cmp word ptr[edx], 5A4Dh ; cmp 'MZ'
    jnz @end
    
    Ошибка при попытке чтения word по адресу загрузки ntdll.dll (7C900000 - на WinXP SP2).
     
    #3 GlOFF, 25 Nov 2007
    Last edited: 25 Nov 2007
  4. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    395
    Reputations:
    297
    >>mov edx, 7C900000
    cmp word ptr[edx], 5A4Dh ; cmp 'MZ'
    jnz @end

    А ты уверен, что адрес загрузки там? C помощью LoadLibrary или GetModuleHandleA получаешь адрес загрузки и все прекрасно работает.
     
    #4 0x0c0de, 25 Nov 2007
    Last edited: 25 Nov 2007
  5. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?
     
  6. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    395
    Reputations:
    297
    >>0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?

    Да
     
  7. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    541
    Reputations:
    445
    GlOFF, компилятор?

    даже делфя нормально сгенерила код и все отрабатывает вне оли:
    Code:
    procedure TForm1.FormCreate(Sender: TObject);
    var
    res: integer;
    begin
    res := 0;
    asm
      pushad
        MOV EDX,$7C900000
        CMP WORD PTR [EDX],$5A4D
        JNZ @fail
        mov res, 1
        jmp @ending
      @fail:
        mov res, 0
      @ending:
        popad
      end;
    
    if res = 1 then Showmessage('Found!') else Showmessage('Failed  !')
    end;
    
     
  8. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Разобрался :)

    Странный факт! Заходим в ОЛЮ, при загрузке модуля на вершине стека [esp] лежит адресс в kernel32 , а на [esp+4] адресс в ntdll.
    А при запуске вне отладчика, по [esp+4] совсем другой адресс. :( Вот я и оперался на [esp+4].
     
    1 person likes this.