Перехват Native API через таблицу импорта

Тема в разделе "WASM.RESEARCH", создана пользователем Pinkbyte, 3 сен 2006.

  1. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    можешь заюзать форвардинг экспорта, если конечно ты контролируешь создание процессов.
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Бери готовый.
    Про дельту и регистры я ничего не понял, бред какой-то.

    ToolHelp функции. Находятся в кернеле.

    Лучше всего справочник Неббета купи. Жутко полезная вещь, если NativeApi хочеш заниматься.
     
  3. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    Asterix, и как же ты предполагаешь осуществлять перехват? Вот тут, что не говори, а VirtualProtect не катит. Ошибок не выдает, и область памяти правильная, а писать в таблицу импорта кернеля все равно никак.

    Ничо не бред. Я имел ввиду, что для использования дельта смещения, мне пришлось кое-где писать в опкодах, т.к. я не хочу особо менять в перехватываемой ф-ции регистры, которые в нее поступают, а использовать стек в данном случае - не выход, т.к. восстановление будет перед jump, то есть:

    Вот это я и имел ввиду

    И последнее - где взять готовый дизасм длин???
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    нормально пишется и юзается, например в плагине HideDebugger ;)
     
  5. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
     
  6. Cigan

    Cigan New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2003
    Сообщения:
    54
    Адрес:
    Моск.обл
    http://www.wasm.ru/forum/viewtopic.php?id=13329 Прочти там и сорсы есть
     
  7. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    делай так:
    Код (Text):
    1. push eax                  ;место в стеке для адреса возврата
    2. pushad
    3. ....
    4. mov eax,[ebp+API_Addr]
    5. mov [esp+20h],eax      ;ложим адрес, куда надо вернуться
    6. popad
    7. ret
    или так
    Код (Text):
    1. puhad
    2. mov eax,[ebp+API_Addr]
    3. mov [return+ebp],eax
    4. popad
    5.          db 68h         ;push xxxx
    6. return dd 0
    7. ret
     
  8. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    Pinkbyte
    посмотри Detours hxxp://research.microsoft.com/sn/detours/
    там и сплайсинг и инъекция и дизасм есть
    + туча примеров ее юзанья
     
  9. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    За дизасм длин. А насчет перехвата через IAT кернеля - контр-пример
     
  10. SmikeX

    SmikeX New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2003
    Сообщения:
    20
    VirtualProtect работает без проблем
    вот пример функции перехватчика gethostbyname из winsock32 (ws_32)

    __declspec( naked ) void hookfuncGetHostByName(void)
    {
    _asm
    {
    push [esp + 4h]
    mov eax, dwGetHostByNameAddress //real address of gethostbyname
    call eax
    pushad
    push eax
    push [esp + 28h]
    call gethostbynameProc //proceeding function
    popad
    end: ret 4h
    }
    }

    замена в таблице импорта, выбранной вами DLL выглядит на С так

    DWORD * pNewAddress;
    BYTE * pbyPointer;
    //pbyPointer is the Address where address of gethostbyname function is stored in import table.
    //Value of pbyPointer should be found by poceeding DLL file
    pbyPointer =
    *pNewAddress = hookfuncGetHostByName;
    DWORD dwOldProtect;
    VirtualProtect( pbyPointer, 4, PAGE_READWRITE, &dwOldProtect);
    *((DWORD*)pbyPointer) = *pNewAddress;
    VirtualProtect( pbyPointer, 4, dwOldProtect, &dwOldProtect);

    вот пример аппликации с многочисленными перехватами в import tables разных DLLs
    http://www.smike.ru
     
  11. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    Так я ж не говорю что winsock не пашет. Но ОНА то грузится каждый раз по разному, а kernel32.dll(как и ntdll.dll) грузится всегда по одинаковым адресам. И не VirtualProtect'ятся!

    asd, за пример - спасибки. Буду юзать...
     
  12. Guest

    Guest Guest

    Публикаций:
    0
    А почему ты решил что слайсинг не прокатит? Я такое уже пробовал, у меня работает. И еще как ntdll.dll может быть в Ring-0? В основном названия функций в ней совпадают с ядерными, но это не значит что библиотека лежит в Ring-0, всего лишь происходит NTCALL вызов в ядро и все. Так что здесь сплайсинг как раз к месту, исходников у меня нет, но в гугле все найти можно.
     
  13. Guest

    Guest Guest

    Публикаций:
    0
    Вот отыскал на винте отличные статьи по этому поводу, юзай :) АСМ конечно круто, но лучше сначала попробовать на СИ . http://rapidshare.de/files/32396082/Hook_API.rar.html
     
  14. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    Дык со сплайсингом я ужо разобрался, однако перехватывать API через таблицу импорта кернеля не могу(да и не нужно в общем-то мне уже! :)))