Вчера наткнулся на статью, в которой описывался один из способов применения дебаггера x64dbg.
Естественно, для профи это уже пройденный этап, но новичкам может будет интересно. Это не совсем перевод статьи, а скорее заметка для меня (я же не профи :) )
1. Конфигурация
▶ ▶ :
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. Это можно сделать через ▶ , либо просто перетащить файл в окно программы:
«Use x32dbg to debug this file!»
4. Нажимаем
5. Пароль «123456» оказался неверным, поэтому появилось сообщение об ошибке «Authentication Failed. Invalid Password!»
6. Теперь, когда мы знаем текст сообщения об ошибке, можно попробовать найти ссылку на эту строку. Для этого нажимаем в окне вкладки CPU правую кнопку мышки и выбираем ▶ ▶
7. Откроется список адресов на все строковые ссылки используемые в программе. Используя фильтр, можно быстро найти искомую строку:
Authentication Failed. Invalid Password
Authentication Failed. Invaild Password!
8. Сделаем на ней двойной щелчок мышкой, так мы перейдем на тот фрагмент кода, где эта строка используется:
9. На скриншоте выше видна красная пунктирная стрелочка, которая указывает на тот участок, где происходило сравнение результатов и дальнейший вызов окна с сообщением о неверном пароле.
10. Клавишей
11. Сначала она пропускает пароль через хэширующий алгоритм, а потом сравнивает результаты с сохраненным в программе значением.
После чего можно скопировать нужно значение из комментария (открывается клавишей
12. Чтобы проверить, какой именно алгоритм хэширования был использован, можно воспользоваться утилитой Hashing Utility 2.0. Нужно ее запустить и ввести там то значение, которое мы вводили ранее: «123456»:
13. Результатом хэширования будет строка «E10ADC3949BA59ABBE56E057F20F883E», получается, что алгоритм хэширования в программе использует MD5.
Значит перебирать оригинальный пароль нет смысла, но можно изменить инструкции так, чтобы принимался любой пароль. В участке кода выше оба хэша сравниваются. Если они совпадают, то программа сообщает, что пароль верный. Если нет, то говорит, что пароль неверный. Это значит, если мы заменим инструкцию следующего шага, то все время будет появляться сообщение о правильном пароле, независимо от того так это или нет. В x64dbg нам достаточно переместить курсор на нужную инструкцию и нажать клавишу , затем сменить адрес на новый:
13. В обычной ситуации, если пароль неверный, произошел бы переход на адрес 59EA68, но мы его поменяли на 59EA5A, поэтому, независимо от того, правильный пароль мы ввели или нет, все время будет сообщение о верном пароле. Нажав на «ОК» изменения записались в память. Теперь можно запустить выполнение программы заново. В результате мы получим сообщение о том, что пароль верный. Действия пункта 13 работают только до тех пор, пока мы не перезапустим приложение, потом все изменения пропадают.
14. Чтобы сделать изменения перманентными, нужно нажать на значок заплатки (пластыря) под главным меню:
15. Сохраняем пропатченый файл под новым именем, запускаем его и вводим любой пароль:
*. Если выделить адрес 59EA4A, нажать на нем ПКМ и выбрать Follow in Dump -> Address: 59EAF8 (В последних версиях x64dbg этот пункт будет другим: ▶ ), то в нижней части x64dbg можно будет выделить 32 символа ASCII и нажать
10db8e415b857a61e18ef5d4db8e4f38:
Ее можно вставить в окно поиска на сайте md5hashing.net (Раздел ). В результате мы узнаем, что зашифрованный пароль был ba321c
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024