Pers.narod.ru. Тексты. Пример взлома 32-разрядного Windows-приложения: ломаем 'Телефонные базы операторов' (лохотрон Phone-A)

В последнее время на многих сайтах, например, здесь, предлагается бесплатно скачать телефонные базы сотовых операторов, в том числе, МТС, Билайна, Мегафона и TELE2. Надо же, - подумал я, наткнувшись на показанную выше ссылку, - лихие ребята, мало того, что абсолютно незаконно распространяют информацию, утечке которой сотовые операторы всячески препятствуют (к слову сказать, никакой единой "базы" и не существует), так ещё и не боятся предлагать её в открытую. Не иначе как уволенные "суперадмины" :)

Что ж, траффик у меня не ограничен, давайте скачаем базу МТС и посмотрим.

Вирусов в скачанном не обнаружено, какой-либо защиты EXEшки тоже, последнее хорошо, легче будет ковырнуть, если что. Размер "базы" - примерно 512 Мб, по самым скромным подсчётам у МТС 50 миллионов активных номеров, делим эти 2 числа и получаем примерно 10 байт на номер... мда, маловато, чтобы сохранить не только номера, в которых 10 цифр без "восьмёрки", но ещё и фамилии с адресами, как заявлено на сайте.

Второй ключ к разгадке - главная фраза из "лицензионного соглашения", ссылка на которое есть в проге:

Программа не гарантирует достоверность данных в справочнике.

И вот это:

Цена на сайте указана за регистрацию программы на год. После регистрации программы вы сразу же имеете возможность использования всего функционала программы. В некоторых случаях требуется отправка двух смс.

Итак, за 2 SMS по 300 рублей Вы получаете (или не получаете) возможность целый год лицезреть недостоверные данные. Позвольте, а откуда они берутся-то, если это действительно операторская база, в которой 99% инфы как раз достоверно?

Более того, если поискать, в Сети легко найти и "лицензионный ключ к программе Phone-A" (интересно, те же самые или другие люди предлагают его за деньги?), и версию с "таблеткой" (разумеется, качать ещё 500 Мб, чтоб взглянуть на "таблетку", не стал).

Дальше, в общем-то, можно и не смотреть, но для порядка хотелось бы заглянуть внутрь, избавившись вот от этого:

регистрация phone-a

Я ничего не имею против того, чтобы люди зарабатывали на полезной информации, и не стал бы ломать софт, предоставляющий таковую пользователям (или не стал бы выкладывать такие взломы в доступ), но в данном случае речь идёт о лохотроне и совесть моя вполне чиста.

Вот Crack к скачанному мной лохотрону phone-a.exe версии 1.1.6:

; phone-a.exe
; 1 049 088 bytes
000CC54D: 85 84

После изменения исполняемого файла запустите прогу, поставьте галочку "Принимаю пользовательское соглашение" и нажмите "Регистрация".

Как изменить файл? Хорошо, дам заодно небольшой урок по взлому.

Всё, что нам понадобится - любая утилита, способная показать 32-разрядный ассемблер, например, вполне подойдёт дизассемблер WinDASM, чтобы вам его не искать, выложу прямо здесь, установки он не требует, просто скачать архив и развернуть:

 Скачать W32dasm 9.00 в архиве ZIP (314 Кб)

Запускаем дизассемблер, жмём единственную активную кнопку "Открыть", загружаем файл phone-a.exe и ждём, пока пройдёт дизассемблирование.

Кстати: Некоторые пути к папкам Windasm'у "не нравятся", он просто не открывает тогда файлы, например, если в пути где-то был дефис "-". Так что лучше поместите всё в папку, путь к которой построен по старым добрым правилам DOS, например, c:\temp.

Что надо поискать в нашем файле в первую очередь? Правильно, строку "Введён неправильный регистрационный ключ!" - ведь именно такое сообщение выдаётся при нажатии кнопки "Регистрация" в окне с ошибкой.

Жмём меню Search, Find text, вводим текст, дизассемблер мог разбить его на строки, так что я ограничился словом "Введён". Упс, вот оно, да ещё и встречается только 1 раз:

Введён неправильный регистрационный ключ

