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

Discussion in 'WASM.WIN32' started by psu, Jun 8, 2007.

  1. leniviy

    leniviy New Member

    Blog Posts:
    0
    Joined:
    Apr 1, 2009
    Messages:
    11
    желательно после инициализации всех прилинкованных длл но до запуска всяких start/main/winmain.
     
  2. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    В таком случае перед выходом потока из спящего состояния загрузи в Eax указатель на свой код, прежде определив текущий(это BaseProcessStart), затем управление получит твой код, из него нужно сохранить контекст потока, подгрузить модуль, восстановить контекст и загрузить в Eax значение, которое было изначально там, после чего выполнить NtContinue.
     
  3. leniviy

    leniviy New Member

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

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    А не, туплю, перед обработкой апк(NtTestAlert) лоадер разлочивается, не должно виснуть. Как по мне, так ерунда это всё, накой нужно грузить kernel32, если загрузчик её сам грузит.
     
  5. leniviy

    leniviy New Member

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

    Clerk Забанен

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

    Nouzui New Member

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

    leniviy New Member

    Blog Posts:
    0
    Joined:
    Apr 1, 2009
    Messages:
    11
    Вроде получилось.
    Для запуска кода, который подгружает dll меняю CONTEXT.Eax, как посоветовал Clerk
    Для сплайсинга использую detours9xmod
    Глюков в Тотале/ie пока не видно
     
  9. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    leniviy
    Чтото не пойму, а сплайсинг зачем нужен ?
     
  10. leniviy

    leniviy New Member

    Blog Posts:
    0
    Joined:
    Apr 1, 2009
    Messages:
    11
    Сплайсинг CreateProcessA и CreateProcessW, чтобы всё дерево процессов подгружало мою dll
     
  11. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Хм.. Может в csrss нотификатор на создание процессов поставить ?
     
  12. z0mailbox

    z0mailbox z0

    Blog Posts:
    0
    Joined:
    Feb 3, 2005
    Messages:
    635
    Location:
    Russia СПБ
    leniviy
    это всё врапперы над CreateProcessInternalW - вот его и надо сплайсить
     
  13. leniviy

    leniviy New Member

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

    l_inc New Member

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

    Clerk Забанен

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

    l_inc New Member

    Blog Posts:
    0
    Joined:
    Sep 29, 2005
    Messages:
    2,566
    Clerk
    Похоже слово "читал" задело неслабо. :)
    P.S. Кстати, если речь идёт о совместимости, то лучше увидеть один раз в более-менее официальной документации, чем сотню лоадеров отреверсить.
     
  17. Nouzui

    Nouzui New Member

    Blog Posts:
    0
    Joined:
    Nov 17, 2006
    Messages:
    856
    Ни о какой совместимости тут и речи не идет. Просто особенность реализации для ряда осек линейки nt
     
  18. leniviy

    leniviy New Member

    Blog Posts:
    0
    Joined:
    Apr 1, 2009
    Messages:
    11
    Я это и спрашивал.