Найти в Дзене
osieman

Ассемблерные команды или как пользоваться Cheat Engine, x64dbg и IDA Pro

Оглавление

Дочитай до конца и ты сможешь взломать любой софт. Ну.. или нет..

↓↓↓ В конце статьи есть видео формат ↓↓↓

Сегодня я постараюсь собрать самый полный гайд по инструментам, которые помогут тебе изучить, как работает исполняемый *.exe файл изнутри.

О чем собственно речь?! Любая программа, которую ты запускаешь на своем ПК или смартфоне является машинным кодом, который состоит из 0-ей и 1-иц. И если процессор спокойно живет с этим, то человеку прочитать такое очень сложно. Для ускорения написания программ много лет назад люди изобрели язык программирования, который называется ассемблер.

Но человекам этого было мало и ассемблер казался им все еще сложным.. Потому было придумано множество других
C, C++, Java, C#, Python и прочее. Но все они в разной степени переводятся в ассемблер, а потом ассемблер в процессорные команды.. В целом это и все, что нужно знать об этой чехарде..

Разные программы могут отличаться разной степенью виртуализации, но в момент запуска.. Они все выгружаются в оперативную память и там.. Они все одинаковые.

Самым доступным, для новичка, способом произвести насильственные дествия над кодом программы, является патч в райнтайме. То есть, мы пишем еще одну программу, которая ищет участок в памяти и меняет в нем код на тот, что нужен нам. Этот способ позволяет избежать различных защит, которые предпринимают авторы софта, поскольку в памяти все обнажено.

Итак, как мы выяснили, программа - это цифры, а именно нули и единицы. Так как же нам их прочитать?

Перевод машинного кода в человекочитаемый ассемблер называется дизассемблированием и для ОС Windows имеется 3 популярных программных решения x64dbg, IDA и Cheat Engine.

Самым лучшым для новичка будет
Cheat Engine, в нем есть куча фукций облегчающих поиск и редактирование.

Далее идет
x64dbg, он является открытым, разрабатывается и поддерживается интузиастами из сообщества реверсеров, которое сосредоточено на Tuts4You.com.

IDA - коммерческий продукт, который является лидером, если Вы собираетесь серьезно работать в сфере кибербезопасности. Она отличается от выше упомянутых тем, что позволяет снять дамп из памяти и реверсить код статически, но это уже совсем другой уровень. Чем она будет полезна новичку, так это тем, что, отыскав нужный участок в одном из первых двух, в IDA мы сможем произвести декомпиляцию и посмотреть, как нужная нам функция выглядит на самом деле. Это потребуется, если Вы захотите вызвать ее из своей программы.

Итак, с места в карьер! Нужно запомнить основной список инструкций:

  1. ADD - складывет 2 значения
  2. MOV - перемещает значения
  3. AND - логическое "И"
  4. CMP - сравнивает на равенство
  5. INC - инкремент "++"
  6. JMP - переход по адресу
  7. OR - логическое "ИЛИ"
  8. POP - выталкнуть из стека
  9. PUSH - поместить в стек
  10. RET - возврат из процедуры

Все еще не понятно?! Самое главное запомнить всего 2: это CMP и JMP.

Инструкция JMP - инструкция независимого перехода, но у нее есть и собраться
JE/JZ и JNE/JNZ (E = EQUAL, Z = ZERO это одно и то же, просто в разных реализациях используют либо первое, либо второе). Условный переход полностью зависит от инструкции CMP. В зависимости от исхода сравнения, она переводит ZERO FLAG (далее ZF) в состояние 1 (вкл), либо 0 (выкл).

Название
ZERO FLAG проистекает из того, как происхоит сравнение CMP, она просто берет и вычетает одно значение из другого и если оно равно 0, то равенсво соблюдается.. Воот..

Этих флагов в процессоре, как у дурака фантиков, но для данного тутора нам больше не нужно..

Это 80% информации, которую нужно знать, если Вам нужно просто убрать какое-нибудь надоедливое окошко в программе.

