Привіт і ласкаво просимо назад. У цьому практичному
занятті ми спробуємо зробити це у x64dbg.
Отже, я вже закодував це і зберіг файл як 79_msvcrt. exe.
Тож, як завжди, ви маєте спланувати, де ви хочете розмістити свою пам'ять.
Тож тут це константа.
Тож він має бути в сегменті даних.
Перейдіть на Карту пам'яті.
Натисніть на дані, і ви побачите, що я вже зашифрував цей рядок.
А потім функція strlen має бути отримана з вашого msvcrt.
Тож вам варто піти до "Символів".
Перейдіть до msvcrt тут, а потім виберіть strlen.
А потім там дається strlen.
Просто скопіюйте це і помістіть у свій, ось тут.
Коли ви кодуєте його, він повинен помістити ваш strlen ось сюди.
І тоді printf - це те саме.
Просто перейдіть у розділ "Символи" і знайдіть printf.
А потім прокрутіть вниз і знайдіть адресу printf.
Просто скопіюйте цю адресу та вставте її сюди.
Тоді ExitProcess - це те саме, з тією лише
різницею, що ви маєте вибрати kernel32 і шукати ExitProcess, як ми робили раніше.
Отже, ми ставимо точку зупинки тут і біжимо до точки зупинки, а потім переступаємо через неї.
Отже, ми притискаємо нитку до стопки.
А тепер він викличе printf.
Він буде розтягнутий.
Вибач.
Це помилка.
Стрендж.
Давай це виправимо. Стрендж.
strlen - ця адреса.
Отже, ми копіюємо цю адресу.
І це треба підкреслити.
Тепер ти бачиш, що це правильно. Стрендж.
Тепер ми переступаємо через strlen, який називається довжиною рядка, і зберігаємо його в -.
Кожна функція повертає результат в -, і в цьому випадку результатом є D, що є шістнадцятковим числом 13.
Отже, у цьому рядку 13 символів, включаючи пробіл.
Після цього ми повинні очистити стек, тому що ми виштовхнули параметр до стеку, а це чотири байти,
DWORD.
Отже, ми додаємо чотири до -, тому що один раз, кожен раз, коли ми натискаємо, це чотири байти.
Тож вам доведеться очистити його, додавши чотири.
Далі ми задамо параметри для printf.
Отже, ми натискаємо -, і - - це результат, який виходить з strlen.
Тож результат насправді 13.
Отже, ми виштовхуємо цей результат у стек.
Тож давайте переступимо через це зараз.
Отже, зараз ви бачите 13 у стосі.
Тепер ми виштовхнемо цей рядок формату у стек.
Цей рядок формату також знаходиться у карті пам'яті, ось тут, у сегменті даних.
Це рядок формату.
Тепер зверніть увагу, що тут є символи 0D 0A, які не можна друкувати.
Але вони позначають переведення рядка з поверненням каретки, тому що ми хочемо, щоб після виведення результату дисплей
переходив на новий рядок.
Інший спосіб позначення - зворотна коса риска r, зворотна коса риска n: переведення рядка з поверненням каретки.
Отже, код повернення каретки - 0D, а код переведення рядка, нового рядка - 0A.
Після цього ви переступаєте через нього, щоб підштовхнути його до штабеля.
Отже, рядок формату виштовхується до стеку.
А тепер ми викличемо printf, щоб вивести результат на екран.
Дивіться, що станеться, коли я переступлю.
І якщо ви повернетесь сюди зараз, то побачите результат: strlen дорівнює 13.
Далі ми очистимо стек, тому що ми виштовхнули до нього два параметри.
Отже, тут два слова DWORD.
Отже, чотири байти плюс чотири байти буде вісім байт.
Отже, нам потрібно додати вісім до - в стеку.
Тепер ми збираємося натиснути нуль для ExitProcess, що означає, що помилки немає.
Тож ми натискаємо нуль.
А потім ми викликаємо це, і програма завершує роботу.
Отже, ось як ми можемо запустити це всередині x64dbg.
Це все для цього відео.
Дякуємо за перегляд.