Содержание статьи
Встроенный интерпретатор
Для быстрого решения повседневных задач в отладчик встроен простой скриптовый язык. Давай рассмотрим скрипт на нем, который будет распаковывать файл, накрытый 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
. Короткая запись удобна для управления отладчиком из встроенной консоли, расположенной снизу.

Готовый скрипт можно загрузить из текстового файла, а затем отдать на исполнение или запустить пошаговую отладку скрипта, нажимая 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
Первая команда — pause
— останавливает выполнение скрипта, после чего его необходимо запустить вручную, исполнение продолжится со следующей команды. Это удобно, когда от пользователя требуется выполнять действие, например ставить EIP на точку входа.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее