Внедрение DLL ( странности )

Тема в разделе "WASM.WIN32", создана пользователем psu, 8 июн 2007.

  1. leniviy

    leniviy New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    11
    желательно после инициализации всех прилинкованных длл но до запуска всяких start/main/winmain.
     
  2. Clerk

    Clerk Забанен

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

    leniviy New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    11
    имхо, это то же самое, что использовать QueueUserAPC(), только сложнее. Я же говорил, что даже LoadLibrary("kernel32.dll") в начале потока может вывалиться, а процесс после этого уже поломанный. Мне кажется (но ещё надо будет проверить), что этот же поток инициализирует статически прилинкованные длл, а потом запускает WinMain.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    А не, туплю, перед обработкой апк(NtTestAlert) лоадер разлочивается, не должно виснуть. Как по мне, так ерунда это всё, накой нужно грузить kernel32, если загрузчик её сам грузит.
     
  5. leniviy

    leniviy New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    11
    у меня сначала вываливалось LoadLibrary("моя длл"), я подумал, что ошибка где-то в ней и решил проверить с kernel32, но всё равно валится. Всё это копание в грязи. Надо всё-таки подменить точку входа. Так надёжнее.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Насчёт точки входа я уже сказал #22. А на счёт того, что через апк падает - нужно не в небо пальцам тыкать, а на матчасть опираться. Существует определённая модель вызова и требования к APC.
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    leniviy
    сплайсил бы ты лучше из порождающего процесса - WriteProcessMemory, а остальная инициализация при первом вызове хука
     
  8. leniviy

    leniviy New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    11
    Вроде получилось.
    Для запуска кода, который подгружает dll меняю CONTEXT.Eax, как посоветовал Clerk
    Для сплайсинга использую detours9xmod
    Глюков в Тотале/ie пока не видно
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    leniviy
    Чтото не пойму, а сплайсинг зачем нужен ?
     
  10. leniviy

    leniviy New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    11
    Сплайсинг CreateProcessA и CreateProcessW, чтобы всё дерево процессов подгружало мою dll
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Хм.. Может в csrss нотификатор на создание процессов поставить ?
     
  12. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    leniviy
    это всё врапперы над CreateProcessInternalW - вот его и надо сплайсить
     
  13. leniviy

    leniviy New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    11
    Под Win98 у спящего нового треда на threadproc указывает не eax, а dword ptr [esp+60]
    Под Vista64 32битные запускаются, iexplore нет - видимо 64битный
    Clerk, где ты читал про Eax? Хочу больше узнать о совместимости.
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    leniviy
    Причём здесь спящий новый поток и threadproc? В eax находится указатель на точку входа в PE в момент создания первичного потока. После проведения инициализации управление передаётся по адресу, который был в eax.
    Прочесть можно хотя бы у Неббета.
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    leniviy
    Нуб. Сурцы, дебаггер. Не сравнивай себя с некоторыми товарищами тут - то что для тебя иной мир, для меня как два пальца абасцать, задолбали..
    Хуле там думать. Я лоадер тысячи раз дебажил. Что тебе мешает сделать тоже ?
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Похоже слово "читал" задело неслабо. :)
    P.S. Кстати, если речь идёт о совместимости, то лучше увидеть один раз в более-менее официальной документации, чем сотню лоадеров отреверсить.
     
  17. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Ни о какой совместимости тут и речи не идет. Просто особенность реализации для ряда осек линейки nt
     
  18. leniviy

    leniviy New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    11
    Я это и спрашивал.