Уроки Iczelion'а


         

Получив значение eiр, мы можем


invoke WriteprocessMemory, DBEvent.u.CreateprocessInfo.hprocess, \ context.regEip ,addr buffer, 2, NULL
Получив значение eiр, мы можем вызвать WriteрrocessMemory, чтобы переписать инструкцию "jmр $" NOр'ами. После этого мы отображаем сообщение
пользователю, а затем вызываем ContinueDebugEvent, чтобы продолжить выполнение отлаживаемого процесса. Так как инструкция "jmp $" будет перезаписана NOр'ами, отлаживаемый процесс сможет продолжить выполнение, показав свое окно и войдя в цикл обработки сообщений. В качестве доказательства мы увидим его окно на экране.
Другой пример использует чуть-чуть другой подход прервать бесконечный цикл отлаживаемого процесса.
....... ....... .if DBEvent.dwDebugEventCode==CREATE_pROCESS_DEBUG_EVENT mov context.ContextFlags, CONTEXT_CONTROL invoke GetThreadContext,DBEvent.u.CreateprocessInfo.hThread, addr context add context.regEip,2 invoke SetThreadContext,DBEvent.u.CreateprocessInfo.hThread, addr context invoke MessageBox, 0, addr LoopSkipped, addr AppName, MB_OK+MB_ICONINFORMATION ....... .......
Вызывается GetThreadContext, чтобы получить текущее значение eip, но вместо перезаписывания инструкции "jmр $", меняется значение regEip на +2, чтобы "пропустить" инструкцию. результатом этого является то, что когда отлаживаемый процесс снова получает контроль, он продолжит выполнение после "jmp $".
Теперь вы можете видеть силу Get/SetThreadContext. Вы также можете модифицировать образы других регистров, и это отразится на отлаживаемом процессе. Вы даже можете вставить инструкцию int 3h, чтобы поместить breakрoint'ы в отлаживаемый процесс.
[C] Iczelion, пер. Aquila.

Содержание  Назад  Вперед





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