Методы шпионажа / взлома API Windows - PullRequest
7 голосов
/ 18 сентября 2008

Я заинтересован в использовании шпионажа / перехвата API для реализации некоторых основных функций проекта, над которым я работаю. Это было упомянуто и в этом вопросе , но на самом деле это было не по теме, поэтому я подумал, что для этого было бы лучше с собственным вопросом.,

Я бы хотел собрать как можно больше информации об этом, о различных методах / библиотеках ( MS Detours , IAT patching ) или других предложениях.

Кроме того, было бы особенно интересно узнать, есть ли у кого-то реальный производственный опыт использования таких методов - можно ли сделать их достаточно стабильными для производственного кода или это строго методика исследования? Работает ли он правильно на нескольких версиях Windows? Насколько это подвержено ошибкам?

Личный опыт и внешние ссылки приветствуются.

Ответы [ 4 ]

3 голосов
/ 18 сентября 2008

Я реализовал syringe.dll (L-GPL) вместо MS Detours (нам не понравились лицензионные требования или огромная плата за поддержку x64), он работает фантастически хорошо, я перенес его с Win32 на Win64 мы используем в наших коммерческих приложениях уже около 2 лет.

Мы используем его по очень простым причинам, действительно для того, чтобы обеспечить рамку презентации для переупаковки, ребрендинга одного и того же скомпилированного приложения, как и для множества различных продуктов, мы выполняем общую фильтрацию и замену для строки, общего ресурса, панели инструментов и меню.

Будучи L-GPL, мы предоставляем источник, авторские права и т. Д. И только динамически связываемся с библиотекой.

2 голосов
/ 18 сентября 2008

Подключение стандартных функций WinAPI относительно безопасно, поскольку в ближайшем будущем они не сильно изменятся, если вообще будут, так как это делает Microsoft Лучше всего поддерживать WinAPI обратно совместимым между версиями. Я бы сказал, что стандартное перехватывание WinAPI обычно стабильно и безопасно.

Сцепление чего-либо еще, как и во внутренних частях целевой программы, - это отдельная история. Независимо от целевой программы, перехват сам по себе обычно является солидной практикой. Самым слабым звеном процесса обычно является нахождение правильного места, и держась за него.

Наименьшее изменение в приложении может и будет изменять адреса функций, не говоря уже о динамических библиотеках и т. Д.

В GameHacking, где перехватывание является стандартной практикой, это было в некоторой степени побеждено с помощью «sigscanning», методики, впервые разработанной LanceVorgin для несколько позорной Платы MPC. Он работает путем сканирования исполняемого изображения для статических частей функции, фактические байты инструкции, которые не изменятся, если только действие функции изменено. Sigscanning, очевидно, лучше, чем использование статических адресных таблиц, но в конечном итоге он также потерпит неудачу, когда целевое приложение будет достаточно изменено.

Пример реализации sigscanning в c ++ можно найти здесь .

1 голос
/ 24 декабря 2010

Многие люди забывают, что Windows dll скомпилированы как горячие исправления ( MSDN ).

Горячее исправление - лучший способ сделать обход WinAPI, поскольку он чистый и простой, и сохраняет оригинальную функцию, то есть не нужно использовать встроенную сборку, только слегка отрегулированные указатели функций.

Небольшое руководство по горячему исправлению можно найти здесь .

1 голос
/ 18 сентября 2008

Я уже несколько лет использую стандартную технику перехвата IAT, и она хорошо работает, была удобной и стабильной и была перенесена на x64 без проблем. Основные проблемы, с которыми я столкнулся, были в большей степени связаны с тем, как я вначале вводил хуки, потребовалось немало времени, чтобы понять, как лучше всего приостановить управляемые процессы в «правильной» точке их запуска, чтобы внедрение был надежным и достаточно рано для меня. Мой инжектор использует API отладки Win32, и, хотя это облегчает приостановку неуправляемых процессов, потребовалось немало проб и ошибок, чтобы приостановить управляемые процессы в соответствующее время.

Я использовал IAT в основном для написания инструментов тестирования, у меня есть программа обнаружения тупиков, которая подробно описана здесь: http://www.lenholgate.com/blog/2006/04/deadlock-detection-tool-updates.html, управляющая программа GetTickCount (), которую можно скачать здесь http://www.lenholgate.com/blog/2006/04/tickshifter-v02.html и приложение для смены времени, которое все еще находится в стадии разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...