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 во время ваших путешествий по интернету. Лишняя анонимность ещё никому не повредила!

Оставить мнение

Check Also

Страдания с ReactOS. Почему в заменителе Windows работают трояны, но не работает Word

Сегодня в нашей кунсткамере демонстрируется необычайный организм — двадцатилетний зародыш …