Vista/W7 и NTDLL.DLL

Тема в разделе "WASM.NT.KERNEL", создана пользователем SubV, 26 май 2009.

  1. SubV

    SubV New Member

    Публикаций:
    0
    Регистрация:
    26 май 2009
    Сообщения:
    1
    Здравствуйте, господа.

    Как известно, немалая часть проблем с запуском приложений под Vista/W7 связана с тем, что старый механизм получения адресов API "напрямую" более не работает. Пример: недавняя демка Elevated, упакованная 4kb-пакером Crinkler, падение при запуске на W7 build 7127:

    Комментарий автора пакера:

    Всё это хорошо... но не решит проблем с существующим софтом, не желающим работать в новых ОС. Идеальным решением, как мне кажется, будет написание wrapper'а для ntdll и других системных библиотек, который будет корректно возвращать адреса API вызывающей программе.

    Предлагаю поделиться мыслями по данному вопросу.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Я сам код не смотрел, но интересно, как он получает обратный адрес. Если он берет вторую запись в ПЕБ (или первую? или третью? не помню просто) - это одно. Если он перечисляет все записи и сравнивает по именам - это другое. Вообще, надо глянуть самому, что там в пеб не так. Как вариант, можно составлять случайный импорт с кернелом, брать оттуда адрес любой апи и уже исходя из этого отталкиваться в поиске базы.

    П.С.: сам пока не смотрел, но может кто в курсе - на торрентах есть в7?
     
  3. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    на торрентах может и есть,:)))
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    SubV
    По вашему PE-формат столь сильно изменили что старый код парсинга таблиц экспорта уже не работает ?
    Причём PEB к экспорту вобще ?
     
  5. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Clerk
    Чтобы до таблицы экспорта добраться, надо еще до модуля добраться. Раз вопрос в os.kernel'e, предлагаю искать через idt.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    censored
    Кого через IDT, нтдлл ??
    ntdll грузится всегда по адресу из заголовка. Зачем в ядре лезть в юзермодный лодер, чтоб этот модуль найти. Он в ядро промаплен. Ну или с диска считать и базу найти. В юзермоде могут отличаться структуры, что они там с KernelBase.dll сделали не знаю.
     
  7. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Clerk
    ntoskrnl ;)
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Вот набросал пикод для вызова трёх процедур(LdrFindEntryForAddress, LdrEnumerateLoadedModules, LdrQueryProcessModuleInformation). Остальное быстро дописать можно при необходимости(хз что вам нужно).