Перехватывать выполнение БОЛЬШОГО приложения после внедрения DLL

StackOverflow https://stackoverflow.com/questions/3673266

Вопрос

Я должен перехватить выполнение в очень большом приложении во многих местах.

Какие программы я могу использовать для этого?Какие методы существуют для решения этой проблемы?

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

Кто-нибудь мне поможет?

Это было полезно?

Решение

поскольку часть с инструментами была рассмотрена, вот кое-что о техниках.

В зависимости от того, что именно вам нужно подключить и включена ли защита, существует несколько методов:

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

  2. Подсекание IAT/EAT:это используется для импорта (IAT) и экспорта (EAT), отлично, если вы нацелены на известный импортированный / экспортированный набор функций API.хороший пример этого можно найти здесь или здесь

  3. Горячий ремонт:Windows XP SP2 представила нечто, называемое "горячим исправлением" (используется для обновления системных функций в режиме реального времени), где все его функции (WinAPI) начинаются с 'mov edi, edi', позволяя выполнять относительный переход в свободное пространство, созданное над каждой функцией, подлежащей горячему исправлению (это тоже можно сделать).обычно это используется для программ, у которых есть контрольная сумма IAT или другие забавные формы защиты, более подробную информацию можно найти здесь и здесь

  4. Расшифровка кода:захват потока выполнения путем размещения перенаправлений в произвольном пространстве кода.видишь здесь, здесь или здесь

  5. Перенаправление VFT/COM:в основном перезаписывает записи в таблице виртуальных функций objects, что полезно для приложений на основе ООП / COM.видишь это

Существует множество сторонних библиотек, наиболее известными, вероятно, будут МИСС Объезды, можно также посмотреть на АПИХиджак или мини-крюковый двигатель.

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

Другие советы

Некоторые подробности о том, что именно вам нужно сделать (напримеркак вы определяете, где делать перерыв) было бы неплохо.В зависимости от вашей ситуации, что-то вроде Булавка может сработать.

Я предлагаю использовать Крюк Deviare API.Это самый простой способ сделать то, что вам нужно.В нем есть несколько COM-объектов, которые вы можете использовать для подключения приложения из другого процесса.В своем процессе вы получаете полную информацию о параметрах и можете использовать ее на любом языке программирования (я использую C #, и это работает как по маслу).Если вам нужно перехватить registry API, я предлагаю использовать Deviare для отладки того, что вам нужно перехватить, но тогда вам придется создавать свои собственные перехваты, иначе вы обнаружите проблемы с производительностью.

Вы можете выполнить перехват API, если вы заинтересованы в перехвате вызовов методов.

Или используйте какой-нибудь дизассемблер, например softice или ollydbg или win32dasm.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top