SocksChain 3.6 (build 114)
Инструменты: SoftICE 4.0.5, W32Dasm 8.93, R!SC Process Patcher v1.5.1
Это моя первая взломанная программа, поэтому все возможные упрёки заранее принимаю. Исследуемую программу вы можете найти здесь:
http://www.ufasoft.com
или на самом Хакере. Кстати, идея взломать программу пришла мне в голову после безуспешных попыток найти кряк к этой версии программы. Не удалось найти и более старую версию (build 113), кряк к которой существует.Естественно, статья написана исключительно в образовательных целях. За то, как будет использован этот материал, автор ответственности не несёт!
Часть 1 - Исследование.
Устанавливаем и запускаем прогу. Выбираем Help -> Register, появляется окно регистрации, в котором мы видим что программа "trial" и будет работать 14 дней, для себя отмечаем, что незарегистрированная версия от зарегистрированной видимо ничем не отличается кроме 14-ти дневного срока эксплуатации для незарегистрированной версии. Регистрация стоит 29$ или 300р, наверное первая цифра для иностранцев, ну а вторая для Russian Users. Теперь проверьте карманы на наличие зелёных или наших рублей! Кто нашёл может дальше не читать!
Попробуем ввести какую-нибудь лабуду в окно регистрации, жмём OK и выскакивает окно - MessageBoxA "invalid registration code". Закрываем программу. Запихнём файл SocksChain.exe в W32Dasm и попробуем найти в листинге фразу "invalid registration code". Дизассемблили? Как нет? И действительно, получить листинг нам не удастся потому что программа запакована. Кстати, кому интересно, пакер - AsProtect и, что удивительно,
незарегистрированная версия, как не стыдно господа программисты! Попробуем отследить, куда прога прячет информацию о том сколько дней ей ещё работать до окончания срока trial'а. Запускаем RegMon+FileMon, стартуем нашу программу и через мгновение обнаруживаем, что она вырубает RegMon и FileMon, а что вы хотели это же AsProtect. Попробуем перевести часы на компьютере на месяц вперёд. Стартуем прогу и выскакивает окно регистрации с сообщением "Remain 0 days of trial period", причём, если ввести неправильный номер выскакивает MessageBoxA и программа не стартует, не помогает и переустановка программы. Регистрационный номер мне найти не удалось, Windows переустанавливать тоже не хотелось, и я решил отловить в SoftICE окно регистрации, чтобы затем запатчить процедуру проверки trial'а, которая должна предшествовать созданию этого окна.
Поставим бряк в SoftICE: Bpx CreateDialogIndirectParamA.
Сработало, жмём F12 ( 2 раза ) и мы здесь:
: 0040FFE4 call 00414AA2 <- эта функция создаёт окно регистрации
: 0040FFE9 cmp eax, 01 <- мы здесь
Скроллим вверх несколько страничек в SoftICE пока не дойдём до этого места:
: 0040FE48 test al, al
: 0040FE4A jz 004100A5 <- очень интересный переход
: 0040FE50 cmp byte ptr [00440B01], 00 <- начало процедуры проверки trial'а
: 0040FE57 jz 0040FE73 <- если прыгнем, получим окно регистрации с надписью "This product is expired, please register it"
Далее идёт процедура проверки trial'а (сколько дней осталось ), куча jmp'ов и call'ов, но она нас не интересует. Поставим в SoftICE бряк на адрес 0040FE4A просто двойным кликом мыши и перезапустим программу.
Сработало. Перекидываем флаг и жмём F5, мы оказываемся в программе, причём всё работает. Конечно, если выбрать About, то там осталась надпись "unregistered", но при нажатии на кнопку Register ничего не происходит, т. е. окно регистрации не появляется, а также не выдаётся никаких сообщений об ошибке в программе, что нас вполне устраивает, ведь программа работает без каких-либо ограничений, по крайней мере я не заметил. Сразу скажу, что этому переходу предшествует вызов функции по адресу:
: 0040FE42 call [0042D204] <- этот call вызывает функцию в usft_ext.dll
Попытка пропатчить dll'ку, т. е. заставить функцию возвращать 0 в al, успехом не увенчалась, выдаётся сообщение об ошибке. Поэтому я решил, что прогу нужно патчить в памяти, после того как она распаковалась, но не выполнила код по нашему адресу.
Необходимо изменить код по адресу:
: 0040FE4A jz 004100A5 на
: 0040FE4A jnz 004100A5
А если в HEX, то необходимо переправить байты по адресу:
: 0040FE4A с 0F 84 55 02 00 00 на 0F 85 55 02 00 00 и всё.
Часть 2 - Написание патча.
Для создания патча воспользуемся готовой хакерской программой, которая дождётся, пока наша прога распакуется и тогда уже изменит байты. Для
R!SC Process Patcher скрипт будет выглядеть так:
T=100000:
F=sockschain.exe:
O=loader.exe:
P=0040fe4a/0f,84,55,02,00,00/0f,85,55,02,00,00:
$
После компиляции получим loader.exe - это загрузчик для Sockschain.exe. Он сам запустит программу, дождётся пока она распакуется и пропатчит нужные байты, что нам и надо.
Часть 3 - Заключение.
В результате нашего исследования мы получили рабочую программу, желающие могут продолжить исследование и найти место в программе отвечающее за надпись "unregistered" в окне About, там должно быть "Licensed 1 copy", потом можно добавить соответствующие строки в наш скрипт
и заново его откомпилировать.
В заключение хочу сообщить о некоторых недостатках такого способа взлома программ, а именно loader.exe не всегда стабильно запускает программу, иногда возникает ошибка, которая видимо связана с особенностями работы AsProtect'а (помните, он прибивает RegMon и FileMon), ошибка не фатальная, просто нужно ещё раз попробовать запустить программу, хотя чаще она запускается с первого раза (процент успешного старта программы равен приблизительно 70%). И ещё
я заметил, если файл сначала выделить мышью, а потом запустить нажатием клавиши [ENTER], то loader.exe не успевает пропатчить программу.
Учитывая особенности применения данной программы (её обычно запускают один раз, перед входом в интернет) можно считать достигнутые результаты вполне удовлетворительными.
Чуть не забыл, у кого есть деньги, обязательно купите эту замечательную программу, которая позволяет скрывать свой реальный IP во время ваших путешествий по интернету. Лишняя анонимность ещё никому не повредила!