Я сделал небольшое приложение для отладки, специально предназначенное для изменения защищенного исполняемого файла, при использовании приложения я могу выполнить отладку, приостановив процесс, затем вызвав DebugActiveProcessStop
, подключив к процессу x64dbg и возобновив его.
Цель, которую я отлаживаю, выполняет контрольную сумму для себя в 488 встроенных местах, с помощью моего приложения для отладки я делаю все точки останова с помощью поиска по шаблону байтов, когда при достижении точки останова я намерен установить аппаратную точку останова после команды контрольной суммы и затем отмените все мои модификации памяти. Когда достигается аппаратная точка останова, я читаю некоторые соответствующие регистры, сохраняю их в файле и патче, контрольная сумма которого всегда проходит без выполнения вычислений контрольной суммы при следующем вызове.
Приходит проблема: когда я вызываю ContinueDebugEvent
из моего отладчика, чтобы добраться до аппаратной точки останова, цель всегда падает после нескольких шагов с нарушением доступа (c0000005). Во время тестирования я обнаружил, что если я приостановлю процесс вместо вызова ContinueDebugEvent
, а затем передам отладку x64dbg и разрешу ей ContinueDebugEvent
, то цель будет работать нормально. Я отладил x64dbg с x64dbg, чтобы посмотреть, что он делает по-другому, и вызываемый им вызов имеет параметры, идентичные моим вызовам ContinueDebugEvent
, только processId, threadID и 10002 (DBG_CONTINUE)
Кто-нибудь знает, как / почему цель аварийно завершает работу, когда оба наших отладчика выполняют один и тот же вызов функции?