З поверненням.
Зараз ми перейдемо до практичної частини. Ми збираємося ввести ці інструкції тут, у нашому x64dbg.
Отже, відкриваємо x64dbg.
А потім відкрийте файл шаблону.
Прокрутіть вниз і введіть ці інструкції.
Перший - хід -, нуль.
Потім рухайся
-, раз, потім рухайся -,
два, потім порівнюй -, -, а потім стрибай.
Отже, ми ще не знаємо, куди стрибати,
тому просто беремо довільну адресу, просто копіюємо будь-яку адресу навмання сюди.
І просто покладіть його першим.
Ми змінимо його пізніше.
Отже, тепер ми введемо JC,
потім адресу і вставимо її туди.
Але зверніть увагу, що відбувається, коли я натискаю "ОК".
x64dbg замінить JC на JB, що означає те саме, як я пояснював раніше.
Тож давайте рухатися далі.
INC-. Отже, наступна
інструкція, INC -, знову INC, і все готово.
Тепер ми можемо піти і змінити цю
адресу на цю, 401547.
Клацаємо правою кнопкою
миші, копіюємо адресу, повертаємося сюди і змінюємо цю адресу, вставляємо адресу, натискаємо "ОК".
Тепер просто зробіть паузу і перевірте, чи все ви ввели правильно.
Якщо ви все ввели правильно, ви можете зберегти цей файл.
Файл, патч, патч, патч і прокрутка
вниз, і давайте назвемо
це "CMP з п'ятьма тире". exe. Збережи.
Гаразд.
Тепер ви можете відкрити щойно збережений файл.
І поставте тут брейк-поінт.
Переконайтеся, що ви поставили точку зупинки, як я вже зробив.
Тепер ми можемо починати бігти.
Ми біжимо, і він потрапляє на наш брейк-пойнт.
Відійдіть, відійдіть.
Тепер він ініціалізує три регістри.
Відійдіть, відійдіть,
відійдіть.
Тепер ви помітили,
що - має одиницю, - дорівнює двом, а - дорівнює нулю.
Отже, в даному випадку, зараз він буде порівнювати - і -, і він зробить мінус.
Це означає, що знадобиться один мінус два, що призведе до перенесення,
встановлення прапорця перенесення.
Тож давайте переступимо через це і подивимося на це.
І дійсно, прапорець перенесення встановлено на одиницю.
Отже, оскільки прапорець перенесення встановлено в одиницю, стрибок відбудеться.
Отже, оскільки це фактично JC, переходимо, якщо переносимо, і перевіряємо прапорець перенесення. В даному випадку, оскільки прапорець
один, то він буде стрибати.
Тож вона перестрибне
сюди, а потім переступить через те, і тепер - вона одна.
Отже, у цьому випадку, якщо - менше, ніж -, то - буде дорівнювати одиниці.
Гаразд, тепер давайте перезавантажимо це.
І цього разу ми модифікуємо - і -, робимо їх однаковими.
Тож ми поставили собі за мету - стати такими ж, або
"давайте зробимо це".
- теж один.
Тож тепер тікай.
Переступи через ці три.
Отже, маємо один, один, нуль.
Тож зараз ми порівняємо - і -.
І оскільки вони рівні, прапорець перенесення буде обнулено.
Отже, переступаємо, і дійсно, прапорець перенесення дорівнює нулю.
Отже, цей JC або JB, як ви його називаєте, буде тестувати, шукати прапор для перенесення.
Якщо встановлено прапорець перенесення, то стрибати буде тільки він.
Але в цьому випадку прапорець для перенесення вільний, тому стрибок не відбудеться.
Замість цього він піде прямо і збільшить - на одиницю. Переступи, і тепер - це один, а потім він знову
зробить те ж саме, збільшиться
- ще на один, і
тепер - це два.
Отже, в кінцевому результаті, якщо - дорівнює -, то - буде дорівнювати двом.
Гаразд, давайте перезапустимо для останнього сценарію, де - більше, ніж -.
Тож давайте перезавантажимось зараз.
Цього разу ми змінимо - на число, яке більше за -.
Тож ми просто натискаємо Enter і змінюємо це значення на три.
Гаразд, давай переступимо.
Тікаймо.
А потім переступайте,
переступайте, переступайте, переступайте,
переступайте.
І тепер всі
наші три регістри ініціалізовані, і тепер - більше, ніж -.
Отже, коли ви порівнюєте - і -, ви берете три мінус два.
Це не призведе до перенесення, тому прапорець перенесення
буде знято.
Ви переступаєте поріг і помічаєте, що прапорець, як і очікувалося, знято.
Отже, коли JB перевіряє наявність прапорця перенесення, він побачить, що він очищений, і не буде стрибати.
Тож замість цього він буде йти прямо, збільшуючись на одиницю.
- стає одиницею, а потім збільшується
ще на одиницю, і так - тепер стає два.
Отже, в кінцевому результаті, якщо - більше, ніж -, то - буде дорівнювати двом.
Ось як працюють інструкції порівняння.
Порівняйте роботу інструкцій зі
стрибком перенесення,
JC, або стрибком нижче, JB.
На цьому відео все.
Дякуємо за перегляд.