реклама
ОНЛАЙН АПТЕКА НИЗКИХ ЦЕН
цены ниже розничных точек. доставка по украине

   реклама    
Аптека

proxy  статьи  библиотека  softice  free_юр.консультация  hard
рекламодателям  расшифровка штрих-кодов  links/add

http://kiev-security.org.ua

Содержание

|index|пример|

НАХОЖДЕНИЕ АДРЕСА API (на примере моей Windows'95)

Заранее известно, что адрес KERNEL32 в памяти моей системы - BFF70000.

(1) Export Table. Поиск точки входа GetProcAddressA. Name Ptr Table RVA - 50C60. (RVA первого имени в таблице) GetProcAddressA" находится по смещению 52e96. Соответствующий ему указатель в таблице имен - 510A4.

         510A4
        -50c60
         -----
           444 / 4
           -------
               111

(2) Ищем 111 элемент в Ordinal Table: Ordinal Table RVA = 51708, размер элемента - 2 байта Соответствующий GetProcAddress элемент:

         51708
        +  222  (111*2)
         -----
         5192A

Номер функции GetProcAddressA = 0175

(3) Ищем RVA функции в Address Table. Address Table RVA =

 50028      Размер элемента - 4 байта (dd).
+ 05D4      (175*4=5D4)
 -----
 505FC
DWord по RVA=505FC равен 00006D5C + BFF70000 -------- BFF76D5C - адрес процедуры.

Далее нет необходимости сканировать эту уйму таблиц на другие имена, все адреса нам расскажет GetProcAddress.

   push offset name_of_required_API
   push 0BFF70000       ; ModuleHandle (стартовый адрес в памяти)
   call 0BFF76D5C
   В AX получаем адрес точки входа в нужную API (или 00000000 в  случае ошибки).

СПРАВКА ПО WINDOWS.API

GetProcAddress  (kernel32.dll)
Параметры вызова: (push par1/ push par2/ call)
(dword)  адрес ASCIIZ строки с именем нужной API 
(dword)  адрес DLL в памяти (aka ModuleHandle)
Результат:
EAX - адрес api или 0 в случае ошибки

LoadLibraryA (kernel32.dll)
Параметры вызова:
(dword) адрес ASCIIZ строки с именем DLL,
например,  
Результат:
EAX - адрес DLL в памяти или 0 в случае ошибки

MessageBoxA  (user32.dll)
Параметры вызова:
(dword) хендл окна-владельца (0 - текущее)
(dword) адрес ASCIIZ строки заголовка окна 
(dword) адрес ASCIIZ строки сообщения
(dword) стиль окна (0 - обычное)
Результат: на экране ;)



|index|up| ; Пример нахождения адреса ; GetProcAddress в области памяти ; KERNEL32.DLL ; Эффект: вывод на экран MessageBox ; Программа выполнена в виде внедренного ; кода, может использоваться в CM .386 locals jumps .model flat,STDCALL .radix 16 ;по умолчанию все числа hex! ;extrn MessageBoxA:PROC не надо - найдем сами ! .data ; начало <ээээээээээээээээээээээээээээээээээээээээээээээээ; сохраним все регистры, т.к. нам еще ; передавать управление основной программе: PUSHAD PUSHF ; в EBP находится адрес начала нашего ; <эээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээээ загружается ; автоматически, это должны сделать мы с ; помощью LoadLibraryA ; вызов GetProcAddress для LoadLibraryA LEA EBX,[EBP][nameLoadLibraryA-v0] PUSH EBX MOV EBX,[EBP][lpKernel-v0] PUSH EBX MOV EAX,[EBP][lpGetProcAddress-v0] CALL EAX ; call GetProcAddress ; в EAX - адрес API или 0 OR EAX,EAX JZ finish LEA EBX,[EBP][nameUser32-v0] PUSH EBX CALL EAX ; call LoadLibraryA ;в EAX- адрес загруженной DLL или 0 OR EAX,EAX JZ finish LEA EBX,[EBP][nameMessageBoxA-v0] PUSH EBX PUSH EAX ; адрес загруженного USER32 CALL 4 PTR [EBP][lpGetProcAddress-v0] OR EAX,EAX JZ finish ;А теперь - долбожданный MessageBox PUSH 0 LEA EBX,[EBP][TOMB_NAME-v0] ; титул окошка PUSH EBX LEA EBX,[EBP][COFFIN_GRAFFITI-v0] PUSH EBX ; сам мессадж PUSH 0 CALL EAX ; call MessageBoxA finish: POPF POPAD RET ; данные lpExpTab DD 0 ; адрес Kernel32 Export Table lpKernel DD 0 ; адрес начала Kernel32 в ; памяти lpNamePtrTab DD ? ;адр. таблицы указателей ; имен NamePtrNo DD 0 ; № точки входа в таблице ; имен lpGetProcAddress DD ? ; адрес GetProcAddress ; искомое имя API в Kernel32 и его размер sGetProcAddress DB 'GetProcAddress',0 szSGetProcAddress EQU $-offset sGetProcAddress ; имя MessageBoxA, LoadLibraryA и DLL USER32 nameMessageBoxA DB 'MessageBoxA',0 nameLoadLibraryA DB 'LoadLibraryA',0 nameUser32 DB 'USER32',0 TOMB_NAME DB 'Mess Age Box Title',0 ; COFFIN_GRAFFITI DB 'Complete!',0 ;сегмент кода - отсюда стартует программа .code start: call v0 ret end start

|index|up|

Содержание

HOME


Если у вас есть сайт или домашняя страничка - поддержите пожайлуста наш ресурс, поставьте себе кнопочку, скопировав этот код:

<a href="http://kiev-security.org.ua" title="Самый большой объем в сети онлайн инф-ции по безопасности на rus" target="_blank"><img src="http://kiev-security.org.ua/88x31.gif" width="88" height="31" border="0" alt="security,безопасность,библиотека"></a>

Идея проекта(C)Anton Morozov, Kiev, Ukraine, 1999-2017,