Уроки по крекінгу

Введення в крекінг з нуля, використовуючи OllyDbg - Глава 11 [Рікардо Нарваха, пров. Aquila]

Добре, нам залишилося розглянути процесорні точки зупинки (hardware breakpoints), умовні точки зупину і message breakpoints. і після цього ми закінчимо з цією темою.

Процесорного точки зупину

Процесорні точки зупинки (hardware breakpoints, HBP) ​​- це можливість, яку надає процесором. Як це влаштовано насправді, я не знаю, але тим не менше ми можемо встановлювати їх, щоб програма, коли їх зустрічає, зупинялася і передавала управління.

Ми можемо встановити до 4 чотирьох HBP. на п'ятий Ollydbg попросить нас вказати, який з чотирьох вже встановлених прибрати.

Як завжди, для практики будемо використовувати крекмі CrueHead'а.

Уроки по крекінгу

Є три можливості: HBP ON EXECUTION. ON WRITE і ON ACCESS.

Якщо хочемо встановити HBP ON EXECUTION на 401013. відзначаємо рядок, натискаємо на праву кнопку миші і вибираємо BREAKPOINT-HARDWARE ON EXECUTION.

Уроки по крекінгу

Також можемо написати в командному рядку:

Після цього HBP встановлений.

Уроки по крекінгу

Уроки по крекінгу

Тут ми бачимо віконце з HBP. і якщо натиснемо FOLLOW. ми надамо в лістингу на тому рядку, де він був встановлений. За допомогою DELETE ми можемо його видалити.

Тепер натиснемо F9 для того, щоб почати виконання програми.

І зупинимося на 401013.

Як бачимо, він поводиться як звичайний BPX. якщо ж зробимо те ж, що робили і з BPX - напишемо MOV EAX, DWORD PTR DS: [401013] і запустимо, то побачимо, що код не змінився.

Змінимо EIP на 401000 за допомогою NEW ORIGIN HERE і натиснемо F7.

Уроки по крекінгу

Бачимо, що в EAX містяться E8 A6 04 00 (в зворотній формі, тому ми бачимо 00004A6E8), тобто ніяких змін в коді не було.

Якщо ми перезапустити Ollydbg, то побачимо, що HBP залишився встановленим.

Уроки по крекінгу

Прибираємо його і встановлюємо HBP на MessageBoxA таким же чином, як і BPX.

Тепер дивимося список HBP.

Уроки по крекінгу

Не будемо повторювати знову, але знаємо, що якщо запустимо програму і введемо користувача і пароль, і ми погодимося, то виконання зупиниться на API MessageBoxA. тобто приблизно так само, як якби ми використовували звичайний BPX.

HBP ON ACCESS і ON WRITE можуть охоплювати тільки 1, 2 або 4 байти, якщо ж ми виберемо в DUMP зону більшого розміру, то матимуть значення тільки перші чотири байти.

А тепер відзначимо перші 4 байта.

Натискаємо праву кнопку миші.

Уроки по крекінгу

Проробимо ту ж операцію для наступного байта і виберемо HARDWARE ON ACCESS. і тепер є тільки можливість вибору BYTE.

Уроки по крекінгу

А на наступному з'явилася, нарешті, опція DWORD. тобто HBP на чотири байти.

Уроки по крекінгу

Повернемося до 4020CA і поставимо HBP ON ACCESS - BYTE.

Уроки по крекінгу

Бачимо, що поставлений нами HBP в списку має розмір 1, тобто байт (BYTE).

Уроки по крекінгу

Уроки по крекінгу

Тут OLLY говорить нам, що спрацював HBP1. тобто той, який йде першим у списку HBP.

Уроки по крекінгу

Бачимо, що виконання програми припиняється на рядку, що відбувається після тієї, де вироблялося збереження або читання. Це вірно як для HBP ON ACCESS. так і для ON WRITE - інструкція, на якій спрацьовує HBP. виконується, а програма зупиняється на наступній.

Як ви можете бачити, відміну від MEMORY BREAKPOINT полягає в тому, що програма зупинилася б на 401 007 - безпосередньо на тій інструкції, яка викликала спрацьовування точки зупину.

Як ви можете здогадатися, HBP ON WRITE спрацьовує, коли відбуватиметься збереження, а не читання, і зупинка програми відбувається на інструкції, наступної за тією, яка викликала спрацьовування HBP.

Умовні точки зупину

Насправді це варіант звичайних BPX. відрізняється тим, що при активації такого BPX OllyDbg перевіряє, чи правильно якесь умова, і якщо так, то зупиняє виконання програми, а якщо немає, то продовжує виконання програми, як ніби BP не існує.

