Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Реверсинг (https://forum.antichat.xyz/forumdisplay.php?f=94)
-   -   HELP -> Работа с NTDLL.DLL (https://forum.antichat.xyz/showthread.php?t=54415)

GlOFF 25.11.2007 21:50

Help -> Работа с Ntdll.dll
 
Из своей программы, получаю адресс загрузки NTDLL.DLL и хочу анализировать PE-заголовок, но при попытки проверки MZ-сигнатуры выдается сообщение об ошибки, ошибка доступа к памяти, доступ к памяти запрешен!
VirtualProtect на весь SizeOfImage из NTDLL.DLL тоже не помогает, хотя функция возвращает не ноль.
При просмотре программы через ollyDBG, моя программа анализирует загловок NTDLL.DLL и выполняет то, что запланировано без ошибок.

Как я понел: При выполнении моей проги в контексте отладчика (т.е. при просмотре в ольке) ошибок при обращении к адрессному пространству NTDLL.DLL - НЕТ, как добиться нормальной работы, в чем тут проблема??? :confused:

0x0c0de 25.11.2007 23:02

фрагмент кода в студию

GlOFF 25.11.2007 23:27

Код:

mov edx, 7C900000
cmp word ptr[edx], 5A4Dh ; cmp 'MZ'
jnz @end

Ошибка при попытке чтения word по адресу загрузки ntdll.dll (7C900000 - на WinXP SP2).

0x0c0de 25.11.2007 23:34

>>mov edx, 7C900000
cmp word ptr[edx], 5A4Dh ; cmp 'MZ'
jnz @end

А ты уверен, что адрес загрузки там? C помощью LoadLibrary или GetModuleHandleA получаешь адрес загрузки и все прекрасно работает.

GlOFF 25.11.2007 23:37

0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?

0x0c0de 25.11.2007 23:41

>>0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?

Да

ProTeuS 26.11.2007 00:15

GlOFF, компилятор?

даже делфя нормально сгенерила код и все отрабатывает вне оли:
Код:

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;


GlOFF 26.11.2007 00:28

Разобрался :)

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


Время: 05:30