Привіт і ласкаво просимо.
У цьому уроці я покажу вам, як почати роботу з відладчиком x64dbg.
Тож, будь ласка, завантажте ці два файли.
Цей файл, який є zip-архівом, з розділу ресурсів, а потім розпакуйте його і помістіть в нову
папку під назвою Assembly-RE-Progs, що розшифровується як "Проекти зворотного проектування збірки".
Тож створіть цю папку, розархівуйте ці два файли і помістіть їх сюди, щоб ви могли завантажити
цей zip-файл.
Ці два файли будуть заархівовані в один файл. Завантажте з розділу ресурсів, розархівуйте і викладіть сюди,
пароль для розархівування - crackinglessons. com.
Тож після розархівування ви можете відкрити його за допомогою x64dbg.
Отже, тут є два x64dbg.
Один для 64-бітної, інший для 32-бітної.
Тому використовуйте 32-бітну версію.
Тож це саме те, що вам потрібно.
Отже, двічі клацніть на ньому зараз, а потім ось тут ви зможете відкрити файл. Перш ніж відкрити його, давайте просто запустимо його і
подивимося, що він
робить, . exe-файл.
Отже, вихідний код знаходиться тут.
Ви можете поглянути на вихідний код, відкривши його у будь-якому текстовому редакторі, наприклад, Блокноті або стандартному
Блокноті, який постачається з вашим комп'ютером.
І ви бачите, що це проста, нешкідлива програма.
У вас є цілочисельна головна функція.
Це директива препроцесора include, яка включає заголовний файл для stdio. h, який міститиме вашу стандартну бібліотеку вводу/виводу
для програми на C.
Усередині нього є цілочисельний оператор A, який створює змінну A для зберігання цілого числа, а потім виводить повідомлення:
"Введіть ціле число. Після цього він вводить
ціле число з вашого екрану. Потім ви вводите, і програма виводить "Ви ввели", а
потім ціле число, яке ви ввели.
А потім система призупиниться, чекаючи, поки ви натиснете будь-яку клавішу, перш ніж вона завершить роботу.
Тож давайте спочатку запустимо його і подивимось, що він робить.
Отже, двічі клацніть на ньому, і ви побачите, що воно надрукує повідомлення "Введіть ціле
число", яке надходить звідси.
Потім ви вводите будь-яке число, наприклад, 122.
І коли ви натиснете Enter, scanf візьме ці 122 і збереже їх у цій змінній A за допомогою оператора address-of,
а ви маєте вказати формат введення. Відсоток D означає, що ви вводите ціле
число.
Тож давайте натиснемо Enter, натиснемо Enter зараз
і подивимося, що станеться.
Після натискання клавіші Enter буде надруковано повідомлення "Ви ввели 122", яке надходить з цього рядка.
Отже, цей рядок виводить "Ви ввійшли. А ось формат
для змінної A.
Отже, ми знову використовуємо відсоток D, що означає ціле число, а A - це просто змінна A, яка зберігає
значення 122.
Тож тепер він друкує ось це і показує тут.
Після цього система призупинилася, як ви можете бачити, через цю функцію: system.
System - це функція, яка дозволяє запускати команди CMD всередині командного рядка.
Тож одна з них - "Пауза. Отже, "пауза" просто призупиняє
його і чекає, поки ви введете будь-яку клавішу.
Тепер, коли ви натискаєте Enter, він завершує роботу ось так.
Інший спосіб запустити цю програму - відкрити цей шлях у командному рядку.
Тож виділіть все це, а потім клацніть правою кнопкою миші, скопіюйте.
А потім перейдіть у нижній лівий кут, клацніть правою кнопкою миші, натисніть "Пошук" і знайдіть командний рядок: CMD.
І це саме те, що ви хочете.
Натисніть на нього, і ми змінимо директорію на цю директорію.
Отже, ви вводите "cd", що означає змінити каталог.
Натисніть пробіл і клацніть правою кнопкою миші, щоб вставити шлях, який ви скопіювали раніше.
Потім натисніть Enter, щоб змінити каталог.
Тепер ви бачите, що перебуваєте в цьому каталозі. Щоб переглянути вміст цього каталогу, введіть
команду "dir", яка означає список каталогів. Натисніть Enter, і ви побачите, що в
цій теці є два файли:
hello. І привіт. exe.
Тож якщо ви хочете запустити цю програму. exe, просто натисніть "01", тобто перші два символи імені файлу,
і натисніть клавішу Tab, а потім знову натисніть клавішу Tab, доки не отримаєте потрібний
вам файл.
Потім ви натискаєте Enter, і він запускається.
Він попросить вас ввести ціле число, і ви введете 122.
Натисніть Enter, і з'явиться повідомлення "Ви ввели 122. А тепер натисніть будь-яку клавішу, щоб
продовжити, і він завершить роботу.
Отже, ви можете виконати програму двома способами.
Гаразд.
Отже, давайте спробуємо зазирнути всередину x64dbg і подивимось, що там всередині.
Отже, як я вже згадував раніше, ваші "Параметри", "Уподобання" повинні бути наступними.
Встановлюється лише один прапорець: "Ввести точку зупинки. Ось так.
Всі інші не перевіряються.
А потім для графічного інтерфейсу переконайтеся, що "Режим масштабування графіка" позначено галочкою. Тут він встановлений за замовчуванням.
Ось і все.
Тож зараз ми відкриваємо домен . exe на робочому столі, у папці проектів, яка знаходиться у папці Assembly
RE Projects.
Натисніть на нього, щоб відкрити, і він завантажиться.
Отже, в першій колонці тут показана карта трамплінів.
Це карта всіх трамплінів.
Він буде позначений стрілкою.
Якщо одна інструкція переходить в інше місце, ви можете побачити стрілку.
Як бачите, тут червона стрілка.
А в другому стовпчику - адреса кожної інструкції.
У третьому стовпчику знаходиться опкод, або ваші низькорівневі двійкові інструкції, записані у шістнадцятковій системі числення.
Це фактично інструкції, які розуміє машина, але не читаються людиною.
Отже, кожна з цих інструкцій інтерпретується у форму, придатну для читання людиною, яка називається
мовою асемблера.
Отже, мова асемблера - це читабельна для людини форма цих двійкових інструкцій.
Насправді це 1010, але показані тут у шістнадцятковій формі.
Тому кожна інструкція має сенс.
Наприклад, повернення - C3, а потім штовхання EBP - 89 E5. 89 - це, ймовірно, push, E5 - це, ймовірно, EBP.
А потім виклик - це E8, а потім CFFFFFF - інструкція, адреса виклику.
Ось у цьому і є сенс усього цього.
Але зазвичай ми не розглядаємо це.
Ми будемо дивитися на це, тому що це читабельна для людини форма.
Але іноді нам потрібно поглянути на це, щоб порахувати, скільки байт використовується для кожної інструкції.
Наприклад, "ret" займає лише один байт: C3. А потім ось ця інструкція, давайте візьмемо
іншу.
Ця інструкція виклику займає один байт, два байти, три байти, чотири байти, п'ять байт.
А тут - інструкція зі стрибка.
Інструкція додавання тут займає один байт, два байти, три байти.
А потім інструкція віднімання займає один байт, два байти, три байти.
Тому кількість байт важлива, коли ви намагаєтеся змінити інструкцію.
Отже, пізніше я покажу вам, як змінювати ці інструкції, і саме тоді вам потрібно
буде порахувати кількість байт, які ви збираєтесь змінити, щоб змінити інструкцію.
Тому поки що просто зрозумійте значення всіх цих стовпчиків, особливо цього, цього і цього.
А тепер п'ята колонка - це ваші коментарі.
Тут ви можете вставляти коментарі, і деякі з них вставляються вашим x64dbg.
Як бачите, все це вставлено.
Це корисні коментарі.
Він підказує вам, що програма намагається зробити.
Ви також можете вставити власний коментар ось так.
Я вставив свій власний коментар, тому якщо ви хочете вставити свій власний коментар, просто натисніть
крапку з комою на клавіатурі, і ви відкриєте текстове поле для введення коментаря.
Просто введіть свій коментар тут, натисніть "Гаразд", і він буде вставлений туди.
Інший спосіб вставити коментар - перейти сюди, клацнути правою кнопкою миші і натиснути "Коментар", і ви побачите там клавішу
швидкого доступу у вигляді крапки з комою.
Тож натисніть на "Коментар", і ви знову можете вставити будь-який коментар, який захочете.
Натисніть
"Гаразд. "Тому коментарі корисні, щоб допомогти вам зрозуміти, що ви зрозуміли з
аналізу інструкцій.
Тож пам'ятайте, що це операційні коди, або машинні коди, або двійкові коди, або двійкові інструкції,
і це ваша мова асемблера.
Іноді інтерпретація буває неправильною.
Іноді, щоб зрозуміти сенс цих опкодів, x64dbg може неправильно їх інтерпретувати.
Пізніше я покажу вам кілька прикладів, коли він неправильно інтерпретує його просто для порядку, просто
за спробу розібратися в інструкціях, що там містяться.
Гаразд.
Отже, а потім, якщо захочеш... ви можете побачити тут, іноді він має червоний колір.
Червоний колір означає, що я вставив точку зупинки.
Це значення червоного кольору.
Щоб вставити точку зупинки, ви можете клацнути правою кнопкою миші, перейти до меню точки зупинки і натиснути "Перемикач", і він
увімкне або вимкне її відповідно.
Ще раз,
і це вмикається. Клацніть правою кнопкою миші на "Точку зупинки" ще раз і вимкніть її.
А клавіша швидкого доступу - F2.
Ось як ви його перемикаєте.
Крім того, ви можете натиснути F2, щоб увімкнути або вимкнути точку зупинки.
Отже, кожну точку зупинки, яку ви встановили, можна побачити, перейшовши на вкладку "Точка зупинки", і ви побачите,
що за цією адресою додано точку зупинки.
Отже, ця адреса тут посилається на цю адресу.
У цьому сенс всього цього, всіх цих колонок.
І тоді стан "Увімкнено. Якщо ви хочете вимкнути
його, клацніть правою кнопкою миші і виберіть "Вимкнути", і він стане вимкненим.
Якщо ви хочете видалити її, клацніть правою кнопкою миші і вилучіть, це повністю видалить точку зупинки.
Отже, щоб запустити вашу програму, ви просто натискаєте на цю кнопку "Виконати", і ваша програма буде запущена.
Як бачите, він тут працює.
"Введіть ціле число", а потім ви можете ввести будь-яке число: 1, 1, 2, 2, 2.
Якщо ви натиснете Enter, а на екрані з'явиться повідомлення "Ви ввели 122", натисніть будь-яку клавішу для продовження, і програма завершить
роботу.
Давай перезарядимо ще раз.
Тепер ви також можете здійснити пошук. Наприклад, ось тут, коли ви
запускаєте цю програму, ви бачите такий рядок: "Введіть ціле
число. Так.
Отже, ви можете шукати цей рядок тут.
Ви можете прокрутити вниз і подивитися на розділ коментарів тут і знайти рядок "Введіть ціле число. І ось, будь ласка.
І ось, будь ласка.
Бачиш?
"Введіть ціле число. А потім натиснути 122, натиснути
Enter, і з'явиться повідомлення "Ви ввели 122. "Ви ввели 122" приходить звідси, як ви можете
бачити.
Отже, у цьому стовпчику показано рядки, які зустрічаються всередині програми.
Інший спосіб пошуку рядків - виконати сам пошук.
Перезавантажимо програму ще раз, щоб знайти всі рядки у цій програмі.
Ви можете клацнути правою кнопкою миші в будь-якому місці цього простору, клацнути правою кнопкою миші, а потім прокрутити вниз,
вибрати "Пошук", "Поточний модуль", "Рядкові посилання" і натиснути Enter.
Він показує вам усі рядки, які знайшов у цій програмі, а потім ви хочете шукати певний рядок,
"Ви ввели. Іноді список
результатів буде дуже довгим, і ви можете звузити його, скориставшись вікном фільтра
тут.
Отже, у цьому вікні фільтра пошуку просто введіть потрібний рядок або частину рядка, який
ви шукаєте.
Наприклад, "Ви увійшли. Отже, ви бачите, що коли ви
вставляєте перші три символи рядка, він знайшов його,
і все.
А потім ви можете перейти безпосередньо до цієї локації, двічі клацнувши на адресу, і вона вас туди перенесе.
І ви можете бачити, що він знайшов його тут.
Ось як ви виконуєте пошук рядків у вашій програмі.
А праворуч знаходиться вікно вашого процесора, де показані ваші регістри.
Отже, як бачите, є регістри
EAX, EBX ECX, EDX, EBP, ESP, ESI, EDI, EIP.
Отже, це основні регістри для 32-бітних програм.
Також є реєстр прапорів. Найважливішим з них є нульовий прапорець, який вказує
на те, чи відбудеться певний стрибок чи ні, що ми розглянемо пізніше в курсі.
Нижче ми не так стурбовані.
У цьому курсі ми будемо ігнорувати це.
Отже, метою використання x64dbg у цьому курсі є написання власного асемблерного коду, модифікуючи наведені тут інструкції.
Тож це унікальний спосіб навчитися монтувати.
Традиційно мову асемблера вивчають за допомогою асемблера, а не відладчика.
Але в цьому курсі я хочу перейти одразу до відладчика, щоб ви могли навчитися реінжинірингу та модифікації
існуючого коду, написавши власну збірку, а не вчитися на асемблері.
Якщо ви вивчите мову асемблера, використовуючи асемблер, ви ніколи не навчитеся зворотному
проектуванню, тому що для того, щоб навчитися зворотному проектуванню, вам потрібні відладчик і дизасемблер.
Якщо ви використовуєте асемблер, такий як FASM або NASM, або будь-який інший асемблер, все, що ви вивчите - це мова
асемблера.
Ось так.
Ви не знатимете, як здійснювати реверс-інжиніринг, а також код, який ви пишете всередині асемблера, такого
як NASM або FASM, дещо відрізняється від коду, який ви напишете, коли модифікуєте мову асемблера всередині
існуючої програми. Це буде трохи інакше.
Тому для того, щоб вивчити мову асемблера з метою зворотної інженерії, я раджу вам: одразу ж використовуйте
відладчик для вивчення мови асемблера.
Саме тому ми використовуємо відладчик x64dbg для вивчення мови асемблера.
Отже, внизу ви бачите, що це ваша пам'ять.
Тож який би спогад ви не хотіли перевірити, ви можете подивитися його тут.
Отже, це пам'ять для програми, яка виконується.
Ви можете перейти в будь-яку точку оперативної пам'яті і подивитися, що там зберігається. У центрі - підсумок кожного
з цих дзвінків, кожної з цих інструкцій.
Отже, ви натискаєте
на це, і воно показує вам підсумок тут.
Натисніть
на нього, і він покаже вам підсумок тут.
Тут ви знайдете додаткову інформацію про різні частини інструкції.
А потім під цим вікном реєстру ви побачите стек.
Стек - це тимчасова область пам'яті, в якій тимчасово зберігаються параметри
функції для кожного її виклику. Наприклад, коли у вас є виклик функції тут, перед тим, як функція буде виконана,
всі функції будуть переміщені до стеку сюди.
Усі параметри функції для цього виклику буде переміщено до стеку, після чого буде виконано виклик.
Таким чином, щоразу, коли ви отримуєте виклик, він буде використовувати все, що є у стеку, щоб виконати свою функцію.
У цьому і полягає сенс стекового вікна.
Нижче - теж вікно штабеля, але з іншого боку. Тут він показує зміщення
від вказівника стека.
ESP тут є вказівником стеку.
ESP зберігає адресу розташування вершини стека.
Я поясню це пізніше.
Тоді як це вікно, також вікно стека, не показує вам у зручний для користувача
спосіб, як ось це. Тут показано зручний для користувача
спосіб, зміщення від вершини стека.
Тут
він просто показує вам сирий вигляд стека.
Отже, я думаю, що це все для цього вступного відео про те, як розібратися у різних
частинах вікна відладчика x64dbg.
Тому в наступному уроці я більш детально розгляну це питання, а також те, як насправді писати код і так далі.
На цьому відео все.
Дякуємо за перегляд.