Скинемо все, що ми робили раніше, і встановимо BREAKPOINT CONDI T IONAL на 40100E. для чого виділимо рядок, натиснемо праву кнопку миші і виберемо BREAKPOINT CONDI T IONAL.

Уроки по крекінгу

Відкривається віконце, в якому потрібно задати умову.

Наприклад, якщо хочемо задати, щоб останов відбувався, коли EAX дорівнює 400000. то умова має бути таким: "EAX == 400000".

У Хелп, які додаються до OllyDbg, написано, які символи ми можемо використовувати і яким умовам вони відповідають.

Бачимо, що у випадку з BPX CONDI T IONAL використовується рожевий колір. Натискаємо F9:

Бачимо, що стався останов, і OllyDbg нам повідомляє:

Раз EAX дорівнює 400000. значить спрацювало задана умова.

Уроки по крекінгу

Почнемо виконання заново, зітремо BPX CONDI T IONAL і поставимо інший, де, наприклад, EAX == 500000.

Бачимо, що крекмі виконався і зупинки не відбулося, тому що EAX завжди дорівнював 400000 і умова не виконувалася.

Якщо відкриємо HELP-CONTENTS.

Уроки по крекінгу

Уроки по крекінгу

Ось BREAKPOINTS і місце, де пояснюються вирази:

Уроки по крекінгу

Також в хелпе є приклади виразів, які можна використовувати для умов.

Уроки по крекінгу

Умовні точки зупину З логування

Це умовний BPX. такий же як і попередній, тільки в цьому випадку ми можемо вказати, щоб всі точні значення зберігалися при проходженні точки зупину. Там є багато опцій, і ми продемонструємо застосування цього BPX на прикладі одного API, який зустрічається в різних місцях, і нам хочеться, щоб зберігалися дані, що передаються йому.

Уроки по крекінгу

Перебуваючи тут, натискаємо CLICK DERECHO- BREAKPOINT- CONDITIONAL LOG.

Уроки по крекінгу

Бачимо віконце з безліччю опцій.

Уроки по крекінгу

В даному випадку нам потрібно тільки, щоб зберігалися необхідні нам дані.

Уроки по крекінгу

Йдемо у вікно LOG або L.

І очищаємо його, щоб ясно бачити, що зберігає програма. Кількома CLICK DERECHO-CLEAR WINDOW.

Уроки по крекінгу

Бачимо, що є опція, що дозволяє зберігати лог в текстовий файл, якщо це необхідно.

Тепер запускаємо виконання програми за допомогою F9.

Йдемо в віконце крекмі і поки в LOG'е нічого немає, так як заданий нами api створювалося.

Йдемо в REGISTER. де можемо поставити ім'я і пароль користувача.

Уроки по крекінгу

Коли натискаємо OK.

Уроки по крекінгу

В даному випадку нам відобразилася інформація тільки про одне виклику, але якщо api викликається, скажімо, 100 раз, то можемо зберігати лог в текстовий файл. Якщо ж нам потрібно, щоб відображалися тільки деякі з цих викликів, то можемо поставити певну умову.

Для цього перевантажимо крекмі, знову знайдемо api і встановимо на неї BPX CONDITIONAL LOG.

Уроки по крекінгу

Змінимо опції, так щоб точка зупинки спрацьовувала тільки тоді, коли виконується умова і поставимо його, щоб перевірялося, дорівнює чи [esp] 40137D.

Запускаємо програму, і коли з'явиться віконце реєстрації, введемо ім'я користувача 'ricnar456' і пароль '989898'.

Уроки по крекінгу

Пам'ятайте, що коли вводиться ім'я користувача, в якому є цифри, messageboxa викликається 2 рази? Натискаємо ОК.

Уроки по крекінгу

Коли натискаємо кнопку OK

Уроки по крекінгу

Це другий раз, коли викликається api. Тут умова виконується і спрацьовує точка зупинки.

Бачимо, що верхн ий елемент стека містить значення 40137d. яке активує BPX CONDITIONAL LOG.

В обох випадках OllyDbg зберіг інформацію про обох виклики.

Уроки по крекінгу

Уроки по крекінгу

Ок, думаю, що цього достатньо, щоб вам в чому попрактикуватися деякий час. Ще залишилися MESSAGE BREAKPOINTS. але я не хочу вас заморити, так що чекайте 12 частина, а після того, як розглянемо останній вид точок зупину, обіцяю, що продовжимо крекать по-немногу, так, щоб не нудьгувати.

[C] Рікардо Нарваха, пров. Aquila

Схожі статті