Крекінг - це мистецтво дослідження ассемблерного коду з метою пошуку уразливого місця, з подальшим його аналізуванням і зломом
Введення в крекінг
початок
Засмучу тих хто думає, що зайнятися крекингом можна просто так без певних знань, навичок, завзятості. Чи не вийде просто взяти завантажити потрібний для злому софт і зламати програму. Не думай, що програма ламається за 5 хвилин (хоча якщо вже є досвід, і захист програми на 1 то це можливо навіть ще й за більш короткий проміжок часу).
Отже, якщо ти загорівся бажанням навчиться крекінгу, готовий прочитати безліч документів, витратити багато часу то це стаття для тебе.
Для початку тобі потрібно вивчити основи асемблера, навіть не обов'язково вчитися писати на ньому програми просто потрібно знати значення функцій і команд, потрібно вміти читати код. Як ти думаєш чи зможеш ти читати книгу на іспанською мовою не знаючи його? З матеріалу по Асму раджу почитати: розсилку Калашникова (http://www.Kalashnikoff.ru), "Асемблер IBM PC" Юрова, зі статей "Асемблер для Cracker ' ів "від Dr.Golova і" Cracking для карапузів "від Crack.
Освоївши матеріал, ти повинен знати призначення функцій, трохи розбиратися в ассемблерском коді програми. Зрозуміти, що будь-яка програма, написана на будь-якій мові програмування, передається для обробки процесору в вигляді машинного коду, для подальшої обробки і виконання закладених в неї функцій. Машинний код для того, щоб він був читабельним перетворюється в асемблер. Його то ми і можемо переглянути, змінити за допомогою спеціальних програм. Але зміни не можливі якщо програма упакована.Упаковка програми проводиться для того, щоб зменшити її розмір і захистити від злому (наприклад, UPX, Aspack і багато інших).
Різновиди і призначення програм
(OllyDBG)
(KWdsm)
(QUnpack)
(Hiew)
(Tpe)
Весь цей софт можна завантажувати окремо, але є і комбінований варіант, називається він CrackersKit (версія на час написання статті: 1.1, вага: 7 мб) скачати його можна з cracklab.ru майже всі перераховані вище програми там є (або їх аналоги). після того, як ми маємо початкові знання в цій області, і у нас є потрібний для дослідження софт розберемося в видах ПО:
shareware - умовно-безкоштовне ПЗ
freeware - безкоштовне ПО
adware - рекламно оплачувані програми
commercialware - Платити!
donation ware - плата при бажанні
Мета - програми типу shareware, ad ware і commercial ware.
Панель інструментів в Olly і DASM
Думаю ви вже маєте хоч якийсь досвід роботи з оллі (якщо немає можете почитати статтю Olly Debugger від А до Я cracklab.ru)
Нагадаю функції відладчика, з якими ми будемо працювати:
Завжди на увазі повинні бути CPU (головне вікно олли), Breakpoints і Patches.
Вікно CPU:
Розберемося в призначенні найосновніших функцій дасма.
Для того, щоб аналізувати код захисту для початку його потрібно знайти.
Способи пошуку коду перевірки (за допомогою OllyDGB і kWdsm)
Мета пошуку - розшук і довільне зміну коду, або знаходження Валіного серійного номера. Пошук коду перевірки обов'язковий для злому програми.
Основне призначення цього коду:
1 звірити валідність серійного номера (введених даних у формі введення СН)
2 перейти за адресою, якщо він вірний / невірний
3 повідомити про НЕ / коректної реєстрації
Основні способи знаходження коду перевірки:
1 брейкпоінт (Intermodular call)
2 Referenced
3 пошук по засобам вікна (дампа) пам'яті
4 пошук в стеці
5 пошук з помощю kWdsm
Поставити брейкпоінт можна або через
_командную рядок, наприклад:
bpx MessageBoxA
bpx - команда точки переривання
MessageBoxA - функція, на яку встановлюється брейкпоінт
про призначеннях функцій можна дізнатися з довідкової з WinAPI (cracklab.ru)
або через
_поіск міжмодульних викликів (Intermodular calls) наприклад:
знаходимо функцію MessageBoxA натискаємо правою кнопкою і вибираємо Set breakpoint on every call MessageBoxA
При такому вигляді пошуку використовується фраза яка виводиться наприклад при введенні некоректного серійного номера. Запускаємо програму, вводимо СН, програма лається що СН не вірний (наприклад так: Wrong SN! Trying again) => для пошуку і буде використовуватися дана фраза, далі йдемо в All referenced text string (котора у вкладці Search for) і шукаємо цю фразу .
Приклад злому програм з різними типами захистів
1 форма введення СН
2 напис в програмі (наприклад, Unregistered)
Програми для дослідження беремо або з журнальних болванок (ПЛ, хакер, ігроманія), або з сайтів типу softodrom.ru, і ін (шукаємо там шарованний софт (тобто вид shareware) і досліджуємо).
Теоретичний план злому:
Почнемо безпосередньо сам процес пошуку коду і його злому, я покажу вам ці операції на прикладі EscapeClosePro
Всі перелічені нижче дії рекомендую виконувати разом зі мною, так як це важко сприймається тільки шляхом прочитання матеріалу. Якщо ти поки не розумієш як це у мене вийшло потренуйся на крякмісах можна від фантома і крафта (ngh.void.ru/soft/d/crackme.rar; ngh.void.ru/soft/d/craft1.rar)
EscapeClosePro
Метод захисту: СН, напис Unregistered у вікні програми
Пакер / протектор: відсутній (а дізналися ми це завдяки PEiD, а якби програми була запакована, то просто потрібно було б знайти під неї анпакер)
Вартість: 100 руб
Злом шляхом пошуку СН:
Цей спосіб злому характеризується тим, що завдання полягає в тому щоб знайти код перевірки це може бути шляхом установки брейкпоінта на потрібну команду, або переглядом посилальної текстового рядка, або просто переглядом дізассемблерного коду програми і пошуку валидного серійного номера.
ім'я vizor
СН vizor
програма зупинилася на адресу 0040262E за цією адресою знаходиться команда call за допомогою цієї команди виводиться (в нашому випадку) текст: Неправильний код! .Зверніть увагу на вікно дампа пам'яті (в головне вікно CPU), спробуємо знайти цікаві речі шляхом просто перегляду коду, Скрол вгору і бачимо за адресою 0012F3D0 якісь цифри більше 10 цифр на погляд: 56C520AE713B563D5119 виникає підозра на СН, тестів і облом.
ніхто не забороняв використовувати кілька (хоч все) способи пошуку відразу
Тепер встановлюємо брейкпоінт не на саме повідомлення, а на команду вилучення фрази (Неправильний код!) Тобто на push.Снова заповнюємо форми введення, ок, програма зупинилася за адресою 00402620 (там де PUSH 0) .Снова звертаємо свій погляд на дамп пам'яті і бачимо там:
0012F438 004088E8 ASCII "9B2BC2C55272E0C32B44" << підозра на СН 0012F43C 0012F518 << тут наш бряк 0012F440 00402200 EscapeCl.00402200Тестуємо ще 1 знайдений нами СН на валідність. (Ім'я vizor sn 9B2BC2C55272E0C32B44) і Дякую за реєстрацію!
Зміна виведення функції:
Зміна виведення функції в свою чергу характеризується пошуком коду перевірки, довільним зміною його на циклічний тобто на такій який за будь-яких введених даних буде вважати себе зареєстрованим.
Знову ж встановлюємо брейкпоінт на MessageBoxA як і раніше, вводимо теже самі дані в поле ім'я, СН, зупиняємося там же. Тільки тепер рухаємося вище в пошуку переходу (джампа, стрибка) .По шляху нагору аналізуємо всі переходи. А вгору просування проводиться тому, як, якщо наприклад функція виведення повідомлення знаходиться грубо кажучи на адресу 5, то її тестування відбувається вище цієї адреси, так як тестування відбувається завжди вище результату (поняття стека).
Скрол вище бачимо:
004025CD> 85C0 TEST EAX, EAX 004025CF. A3 58AF4000 MOV DWORD PTR DS: [40AF58], EAX 004025D4 74 4A JNE SHORT EscapeCl.00402620Аналізуючи JNE 00402620 перехід, звертаємо увагу в першу чергу на адресу джампа тобто 00402620.Смотрім що знаходиться за цією адресою, бачимо що висновок повідомлення про те що програма незарегістрірованна.Теперь якщо ми змінимо перехід JNE (jump if not equal тобто стрибок якщо не дорівнює) на JE (jump if equal тобто стрибок якщо одно) .Двойним кліком лівої кнопки миші натискаємо на:
004025D4 74 4A JNE SHORT EscapeCl.00402620і міняємо JNE на JE.Теперь будь введений СН програма вважає за вірний (звичайно крім справжнього СН , А відбувається це через те, що її висновок функції змінений таким чином, щоб програма завжди повертала позитивний результат при будь-яких введених даних.
Але це її не все, не варто поспішати і бігти патчить 1 висновок цієї програми. Згадаймо, який ще спосіб захисту використовує програма? вірно, проста на перший погляд напис Unregistered у вікні програми. Просто після перезапуску програми, вона дивиться була змінена це напис на щось інше і якщо це так то вона вважає себе зареєстрованої, але у нас такого не було тому ще не все зроблено рухаємося далі.
Встановлюємо брейкпоінт на вже досить набридла MessageBoxA.
Починаємо міркувати якщо програма незареєстрований то у неї видно напис Unregistered отже десь в коді програми вона повинна бить.Начінаем пошук, але перед цим просто проскролім код і подивимося його .. Скрол вниз і бачимо:
0040265F. 85C0 TEST EAX, EAX << порівняння даних в регістрах 00402661 74 23 JE SHORT EscapeCl.00402686 << перехід 00402663. 8B5424 70 MOV EDX, DWORD PTR SS: [ESP + 70] 00402667. 68 64724000 PUSH EscapeCl.00407264; / Text = "Unregistered version!" ... 00402686> 8B7424 70 MOV ESI, DWORD PTR SS: [ESP + 70] 0040268A. 8B3D 70714000 MOV EDI, DWORD PTR DS: [<& USER32.SetDlgIte>; USER32.SetDlgItemTextA 00402690. 68 54724000 PUSH EscapeCl.00407254; / Text = "Registered to:""SetDlgItemTextA - функція заголовка або тексту в вікні"
А ось і це повідомлення. Починаємо аналіз коду. Бачимо стандартну конструкцію перевірки вмісту регістрів і функцію джампа. JE 00402686 - JE - перехід далі за кодом. Дивимося що знаходиться за адресою 00402686 а там знаходиться повідомлення про те, що програма RegiRegistered to: => якщо змінити JE на JNZ програма при людом розкладі вважає себе зареєстрованої і пише про це в своєму головному вікні.
Таким чином змінивши ці 2 функції програма завжди буде зареєстрована і все це балгодаря всьому 2-м байтам зміненим в коді.
патчінга:
Патчінга програми проводиться безпосередньо після злому програми.
Для того, щоб пропатчити нашу піддослідну програму потрібно змінити:
адреса функція і зміна адреса функції переходу 004025D4 JNE 00402620 JE 00402661 JE 00402686 JNEДля патчінга будемо використовувати hiew, про командах hiew'a можна дізнатися з моєї статті (ngh.void.ru/lec/crack.html).
До того, як ми будемо виробляти патчінга програми потрібно створити папку (де зручніше, можна в корені диска) і скопіювати туди exe файл EscapeClosePro, на той випадок якщо ми щось зробили неправильно. Після того, як ми його скопіювали, запускаємо hiew знаходимо і відкриваємо в ній наш файл (EscapeClosePro.exe) .На цьому місці я хотів би трохи розповісти про основні опціях hiew'a.В цьому меню вибираємо Decode.
Головна панель hiew'a:
Завантажуємо наш файл, EscapeClosePro.exe в hiew, шукаємо або по фразі (F7), або за адресою (F5) .Я б радив шукати по фразі, тому натискаємо F7 і вводимо Registered to :, після знаходження цієї фрази, згадаємо які висновки нам потрібно патчить:
004025D4 JNE 00402620 JE 00402661 JE 00402686 JNEПатчим. Після пропатчіванія, (пам'ятаєш я говорив нам потрібно скопіювати ехе файл програми і патчить його) дак ось після того, як ми його пропатчити перемінуем його наприклад в p.exe і скопіюємо незмінені файл програми, тобто тепер у нас в папці 2 файли, 1 пропатчіний, а інший дефлотовий програмний.Ето нам потрібно для того, щоб зробити патч з помощю патчмейкера tpe:
Для того, щоб створити патч потрібно в цьому вікні в формі Original file (оригінальний, тобто незмінений / непропатченних) потрібно вибрати непропатченних файл, а в вікні Patched File відповідно пропатченний файл.После в головному вікні tpe заповнити форми, хто творець патча, і його сайт.І у вкладці File вибрати створення патча.После зберегти під потрібним ім'ям і все патч готовий!
Сподіваюся це стаття допомогла тобі в освоєнні основ крекерского мистецтва, відповіли на деякі твої вопроси.Дальше все буде набагато цікавіше, більше практика, читайте і у вас все обов'язково вийде.
ps до цієї статті є додаток у вигляді веде-роликів злому програми EscapeClosePro різними способами.
ps величезне спасибі Armiоlu за те що наштовхнув мене не вірний шлях, допоміг в освоєнні незрозумілих для мене речей)
By Rel4nium (ngh.void.ru)
Коментарі
Коментуючи, пам'ятайте про те, що зміст і тон Вашого повідомлення можуть зачіпати почуття реальних людей, проявляйте повагу та толерантність до своїх співрозмовників навіть у тому випадку, якщо Ви не поділяєте їхню думку, Ваша поведінка за умов свободи висловлювань та анонімності, наданих інтернетом, змінює не тільки віртуальний, але й реальний світ. Всі коменти приховані з індексу, спам контролюється.