Перехватить выполнение БОЛЬШОГО приложения после внедрения DLL - PullRequest
1 голос
/ 09 сентября 2010

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 21 сентября 2010

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

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

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

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

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

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

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

Существует множество сторонних библиотек, наиболее известными из которых могут быть MS Detours , также можно посмотреть APIHijack или движок мини-хука .

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

1 голос
/ 19 сентября 2010

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

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

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

0 голосов
/ 18 сентября 2010

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

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

...