Внедрение dll в чужoй процесс

Тема в разделе "WASM.WIN32", создана пользователем Lex2029, 15 ноя 2007.

  1. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Всем привет.
    Читаю рихтера, разбираюсь с внедрением длл. Написал приложение Окно. Написал dll, которая получает хэндл этого окна, изменяет его положение и размеры, и заменяет процедуру обработки окна на свою.
    Вот код dll
    Код (Text):
    1. WndProc PROC hwnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    2.     .if uMsg==WM_MOVE
    3.         Invoke  MessageBox,0,offset szOk,offset szOk,MB_OK
    4.     .endif
    5.     Invoke  CallWindowProc,lpfnWndProcOld,hwnd,uMsg,wParam,lParam
    6.     ret
    7. WndProc1 ENDP
    8.  
    9. DoJob   PROC
    10.     Invoke  FindWindow,offset szClsName,NULL
    11.     mov myhwnd,eax
    12.     Invoke  MoveWindow,myhwnd,10,10,40,30,TRUE
    13.     Invoke  SetWindowLong,myhwnd,GWL_WNDPROC,offset WndProc
    14.     mov lpfnWndProcOld,eax
    15.     ret
    16. DoJob ENDP
    Написал exe, который внедряет эту длл в процесс окна.
    Написал правильно, потому что окно меняет положение и размер. Но как только, с окном происходит какое-нибудь событие, то сразу процесс окна совершает недопустимую операцию и закрывается.
    В чем может быть дело? Проц АМД Тюрон 64, 2 процессора. Windows vista, но я пишу как под 32битный.
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Lex2029
    Я не знаю, но может быть старую до замены ф-цию, тоже стоит вызывать?
     
  3. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Ну старая вызывается при создании окна уже. Я свою прогу внедрения после запускю.
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    уверен, что прога внедряецо в процесс-влоделец-окна?
     
  5. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Да, ибо передвигается оно после вот этих строк:
    Код (Text):
    1. Invoke  GetProcAddress,hLibModule,offset szFuncName
    2. mov lpDll,eax
    3. Invoke  VirtualAllocEx,hProcess,NULL,20,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE
    4. mov lpMem,eax
    5. Invoke  WriteProcessMemory,hProcess,lpMem,offset szMyDll,11,offset lpHz
    6. Invoke  CreateRemoteThread,hProcess,NULL,0,lpDll,lpMem,0,NULL
    А передвижение окна, и замена его WndProc'есса, происходит в одной процедуре в dll. Код которой я уже показывал.
     
  6. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    У меня ничего не получается :dntknw:
    Попробовал запустить тоже самое, на ХР пень 3, результат одинаковый. Окно переезжает, и при каком либо действии с ним, закрывается с ошибкой.
     
  7. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Lex2029
    Отладчик тебе поможет))
     
  8. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Как отладчик поможет мне узнать, что делает моя dll внедренная в другой процесс? Научите плиз
     
  9. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Народ, помогите плиз :) Я просто в панике!
    Выкладываю все, исходники, бинарники. Запуск таков: Запускаете window.exe, открывается окно. Запускаете prog.exe, Появляется MessBoxage с текстом window.exe, это значит, что процесс найден. После чего, идет загрузка библиотеки mydll.dll в window.exe. Потом, появится еще 1 MessageBox со словом Test, это значит, что dll загрузилась в процесс window, и начала выполняться, Ну это она и вызвала это окно Test. После чего окно должно переместиться в левый верх, стать немного прозрачным и заменить свой обработчик процесса! Все происходит нормально, но потом, при наведении мышки на окно, оно закрывается с ошибкой! Помогите кто нибудь! Плииз!
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    эмм. в олли есть в меню "фаел" пункт "attach", который позволяет прицепится к процессу
     
  11. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Как только это делаю, окно сразу виснет и все...
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Lex2029
    F9 после этого не забыл нажать?
     
  13. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Нет не забыл :)
    Кстати если научите этим пользоваться, будет круто.

    На счет моей програмки: Я супер ступил, и просрал из-за этого полтора дня :) Я в Dll в том месте, где она запускает этот DoJob, не поставил ret... Так обидно, аж плакать хочется :)
     
  14. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Ааааа, народ, ну помогите мне, умоляю!!! Я просто в шоке, я поменял имя точки входа в длл на DLLENTRY@12 и сделал выход из dll - ret 12, и все заработало, потом я стер Invoke MessageBox в одном месте, и все опять перестало работать :dntknw:((
    Посмотрите мой код, что в нем не так!! Очень прошу! Прикреплен чуть выше, я уже 2 дня страдаю :dntknw:(
     
  15. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    DllEntry нет, лоадер виснет, если не находит процесс... всё не так.
    прилагаю переработанный рабочий код.
    изучай его.
     
  16. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    !!!!!!!!! СПАСИБО! :))) Сейчас буду различия искать.
     
  17. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Круто, я вроде понял, только скажите еще, где прочитать про эту точку входа? Ну про параметры, которые ей передаются, и про то, в какие моменты она вызывается?
     
  18. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Снова Рихтер выручил! :) Клевая книга
     
  19. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Просто. Ставишь где нить в коде своей длл CCh и ловишь в айсе, где выпрыгнет, дальше трэйсишь. Это один из многих вариантов
     
  20. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Я обычно ставлю MessageBox и атачусь стедией к примеру, потом ставлю брейк где надо и жму ОК