Ав­томати­зация 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
Ре­зуль­тат коман­ды 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

Пер­вая коман­да — pause — оста­нав­лива­ет выпол­нение скрип­та, пос­ле чего его необ­ходимо запус­тить вруч­ную, исполне­ние про­дол­жится со сле­дующей коман­ды. Это удоб­но, ког­да от поль­зовате­ля тре­бует­ся выпол­нять дей­ствие, нап­ример ста­вить EIP на точ­ку вхо­да.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии