Автоматизируем x64dbg. Как превратить отладчик в хакерский комбайн

Содержание статьи

  • Встроенный интерпретатор
  • История вопроса
  • Плагины
  • Автоматизация на Python
  • Внешняя автоматизация
  • Выводы

Ав­томати­зация 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

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *