перехват CreateProcessW рушит проводник windows 7

Тема в разделе "WASM.BEGINNERS", создана пользователем Postscripter, 19 май 2010.

  1. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Postscripter
    Костыль, то что ты сделал

    Это баг в библиотеке Ms-Rem'а, в те времена DEP еще не был распространен
    исправляется так:
    Код (Text):
    1. function HookCode(TargetProc, NewProc: pointer; var OldProc: pointer): Boolean;
    2. var
    3.   Address: dword;
    4.   OldProtect, OP: dword;
    5.   OldFunction: pointer;
    6.   Proc: pointer;
    7. begin
    8. StopThreads;
    9.   Result := False;
    10.   try
    11.     Proc := TargetProc;
    12.     //вычисляем адрес относительного (jmp near) перехода на новую функцию
    13.     Address := dword(NewProc) - dword(Proc) - 5;
    14.     VirtualProtect(Proc, 5, PAGE_EXECUTE_READWRITE, OldProtect);
    15.     //создаем буффер для true функции
    16.     GetMem(OldFunction, 255);
    17.  
    18.     //---------------------------------------------------------------
    19.        VirtualProtect(OldFunction, 255, PAGE_EXECUTE_READWRITE, OP); // Added by K10 (vs fucking DEP)
    20.     //---------------------------------------------------------------
    21.  
    22.     //копируем первые 4 байта функции
    23.     dword(OldFunction^) := dword(Proc);
    24.     byte(pointer(dword(OldFunction) + 4)^) := SaveOldFunction(Proc, pointer(dword(OldFunction) + 5));
    25.     //byte(pointer(dword(OldFunction) + 4)^) - длина сохраненного участка
    26.     byte(Proc^) := $e9; //устанавливаем переход
    27.     dword(pointer(dword(Proc) + 1)^) := Address;
    28.     VirtualProtect(Proc, 5, OldProtect, OldProtect);
    29.     OldProc := pointer(dword(OldFunction) + 5);
    30.   except
    31.     RunThreads;
    32.     Exit;
    33.   end;
    34. RunThreads;
    35. Result := True;
    36. end;
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    K10
    Что костыли, то это точно +1. Неужели такое есчо ктото юзает оО.
     
  3. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Помечает область памяти как код?? Где ж ты раньше был)
     
  4. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Тем кто пользует не обязательно знать что внутри! Главное - быстро, надежно
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Postscripter
    Не область памяти. Вообще всё криво и не правильно сделано. Могу обьяснить, но это будет в пустоту, с данным компилятором код работать нормально не может.)
     
  6. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Нет, главное - полезно.
     
  7. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Но что тут кривого? Перехват вызывается один раз, поэтому то что я сотворил будет работать правильно. Что не так? Обьясни, будь другом.
     
  8. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    И обзываться не нужно - сами с чего начинали? Хотя кажется догадываюсь - с asm...)
     
  9. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Я кстати когда включил dep - половина программ повылетало! В том числе неро, ace html редактор и переводчик. А вы говорите что у меня криво... Просто на вкус и цвет... Согласитесь, что взятие адреса процедуры происходит быстрее чем выделение памяти. Да и вообще, в условиях нехватки времени и полного отсутствия информации и опыта - и это не плохо! Тем более что все мысли сейчас - только о сессии, кодинг может и подождать)) Будем считать это временной заплаткой. К10 спасибо, клерк... обьяснений так и не последовало. Всё, я пошел спать, у нас третий час! Тему думаю можно закрыть...
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Postscripter
    Так а что вы от нас хотите ?
    Единственное что вы сказали это код ошибки и привели какойто страшный код. Тут не сборище гадалок товарищ. В добавок к этому тут дельфе не не приветствуется, даже противопоказано к использованию.
     
  11. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Вот эта запись - что означает?
     
  12. Clerk

    Clerk Забанен

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

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    То что я назвал сегмент или страницу областью памяти? Код по моему скромному мнению вполне годный, но если хочется покритиковать - добавьте конкретики. Пожалуйста.
     
  14. Postscripter

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    Ну вот К10 и написал как решить проблему. Если это где-то уже обсуждалось...
     
  15. Clerk

    Clerk Забанен

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

    Postscripter New Member

    Публикаций:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    63
    А почему так? Я по-другому не умею) Хорошо что вы не видели как я перехватывал запуск exe ДО написания библиотеки...
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Postscripter
    И как же ?
     
  18. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Clerk
    В легальных программах почему зло? Кто их там снимать будет?

    Делфи конечно не асм, но как ЯВУ хороший...
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    K10
    Дельфе отвратительный скрипт и компилятор.
    Любые изменения кодосекций не легальны. Патчгуард тому доказательство. Детекторы руткитов не разбираются что делает хэндлер, они могут лишь находить на него ссылки.
    Если уж решили изменять прологи функций, то делать нужно это должным образом. Когда в системе куча подобных "легальных" приложений, которые хотят поиметь одну и туже функу возникнут проблемы. Или когда есть работающие потоки в целевом процессе изменение прологов подобным образом это потенциальная причина краха.
     
  20. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Clerk
    Не знаю, что вы подразумеваете по словом "скрипт", (т.к. скрипт это интерпретируемые языки) но еще раз повторю, что как язык высокого уровня он хорош.

    Ну да, тольк что ПатчГуард...
    И раз такая пьянка, то и перехват CreateProcessW тоже нелегален. Легальны вобще только документированные механизмы.

    А как же остановка потоков, CMPXHG8B ?