x64dbg: Пример работы дебаггера

Вчера наткнулся на статью, в которой описывался один из способов применения дебаггера x64dbg.
Естественно, для профи это уже пройденный этап, но новичкам может будет интересно. Это не совсем перевод статьи, а скорее заметка для меня (я же не профи :) )
1. Конфигурация
OptionsPreferencesEvents:

x64dbg: Пример работы дебаггера

System Breakpoint: When loading a new process, the will cause x64dbg to break in the system function which initializes the application you are attempting to debug.

TLS Callbacks: The TLS Callback is a function which is called before the main application runs. This can set parameters or even be used by certain protectors to implement anti-debug technology. This allows you to break on this function.

Entry Breakpoint: This causes x64dbg to break on the Entry point on the application. For general debugging, this is the only breakpoint you will need to have checked.

DLL Entry: This will break on the entry point of any DLL which is loaded by the process you are debugging.

Thread Entry: This will break on the first instruction of any new thread initialized by the current process.

Attach Breakpoint: When this is checked, it will cause x64dbg to break in the DbgUiRemoteBreakin function when attaching to an active process. If unchecked, it will attach without suspending the process.

DLL Load/DLL Unload: This will break in the system function when a new library(DLL) is loaded into or unloaded from the active process. The DLL Load breakpoint occurs before any of its code is executed.

Thread Start/Thread End: This allows us to break in system when our debugged application initializes or terminates a thread.

2. Скачиваем файл sample.exe (он в архиве SampleApp_bin.zip)
3. Открываем этот файл в x64dbg. Это можно сделать через FileOpen, либо просто перетащить файл в окно программы:
x64dbg: Пример работы дебаггера

Отдельно отмечу, что если приложение 32-бита, то нужно запускать x32dbg.exe, иначе дебаггер не увидит процесс! В этом случае в строке статуса будет выведено предупреждение:
«Use x32dbg to debug this file!»

4. Нажимаем F9 чтобы возобновить отладку, появляется окно программы, куда мы вводим любой пароль и нажимаем кнопку «Check»:
x64dbg: Пример работы дебаггера
5. Пароль «123456» оказался неверным, поэтому появилось сообщение об ошибке «Authentication Failed. Invalid Password!»
6. Теперь, когда мы знаем текст сообщения об ошибке, можно попробовать найти ссылку на эту строку. Для этого нажимаем в окне вкладки CPU правую кнопку мышки и выбираем Search forCurrent RegionString references
7. Откроется список адресов на все строковые ссылки используемые в программе. Используя фильтр, можно быстро найти искомую строку:

Authentication Failed. Invalid Password
В файле примера Sample.exe была внесена ошибка (сознательно или нет, не важно), поэтому нужно искать такую строку:

Authentication Failed. Invaild Password!

 

x64dbg: Пример работы дебаггера
8. Сделаем на ней двойной щелчок мышкой, так мы перейдем на тот фрагмент кода, где эта строка используется:
x64dbg: Пример работы дебаггера
9. На скриншоте выше видна красная пунктирная стрелочка, которая указывает на тот участок, где происходило сравнение результатов и дальнейший вызов окна с сообщением о неверном пароле.
10. Клавишей F2 ставим точку останова (breakpoint) на начало функции, которая проверяет пароль:
x64dbg: Пример работы дебаггера
11. Сначала она пропускает пароль через хэширующий алгоритм, а потом сравнивает результаты с сохраненным в программе значением.
x64dbg: Пример работы дебаггера

Здесь значение переменной отображено в строке комментария. Комментарии заполняются автоматически после того, как программа остановилась на точке останова. Дополнительно можно вызвать анализатор кода Ctrl+A .
После чего можно скопировать нужно значение из комментария (открывается клавишей ; )

 

12. Чтобы проверить, какой именно алгоритм хэширования был использован, можно воспользоваться утилитой Hashing Utility 2.0. Нужно ее запустить и ввести там то значение, которое мы вводили ранее: «123456»:
x64dbg: Пример работы дебаггера
13. Результатом хэширования будет строка «E10ADC3949BA59ABBE56E057F20F883E», получается, что алгоритм хэширования в программе использует MD5.
Значит перебирать оригинальный пароль нет смысла, но можно изменить инструкции так, чтобы принимался любой пароль. В участке кода выше оба хэша сравниваются. Если они совпадают, то программа сообщает, что пароль верный. Если нет, то говорит, что пароль неверный. Это значит, если мы заменим инструкцию следующего шага, то все время будет появляться сообщение о правильном пароле, независимо от того так это или нет. В x64dbg нам достаточно переместить курсор на нужную инструкцию и нажать клавишу Пробел, затем сменить адрес на новый:
x64dbg: Пример работы дебаггера
13. В обычной ситуации, если пароль неверный, произошел бы переход на адрес 59EA68, но мы его поменяли на 59EA5A, поэтому, независимо от того, правильный пароль мы ввели или нет, все время будет сообщение о верном пароле. Нажав на «ОК» изменения записались в память. Теперь можно запустить выполнение программы заново. В результате мы получим сообщение о том, что пароль верный. Действия пункта 13 работают только до тех пор, пока мы не перезапустим приложение, потом все изменения пропадают.
14. Чтобы сделать изменения перманентными, нужно нажать на значок заплатки (пластыря) под главным меню:
x64dbg: Пример работы дебаггера
15. Сохраняем пропатченый файл под новым именем, запускаем его и вводим любой пароль:
x64dbg: Пример работы дебаггера



*. Если выделить адрес 59EA4A, нажать на нем ПКМ и выбрать Follow in Dump -> Address: 59EAF8 (В последних версиях x64dbg этот пункт будет другим: Follow in DumpConstant: sample.000000000059EAF8), то в нижней части x64dbg можно будет выделить 32 символа ASCII и нажать Ctrl+E , после чего откроется окно, в котором можно будет скопировать UNICODE-строку
10db8e415b857a61e18ef5d4db8e4f38:
x64dbg: Пример работы дебаггера
Ее можно вставить в окно поиска на сайте md5hashing.net (Раздел Reverse md5 decoder). В результате мы узнаем, что зашифрованный пароль был ba321c

Открыл заметку с примером взлома тёмной темы в Unity. Уже не помню, какая именно это была версия, скорее всего Unity 5.6.7f1, поэтому скриншоты могут отличаться. Хотя разница будет не очень большая. Если будут вопросы, пишите в комментариях.