Перехватывать выполнение БОЛЬШОГО приложения после внедрения DLL
-
01-10-2019 - |
Вопрос
Я должен перехватить выполнение в очень большом приложении во многих местах.
Какие программы я могу использовать для этого?Какие методы существуют для решения этой проблемы?
Ручной реверс-инжиниринг и добавление хуков, возможно, не является оптимальным решением для этой проблемы, потому что приложение очень большое, и я думаю, что какая-то часть приложения может быть обновлена через некоторое время с некоторыми инструментами или передовыми практиками для решения этой проблемы я могу сделать это быстрее, кто-нибудь знает, как это сделать?
Кто-нибудь мне поможет?
Решение
поскольку часть с инструментами была рассмотрена, вот кое-что о техниках.
В зависимости от того, что именно вам нужно подключить и включена ли защита, существует несколько методов:
Исправление относительного вызова / jmp в виртуализированном двоичном коде:это самый простой, но и трудоемкий способ, если вы не можете автоматически найти все ссылки на функцию, это, вероятно, не сработает в данном случае из-за ваших критериев.
Подсекание IAT/EAT:это используется для импорта (IAT) и экспорта (EAT), отлично, если вы нацелены на известный импортированный / экспортированный набор функций API.хороший пример этого можно найти здесь или здесь
Горячий ремонт:Windows XP SP2 представила нечто, называемое "горячим исправлением" (используется для обновления системных функций в режиме реального времени), где все его функции (WinAPI) начинаются с 'mov edi, edi', позволяя выполнять относительный переход в свободное пространство, созданное над каждой функцией, подлежащей горячему исправлению (это тоже можно сделать).обычно это используется для программ, у которых есть контрольная сумма IAT или другие забавные формы защиты, более подробную информацию можно найти здесь и здесь
Расшифровка кода:захват потока выполнения путем размещения перенаправлений в произвольном пространстве кода.видишь здесь, здесь или здесь
Перенаправление VFT/COM:в основном перезаписывает записи в таблице виртуальных функций objects, что полезно для приложений на основе ООП / COM.видишь это
Существует множество сторонних библиотек, наиболее известными, вероятно, будут МИСС Объезды, можно также посмотреть на АПИХиджак или мини-крюковый двигатель.
Конечно, ничто не может заменить первоначальное нажатие, которое вам нужно будет выполнить с помощью такого отладчика, как ollydbg, но знание метода, который вы собираетесь использовать, может значительно сократить их время, потраченное на ковыряние
Другие советы
Некоторые подробности о том, что именно вам нужно сделать (напримеркак вы определяете, где делать перерыв) было бы неплохо.В зависимости от вашей ситуации, что-то вроде Булавка может сработать.
Я предлагаю использовать Крюк Deviare API.Это самый простой способ сделать то, что вам нужно.В нем есть несколько COM-объектов, которые вы можете использовать для подключения приложения из другого процесса.В своем процессе вы получаете полную информацию о параметрах и можете использовать ее на любом языке программирования (я использую C #, и это работает как по маслу).Если вам нужно перехватить registry API, я предлагаю использовать Deviare для отладки того, что вам нужно перехватить, но тогда вам придется создавать свои собственные перехваты, иначе вы обнаружите проблемы с производительностью.