Для тех, у кого уже очумели ручки, сделал подробный гайд в
гифках, как пользоваться Cheat Engine, x64dbg и IDA Pro version 7.7.220118

!!! Все картинки анимированы, нажми, чтобы увидеть в действии !!!

***

Как пользоваться Cheat Engine?!

1. Выбираем процесс.

-2

2. Открываем панель Memory View.

-3

3. На вкладке Tools жмем Code Filter.

-4

4. Тык From Disassemble, чтобы выгрузить все адреса процедур.

-5

5. Жмем Start, чтобы подключить дебаггер к процессу.

-6

6. После нужно поводить.. указателем по интерфейсу программы и нажать Has not been executed, чтобы исключить GUIовые процедуры.

-7

7. Жмем желаемую кнопку Войти, а после Has been executed, теперь у нас остались только те, которые отвечают за "нужные нам проверки в коде".

-8

8. Жмем по очереди в списке и ищем начало процедуры, оно почти всегда представляет собой 2 строки:

push ebp
mov ebp,esp

Правой кнопкой мыши, вызываем контекстное меню, ставим брикпоинт и пытаемся снова "ВОЙТИ", если брикпоинт не сработал, идем дальше по списку..

-9

9. Со следующей процедурой делаем то же самое.

-10

10. Остановившись на брикпоинте, жмем Step Over до первого условного jump (je/jne==jz/jnz) и меняем флаг ZF на противоположный, чтобы поверить, что будет, если условие не выполнится.

-11

11. Если это то, что нам нужно, жмем на строке jne дважды и меняем на je, можно закрыть Cheat Engine и пользоваться приложением.

-12

***

Как пользоваться x64dbg?!

1. На вкладке File жмем Attach to process, чтобы начать отладку.

-13

2. Далее ставим галочку в Options -> Preferences -> Events ==> Thread Exit, чтобы при выходе из нового треда, срабатывал брикпоинт. Потому, что MessageBox это модальное окно со своим тредом, при закрытии оно выходит в точку, откуда было вызвано, а именно в то место, где происходит "проверка".

-14

3. В окне Stack View крутим вниз, пока не увидим строку reverse_me.004B27B2 и жмем на нее.

-15

4. Так же, как и в Cheat Engine ищем начало процедур, оно будет выглядет так же. Ставим брикпоинт и пытаемся снова нажать кнопку "ВОЙТИ".

-16

5. Так же жмем Step Over до jne и меняем ZF, кликнув на него дважды. Запускаем процесс, чтобы проверить результат.

-17

6. Кликаем дважды на jne и меняем на je, чтобы инвертировать условие. И все готово.

-18

Как пользоваться IDA Pro version 7.7.2200118

1. Открыв IDA, жмем вкладку Debugger -> Select Debugger -> Local Windows Debugger. Далее там же Attach Process и выбираем наш в списке.

-19

2. Все та же вкладка Debugger -> Debugger options.. Ставим галочку на Suspend on thread start/exit. Чтобы создать точку останова, при выходе из MessageBox.

-20

3. Далее во время останова, жмем CTRL+F7 (Run till return == Запустить до первой инструкции ret). Делаем так до тех пор, пока не увидим .text в начале строки, это значит, что мы вышли в участок, где находится код, написанный автором программы, а не какой-то сторонней библиотеки от MS Windows и иже с ними..

-21

4. Ищем начало процедуры и ставим брикпоинт.

-22

5. Ставим брикпоинт, чтобы убедиться, что мы на верном пути, запускам программу и жмем "ВОЙТИ". Так же можем убрать галочку с Suspend on thread start/exit.

-23

6. Находим наш jne/jnz и через вкладку File -> Patch program меняем команду на противоположную, убрав 'n'.

-24

7. Получаем внеземное удовольствие от расширения сознания.

Чуть не забыл.. У меня есть телега :з ↓↓↓ Все файлы там ↓↓↓

-25