Тотальная неудачница и убийца жёстких дисков.
Итак, делаем так. У меня ещё из книжки Джефри Рихтера есть класс, который автоматизирует подмену функций. Пишем библиотеку, которая будет этим заниматься. Потом пишем программу, которая устанавливает хук WH_GETMESSAGE (кажется так... как туго без Win32 SDK!!!), а потом отправляет WM_NULL главному окну клиента. Библиотека получает сообщение и активизируется. Можно как-нибудь снять хук, но чтобы библиотека осталась или же троянская будет через LoadLibrary() грузить ещё одну. Это надо чтобы хук не работал в других процессах - снижает производительность, особенно когда в системе куча всяких других неразумных программ, которые даже глобальные горячие клавиши обрабатывают хуками...
Короче, внедрили. Можно, кстати, запускать клиент "под отладчиком" (отладчиком будет наша программа) и так внедрять библиотеку. Не важно. Внедрили. Теперь с помощью класса будем искать все импорты Get*Time() из User32.DLL (или Kernel32.DLL???) и переписывать адреса. Также заменим адреса LoadLibrary[Ex]() и GetProcAddress(), чтобы перехватить обращения от новых библиотек и получение указателя на функции. Всё. А потом можно выводить модальный диалог с полями-членами структуры SYSTEM_TIME. Там много не надо. Правда, ошибки возможны с неправильным вводом... Но это ладно. Главное чтобы не удивить клиента, который никак не ожидает узнать от Windows, что сегодня 31 февраля ^_^
Есть, кстати, защита от отладчиков. Я столкнулась с ней, когда писала плагин для Where Is It. Плагин выполняется в адресном пространстве WII, а следовательно логично предположить, что если он не хочет работать нормально, то нужно запустить программу под отладчиком. И что? Функция DebugBreak() на x86 процессорах вызывает третье прерывание, которое система (или отладчик) перехватывает. Если отладчика нет, то это необработанное исключение. Ага. И вот запускаю я, и вдруг брикпоинт! От куда? Я нажимаю продолжить, на что программа мне задумчиво говорит, что не надо отладчиков...
Я начала разбираться... Я конечно Ассемблер не очень знаю, но смогла по логике вещей восстановить ход событий. Итак, мы делаем SEH фрэйм, в котором вызываем DebugBreak(). Если у нас нет отладчика, то возбуждается исключение, которое программа радостно ловит и идёт дальше. А если отладчик есть? Он ловит сам исключение, а после продолжения программа работает так, словно ничего и не было. И понимает, что это отладчик вмешался... Я даже такую функцию защиты от отладчика себе написала, но пока не использовала...
По идее нужно настроить отладчик так, чтобы он не отлавливал это исключение. Но я не смогла это сделать в MSDEV... Остаётся только спросить: на кой это нужно? Неужели настоящего хакера это остановит? Или автор считает, что так багов меньше будет? Нет, я считаю, что WII - это лучший каталогизатор, сама его юзаю. Но... Багов в нём.... Море. Обширное поле деятельности, так и спотыкаешься... И это ещё продают за деньги... Боюсь, что около тридцати американских рублей за штуку мало стимулируют автора на отлов существующих ошибок. Поймите меня правильно, я люблю эту программу, мне нравится, что за три версии она развилась так, что трудно поверить в это. Но я хочу чтобы в программе не было ошибок. Хотябы таких явных как перескок текста при переключении между элементами каталога...
Короче, внедрили. Можно, кстати, запускать клиент "под отладчиком" (отладчиком будет наша программа) и так внедрять библиотеку. Не важно. Внедрили. Теперь с помощью класса будем искать все импорты Get*Time() из User32.DLL (или Kernel32.DLL???) и переписывать адреса. Также заменим адреса LoadLibrary[Ex]() и GetProcAddress(), чтобы перехватить обращения от новых библиотек и получение указателя на функции. Всё. А потом можно выводить модальный диалог с полями-членами структуры SYSTEM_TIME. Там много не надо. Правда, ошибки возможны с неправильным вводом... Но это ладно. Главное чтобы не удивить клиента, который никак не ожидает узнать от Windows, что сегодня 31 февраля ^_^
Есть, кстати, защита от отладчиков. Я столкнулась с ней, когда писала плагин для Where Is It. Плагин выполняется в адресном пространстве WII, а следовательно логично предположить, что если он не хочет работать нормально, то нужно запустить программу под отладчиком. И что? Функция DebugBreak() на x86 процессорах вызывает третье прерывание, которое система (или отладчик) перехватывает. Если отладчика нет, то это необработанное исключение. Ага. И вот запускаю я, и вдруг брикпоинт! От куда? Я нажимаю продолжить, на что программа мне задумчиво говорит, что не надо отладчиков...
Я начала разбираться... Я конечно Ассемблер не очень знаю, но смогла по логике вещей восстановить ход событий. Итак, мы делаем SEH фрэйм, в котором вызываем DebugBreak(). Если у нас нет отладчика, то возбуждается исключение, которое программа радостно ловит и идёт дальше. А если отладчик есть? Он ловит сам исключение, а после продолжения программа работает так, словно ничего и не было. И понимает, что это отладчик вмешался... Я даже такую функцию защиты от отладчика себе написала, но пока не использовала...
По идее нужно настроить отладчик так, чтобы он не отлавливал это исключение. Но я не смогла это сделать в MSDEV... Остаётся только спросить: на кой это нужно? Неужели настоящего хакера это остановит? Или автор считает, что так багов меньше будет? Нет, я считаю, что WII - это лучший каталогизатор, сама его юзаю. Но... Багов в нём.... Море. Обширное поле деятельности, так и спотыкаешься... И это ещё продают за деньги... Боюсь, что около тридцати американских рублей за штуку мало стимулируют автора на отлов существующих ошибок. Поймите меня правильно, я люблю эту программу, мне нравится, что за три версии она развилась так, что трудно поверить в это. Но я хочу чтобы в программе не было ошибок. Хотябы таких явных как перескок текста при переключении между элементами каталога...