Потестите нового клевого API-шпиона

Тема в разделе "WASM.SOFTWARE", создана пользователем Rustem, 11 фев 2009.

  1. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Всем привет.

    Сделал одну поделку - Апи-шпиона, самому нравится, решил выложить
    http://blackninja2000.narod.ru/files/apilogger_pub.zip

    Оф. сайт http://blackninja2000.narod.ru

    Если есть что сказать, не молчите)
     
  2. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    Смотрел, хотя и бегло, но видно что работа проделана очень серьезная. Respect тебе, Rustem! Другие софтины на сайте тоже интересные. Не хочешь написать какую-нибудь статью для wasm.ru?
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rustem
    Не боишься? Как отыщем вагон багов. ^)
     
  4. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Booster
    В этой проге нет багов. Одни фичи)))
     
  5. Clerk

    Clerk Забанен

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

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Clerk Эта тоже может мониторить натив, надо только базу включить, в релиз не включена. Можешь дать код внедрения не через CreateRemoteThead ?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Rustem
    У меня нет подходящего для загрузки модуля кода, я ведь всегда пикод инжектил. Но в принципе можно собрать, нужно подумать..
     
  8. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Clerk А если пикод будет грузить длл?
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Rustem
    Вся проблема в том, как загрузится чтобы минимум следов оставить. Наверно легче уже свой загрузчик сделоть..
    Если классическим способом загружаться:
    > Создаём процесс с остановленным потоком.
    > Изменяем в контексте потока регистр Eip на свой код, внедрённый в ап.
    Когда поток начнёт исполняться, он вначале по всем модулям пройдёт, они посчитают что всё окей, далее посредством NtContinue выполняется переход на BaseProcessStart(), последняя передаёт управление на адрес в регистре Eax.
    > Далее получит управление наш код, но он получает управление уже после того, как код приложения уже выполнен, а после этого уже бесполезно пыться скрыть загрузку.. Значит нужно загружаться есчо до вызова InitRoutine любого из модулей, кроме системны двух(ntdll и kernel32). Но тока это проблемно сделоть. При старте потока, пока он не вошёл в LdrInitializeThunk() не инициализирована ntdll, поэтому ничего загружать мы не можем. Если перехватить InitRoutine седующего модуля, который загрузится после ntdll это ничего нам не даст, мы тоже заюзать LdrLoadDll() не сможем, ибо загрузчик залочен, да и вообще рекурсия получится, которая не будет работать. Допустим если просто InitRoutine пропустить, то далее мы не сможем это нотификацию выполнить как следует(к примеру стековые фреймы будут отличаться, если вручную потом вызвать)..
    Вобщем пока у меня идей нет как беспалевно загрузиться.
     
  10. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    А чем плох старый добрый метод суспендтного запуска процесса с подменой регистра eax в контексте потока?
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flasher
    А тем плох, что есчо до вызова твоего Eax нотификация модулей исполняется.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flasher
    О_о так монитор твой вроде для натива был ?
    PS: Память дырявая .D
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Внутри LdrInitializeThunk обрабатываются TLS-колбеки exe-файла после всей необходимой инициализации.
    можно фейкануть их так, чтобы наш код подгрузил dll вручную.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    Тока нужно учесть что перед исполнением кода из модуля в таблицах загрузчика не должно быть записей о внедрённом модуле, гдадко всё не пройдёт наверно. Но это в простейшем случае. Например можно перечислить все модули просканив память и даже получить полное имя модуля имеея только адрес проекции. Ну и перехваты никак не скрыть, делоть недоступной для чтения страницы и мониторить исключения не пройдёт, это будет слишком медленно.
    Я только один вариант нормальный вижу - натив перехватывать и раскручивать стек.
     
  15. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Пришла тут мысль, загружать сам EXE в процесс, на практике не проверял)

    Но теоретически:
    1. Создаем процесс загрузчика, базовый адрес должен отличаться от 0x400000
    2. Загрузчик грузит внедряемую длл
    3. В процесс загрузчика грузим исследуемый ехе по своей родной базе
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    из PEB'а удалить и все.
    угу, можно перехватить, и раскручивать стек проверяя адреса возврата на принадлежность нашей функции.
     
  17. _tmp17628

    _tmp17628 New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2009
    Сообщения:
    144
    Вы чего, какой натив перехватывать? Это универсальный перехватчик экспортируемых из ДЛЛ функций. Лично я неоднократно использовал Kerberos для перехвата несистемных функций...
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    Что удолить, имеешь ввиду PEB.Ldr затереть ?
    В таком случае загрузчик работать больше не будет.
    _tmp17628
    Но самопроверки никто не отменял, элементарно проверить начало функции перед её вызовом. Нельзя забывать про установку точек останова на начало функции и обработку исключения с дальнейшим выполнением этой функции - как это мониторить ?
     
  19. _tmp17628

    _tmp17628 New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2009
    Сообщения:
    144
    Clerk
    Ну это если приложение сделано с защитами такого рода. В этом случае скорее всего лучше вручную ковырять под отладчиком.

    С другой стороны, как тогда мониторить функции, не сводящиеся к натив?
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    _tmp17628
    Обычно те, что сервисы не юзоют не прдставляют интереса, зачем понадобится мониторить скажем RtlInitAnsiString ?