УРОК РЕВЕРСА №1 | IDA
Наверняка, Вы сталкивались с какими-либо кряками в интернете, будь то для Фотошопа или для какой-нибудь новой игры. Однако, не все понимают, как это работает. В этой серии уроков я постараюсь дать основы понимания этой науки. Давайте начнем с самого начала.
Реверс-инжиниринг – это наука, которая позволяет путем анализа программного обеспечения находить уязвимости. Реверс-инжиниринг включает в себя изучение функциональности программы, ее структуры, алгоритмов и данных, чтобы понять, как она работает.
Конкретно в данном уроке мы будем использовать метод патча условия, то есть будем изменять через другое ПО условие, путем патча ( Как яркий пример, изменение условия ЕСЛИ ЛИЦЕНЗИЯ ЕСТЬ на ЕСЛИ ЛИЦЕНЗИИ НЕТУ ). Самые догадливые уже поняли, какой минус у этого способа, но давайте подробно разберемся.
ПЛЮСЫ:
1. Измерение условия, не нужно ничего подменять
2. Никаких внешних файлов для запуска кряка
3. Минимальное изменение кода
4. Вес почти не поменяется
МИНУСЫ:
1. Не работает с Python программами ( объясняю, PyInstaller и Nuitka - упаковщики, а не компиляторы, они лишь подгружают код, патчить там почти нечего )
2. Кряк не будет работать у людей с приобретенной лицензией
3. Чаще всего софты покрываются защитой ( Themida, VMprotect, etc… ), поэтому найти то самое условие довольно трудно
Приступим к практике.
Для реверсинга приложений первым делом нужно что? — Правильно, само приложение! Но, увы, Python не подходит для нашего метода кряка (почему - указано выше), ASM - слишком ранний этап ( кстати, если вам интересен ASM, дайте знать в комментариях, я сделаю мини-курсик ). Пусть будет C++.
Итак, давайте перейдем к написанию программы CrackMe. На вход будет поступать цифра, и в случае, если цифра соответствует условию ( допустим, равна 5 ), выведем "Success", а если не соответствует, то выведем "Denied".
Вот пример кода: #include <iostream> int main() { int alphaPassword; std::cout << "Enter key: "; std::cin >> alphaPassword; if (alphaPassword == 5) { std::cout << "Success"; } else { std::cout << "Denied"; } }
Скомпилированное приложение будет прикреплено в телеграм канале! ( https://t.me/channelProfessor )
Все, самое трудное позади - программа готова и скомпилирована. Осталось лишь установить утилиты для кряка. В нашем случае необходимо установить IDA. Благо, кряков в интернете достаточно, найдете ( полное название IDA Pro )
Установили, запускаем ida64.exe:
Тут необходимо выбрать 'New', выбрав файл для реверсинга.
Тут необходимо просто нажать 'OK' не выбирая ничего. Если что выскочит, нажимайте просто 'No'
Тысячи непонятных кнопок, какие-то графики, функции! Ужас, но нам это не интересно. Нажимаете по 'View', выбираете 'Open subviews', 'Strings' и нажимаете левой кнопкой мыши.
Давайте разбираться, после успешного ввода программа должна вывести Success. О чем это говорит? О том, что мы должны, где используется эта переменная, таким образом найдем функцию, которая отвечает за это! Кликаем смело 2 раза по 'Success'
Обьясняю, нас перекинуло на часть кода, где обьявляется переменная. ( Да, это дизассемблер ). В комментариях указана функция, в которой используется переменная ( подчеркнута красной линией ). По ней и нажимаем 2 раза.
У нас есть верхняя часть кода, где и просится ввести ключ. А после идет разветвление на 2 части, в случае правильного ключа и в случае неправильного. Значит что нужно сделать? Поменять их местами!
jnz - это оператор условного перехода в ASM, по сути, условие.
Запомните 2 вещи: jnz - if, jz - if not
Значит нам нужно просто поменять jnz на jz.
Тыкаем по этой строчке один раз, выбираем 'Edit', 'Patch Program', 'Assemble'
Ну и теперь просто изменяем ( вот так вот )
Нажимаем OK, закрываем это меню.
Теперь нужно применить изменения на исходный файл, выбираем 'Edit', 'Patch Program', 'Apply patches to input file', ничего не изменяя нажимаем OK.
Все! Мы изменили логику файла, применив изменения. Теперь нужно проверить нашу работу: