Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Автоматизация x64dbg позволит создавать собственные инструменты для типовых задач отладки, таких как распаковка файлов, поиск сигнатур, перехват или подмена на лету результатов работы функций и даже фаззинг в оперативной памяти! Давай посмотрим, какие есть способы сделать это и как ими пользоваться.
Для быстрого решения повседневных задач в отладчик встроен простой скриптовый язык. Давай рассмотрим скрипт на нем, который будет распаковывать файл, накрытый UPX — самым распространенным упаковщиком.
//start msg "upx (3.91) unpacker" msg "make sure you're at the entry point of the program before you continue" pause //clear breakpoints bc bphwc //script start step bphws csp,r erun bphwc //find oep jump find cip,"80E9" //some pattern cmp $result,0 je error //go to OEP bp $result+1 erun bc sti //finish script ret error: msg "didn't find oep jump" ret
Синтаксис говорит сам за себя: имя команды, за которым следует разделяемый запятыми набор аргументов. Комментарий идет после двух слешей. Строчки обрамляются двойными кавычками. Цифровые константы интерпретируются как шестнадцатеричные числа, то есть число 100
на самом деле значит 256
.
Одна и та же команда может иметь несколько имен, в длинной и короткой форме. Например, команда SetBPX
, устанавливающая точку останова, может быть записана как bp
. Короткая запись удобна для управления отладчиком из встроенной консоли, расположенной снизу.
Результат команды msg
Готовый скрипт можно загрузить из текстового файла, а затем отдать на исполнение или запустить пошаговую отладку скрипта, нажимая Tab для перехода на следующую строку.
Исполняем по одной команде за раз
Разберем, что делает скрипт, переписав команды в длинной форме:
pause //clear breakpoints DeleteBPX DeleteHardwareBreakpoint //script start StepOver SetHardwareBreakpoint csp,r erun DeleteHardwareBreakpoint //find oep jump find cip,"80E9" //some pattern cmp $result,0 je error //go to OEP SetBPX $result+1 erun DeleteBPX StepInto //finish script ret error: msg "didn't find oep jump" ret
www
Документация с полным описанием всех команд
Первая команда — pause
— останавливает выполнение скрипта, после чего его необходимо запустить вручную, исполнение продолжится со следующей команды. Это удобно, когда от пользователя требуется выполнять действие, например ставить EIP на точку входа.
Источник: xakep.ru