Привіт.
З поверненням.
У цьому уроці я навчу вас, як видалити exe-файл.
Що ви маєте на увазі під вилученням exe-файлу?
Тож подивіться на цю програму.
Той самий, який ми робили на попередніх уроках.
Нуль один.
Привіт, колишній.
З попереднього уроку ви бачили, що є основна функція, яку я назвав тут основною, і у
вас є push EBP і закінчується вона ретардацією.
Отже, ось ця штука від цього місця до цього місця називається функцією.
Сама по собі функція.
А всередині цієї функції у вас є інші менші функції, такі як тут, тут функція, тут інша функція,
тут інша функція, тут інша функція, і так далі.
Але все це саме по собі також є функцією.
Отже, функція містить багато інших менших функцій всередині себе.
Отже, якщо ми хочемо використати xdebug для написання власної програми на мові асемблера, нам потрібно видалити ці
функції.
Видалити.
Зробіть його порожнім, щоб ми могли написати тут власний код.
Це і є сенс вилучення exe-файлу.
Отже, щоб видалити exe-файл, вам потрібно знати, де його видалити.
Зараз я покажу вам, як це зробити.
Тепер, push ebp завжди позначає початок функції.
RET позначає кінець функції, тому, якщо ви хочете використати функцію, ви повинні видовбати в потрібному місці.
Звідси не можна вирватися.
Якщо ви видовбаєте все це тут, то не залишиться жодної функції, якою ви могли б користуватися.
Отже, вам потрібно знайти функцію, яка починається з push EBP і закінчується ret, а потім очистити вміст
цієї функції.
І ви також не можете очистити вміст таким чином, тому що вам потрібні певні інструкції, які
готують функцію до використання.
Так, наприклад, після push EBP ви завжди повинні мати переміщення ESP до EBP.
І наприкінці, перед RET, також має бути відпустка.
Отже, це ви не можете видалити.
Ви можете видаляти тільки від цього місця до цього.
Це все, що ви можете видалити.
Ось чому вам потрібно знати, як видалити exe-файл.
Ви повинні знати, що вам потрібно мати цей функціональний пролог і функціональний епілог.
Отже, пролог функції - це початок функції.
Епілог функції - це кінець функції, і все, що тут знаходиться, ви можете використовувати безкоштовно.
Ви можете видалити тут будь-що і замінити його власною функцією з власними інструкціями.
Ось чому ми збираємося зробити це тут.
Якщо ви не розумієте значення Move ESP EBP, не хвилюйтеся.
Я поясню все це на наступних уроках, коли ми будемо просуватися далі.
Наразі я просто хочу показати вам, як розбити ваш файл на частини, щоб ви могли використати його для написання власного
коду збірки.
Гаразд, тож як його видовбати?
Тож ми можемо виділити все це тут і видалити все.
Гаразд.
Але ми не збираємося видаляти все.
Ми залишимо кілька корисних.
Наприклад.
Це дуже корисно.
Чому?
Тому що цей друкує новий рядок.
Дозвольте мені показати вам, якби я запустив це зараз.
Зробимо кроки ще раз.
Я просто запускаю його, і він потрапляє на наш брейк-пойнт.
Тепер, коли ви переступатимете через нього, він буде роздруковувати певні речі на екрані і тут чекатиме на
вас, щоб ви ввели число.
Тож давайте введемо число.
І тепер воно повертається сюди.
Продовжуємо переступати.
Гаразд.
Дивись уважно.
Отже, ти підійдеш до цієї лінії, Путчаре.
Тепер Putchar надрукує новий рядок, оскільки цей новий рядок є параметром для putchar.
Отже, коли я переступлю через нього, Putchar надрукує тут новий символ рядка, який є невидимим
рядком.
Таким чином, один рядок тут стає порожнім.
Чому це важливо?
Це важливо для того, щоб коли ви запускаєте програму, ви отримували акуратний вивід.
Тут виводиться ваш результат, за яким слідує порожній рядок.
А потім, коли ти переступаєш.
Ви друкуєте прес, будь-яка клавіша для продовження Так що ви можете бачити, що тут порожній рядок.
Отже, цей порожній рядок походить з цієї діаграми.
Ось чому ми не хочемо видаляти ці дві функції.
Ми не хочемо видаляти ці два рядки.
Отже, все, що ми видалимо, буде від цього місця до цього.
Ось так.
І ми зберігаємо всі ці кілька рядків внизу.
Гаразд, давайте спробуємо це зараз.
Отже, ви обираєте все від цього місця до цього.
Ми підтримуємо цей новий рядок і знову ставимо путчар, якщо ви не розумієте, в чому сенс усіх цих путчарів?
Не хвилюйся.
Я поясню все в курсі на наступних уроках в належний час.
Наразі я просто хочу показати вам, як слідувати програмі.
Отже, виділіть все від цього місця до цього, а потім клацніть правою кнопкою миші або перетягніть
мишею ось так до цього місця, а потім клацніть правою кнопкою миші на цьому місці і виберіть двійкову заливку без опцій.
Отже, коли ви натиснете заповнити NOP, він запитає вас, скільки байт ви хочете заповнити NOP.
Отже, 63.
Тож натисніть "ОК" і подивіться, що станеться.
Це буде NOP все до цього місця.
Тож його випорожнюють.
Все для тебе.
А дев'ять нулів - це опкод для NOP. NOP означає "без операції".
Це означає, що коли програма потрапить сюди, вона не запуститься взагалі.
Він не буде працювати взагалі.
Гаразд.
Дозвольте мені ще раз показати вам, що я маю на увазі.
Тож давайте перезапустимо програму.
Закрий це.
Тому що це.
Гаразд, тепер ми тут, і давайте ввімкнемо цю штуку.
Але перш ніж це станеться, давайте повторимо те, що ми робили раніше.
Виділіть все від цього до цього, а потім клацніть правою кнопкою миші.
І двійковий.
НІ Перш ніж
ви це зробите, зверніть увагу на те, що тут дуже багато байт.
Один, два, три, чотири, п'ять, шість, сім, вісім, дев'ять, десять, 11, 12, 13, 14, 15, 16, 17, 18 і так
далі.
Отже, скільки тут байт, які ви збираєтесь NOP?
Отже, досить багато байт.
Так.
Отже, ви замінюєте кожен з цих байтів на дев'ять нулів, тому що, як ви бачите, nop - це дев'ять нулів.
Таким чином, кожна з цих восьми трійок стає дев'ятьма нулями.
E4 стане 90, F0 перетвориться на дев'ять нулів і так далі.
Гаразд, давайте подивимося.
Давай зробимо це зараз.
Отже, клацніть правою кнопкою миші двійкову заливку з NOP, клацніть.
Отже, є 63 63 байти, які будуть зачеплені.
Це означає, що від цього місця до цього 63 байти.
Натисни "ОК".
І ось, 63 байти замінено на NOP дев'ять нулів.
Що ж таке NOP?
NOP означає "без операції".
Це означає, що коли команда надходить до NOP, вона нічого не робить.
Гаразд.
Давайте подивимось.
Я зараз переступлю.
Я збираюся запустити його.
Нехай він досягне нашої точки зупинки, і тепер у нас є вихідні дані.
Пересунь праворуч.
І коли я переступаю через це, воно виконує ці два.
Тепер, коли справа доходить до цього, коли я переступаю через дев'ять нулів, нічого не відбувається.
У цьому полягає сенс NOP.
NOP означає "без операції".
Отже, це спосіб для програмістів асемблера видалити або відключити код всередині самого exe-файлу, ввівши NOP, щоб він
продовжував виконуватися.
Нічого не відбувається.
Тобто сенс NOP просто порожній.
Там нічого немає.
Дев'ять нулів - це просто дев'ять нулів.
Ось так.
Тож ми можемо продовжувати так весь час, поки він не прийде сюди.
Тож нічого не відбувається.
Як бачите, немає жодного результату, взагалі нічого.
Отже, зараз ми перемістимо його до стеку.
Не хвилюйтеся, якщо ви не розумієте стек.
Я ще раз поясню вам у наступних статтях, коли ми будемо рухатися далі.
Гаразд, перекладіть це в стопку.
І тепер, коли ви викликаєте цю функцію, вона буде використовувати це для виведення порожнього рядка.
Гаразд, тепер він надрукував порожній рядок, але ви не побачите його, поки не зайдете в систему.
Перейдемо до системи.
Підійдіть ближче, і ви побачите, що там порожній рядок, який виходить від цього путчара.
Путчар означає "поставити характер", "поставити характер".
Новий рядок.
Гаразд, це і є значення NOP, і це те, як ви можете скоротити свою програму.
Отже, тепер, коли ви створили свою програму, свій exe-файл, вам потрібно зберегти його.
Так.
Вам потрібно зберегти нову версію програми Щоб зберегти нову версію програми, вам потрібно
виправити її.
Тож як це виправити?
Ви виправляєте його, перейшовши до файлу.
Натисніть patch file, і тут він покаже вам всі 63 байти, які збирається виправити, ці 63 байти
посилаються на все це.
Отже, коли ви натиснете кнопку patch file, програма запитає ім'я вашого вихідного файлу.
Тому ми збираємося дати йому нову назву.
Назвемо його нуль один.
Привіт.
Потім поставте -2 і натисніть "Зберегти".
Ми не хочемо переписувати оригінал.
Гаразд, натискаємо "Зберегти" і бачимо, що застосовано 63 патчі.
Тож тепер ми можемо закрити цю тему, і ми можемо закрити цю тему.
І тепер у нас є новий файл.
Ось новий файл 02 exe, і якщо ви його запустите, давайте закриємо цей.
Якщо ви запустите його зараз, ви побачите лише цей порожній рядок і натиснете Продовжити.
Натисни будь-яку клавішу.
Ось так.
Отже, ви створили порожнє місце.
Ви щойно видалили exe-файл і створили порожню програму, яку можна використовувати для написання власної збірки.
Гаразд, тепер давайте відкриємо його і подивимося, що всередині.
Отже, ми запустимо налагодження x32, відкриємо наш новий файл виправлень, прокрутимо його вниз і побачимо
там вашу вилущену програму.
Отже, тепер у вас є готова функція, яка починається звідси і закінчується ось тут.
І в межах цього регіону ви можете писати будь-який код, який захочете.
Будь-який асемблерний код, який ви хочете, і він буде виконуватися.
Отже, тепер у вас є шаблон.
Це шаблон, який ми будемо використовувати для програмування на асемблері.
Отже, відтепер ми будемо використовувати цей файл для написання нашого асемблерного коду під час вивчення програмування на асемблері.
На цьому відео все.
Дякуємо за перегляд.