Получается что на этот кусок кода мы переходим с 16-ричного адреса 004CD14C, об этом говорит строка

Referenced by a (U)nconditional or (C)onditional Jump at Address

Теперь ищем в файле этот волшебный переход 004CD14C. Для этого прокручивем дизассемблированный файл к началу, снова вызываем команду Search, Find text и вводим искомое слово 004CD14C. Видим:

переход 004CD14C

Код опять в единственном экземпляре, хехе, так это же условный переход jne, видимо, он означает "если введён неправильный ключ, перейти туда-то" (к выдаче сообщения об ошибке). Что ж, заменим jne на je и получим логику "если введён правильный ключ, перейти на сообщение об ошибке"... Так что теперь будет работать любой код, кроме купленного за 600 рублей :) Осталось выписать, что там в этом месте за байты:

0F 85 B4 00 00 00 8D 55 F4

(для надёжности прихватил несколько байт из следующей строки, вдруг там не одно такое сочетание байт) и воспользоваться второй незаменимой хакерской утилитой biew, чтобы пропатчить файл. Вот она, эта утилита, установка ей тоже не нужна, как большинству полезных программ:

 Скачать biew 5.3.2 в архиве ZIP (251 Кб)

В любом удобном файл-менеджере, лучше всего в Far Manager, копируем EXE-шку phone-a.exe в папку с файлом biew.exe

Запускаем biew командой

biew -d phone-a.exe
Уже несколько раз я получал на почту вопрос, куда именно вводить команды в Far :) Вот куда:
Командная строка Far Manager
Вообще, если не умеете работать с командной строкой и нормальным файл-менеджером (кроме Far подойдёт Total Commander, если не доверяете отечественным продуктам) - срочно учитесь, без этого кулхацкером не стать :)

Видим ассемблерный код EXEшки.

Жмём в программе F7, клавишей F5 ставим опцию "Search for hex" (все галочки-опции поиска переключаются клавишами от F2 до F7), вводим наши байты, ищем:

поиск 16-ричного значения в biew

Код опять в единственном экземпляре, жмём в программе F4, чтобы перейти к правке, заменяем байты 0F85 (это код команды jne, можно хоть вот тут 32-разрядные коды глянуть) на 0F84 (это je, переход по противоположному условию).

Жмём в biew клавишу F2 для сохранения изменений в файле, выходим клавишей Esc.

Теперь, наверное, понятен и формат CRK-файла на первом листинге. Единственный изменённый нами байт имеет 16-ричный адрес 000CC54D и мы просто записали, какой байт на какой заменить. Тот же результат можно получить, сравнив оригинальный и изменённый файлы phone-a.exe консольной командой Windows fc /b (бинарное сравнение файлов):

бинарное сравнение файлов командой fc /b

Запускаем изменённую прогу, скопировав её в исходную папку, ставим галку "Лицензионное соглашение", жмём "Регистрация", всё работает.

Теперь проверим работу "базы", мы ведь ради этого всё и затевали.

Конечно, я ввёл свой номер телефона, узнал, что я женщина, живущая на Пролетарской улице неизвестного города :) Проверка нескольких других известных номеров дала аналогичные результаты.

Не думаю, что имеет смысл качать и аналогично ломать остальные "сотовые базы операторов". Хотя, если хотите, поупражняйтесь, дело-то полезное (я имею в виду, изучение ассемблера и машинных кодов, а не распространение лохотронов).

Замечания:

1. Как Вы понимаете, эта статья описывает только общую технологию взлома незащищённых 32-разрядных программ. Если у Вас другая версия того же phone-a.exe, адреса команд могут не совпадать, да и сама схема работы приложения может ведь измениться в следующих версиях!

2. Если Вы просто хотите "взломать" файл (заменить какие-либо байты по готовому, кем-то сделанному Crack'у), Вам достаточно только программы Biew и умения работать с ней так, как написано в статье. Ведь дизассемблер Windasm нужен был мне для того, чтобы проанализировать машинный код и выявить "место взлома", а замену байта я выполнил с помощью Biew.

Рейтинг@Mail.ru
вверх гостевая; E-mail