Тотальный разгром! Реверсим Total Commander и обходим защиту всех версий
Содержание статьи
- Что делаем?
- Инструменты
- Процесс
- Как работает механизм proxy DLL
- Кодинг
- Финал
- Итоги
Total Commander (ранее Windows Commander) — популярный файловый менеджер с графическим интерфейсом для Windows. В интернете на варезных сайтах можно найти множество решений для взлома Total’а. Их неизменный недостаток — костыльность: с выходом новой версии надо проделывать ту же процедуру «лечения» программы вновь и вновь. Но можно и по-другому. Хочешь узнать как и заодно прокачать скиллы в реверсе? Читай эту статью!
GREETINGS
Вначале хочу поблагодарить своих товарищей с сайта exelab.ru и передать привет:
- Jupiter,
- Mak,
- VodoleY,
- ELF_7719116,
- Kindly
и многим другим. Спасибо!
Какое-то время назад мой друг Jupiter предложил вместе разобрать алгоритм лицензирования Total’а. Пораскинув мозгами, мы написали генератор лицензии — файлов-ключей. И все было бы замечательно, если бы не присутствие в основе алгоритма лицензирования криптосистемы с открытым ключом — LUC. И ключи, разумеется, для успешного прохождения лицензирования нужно знать.
LUC — это похожая на RSA криптосистема. Ее отличие от RSA заключается в использовании последовательностей Люка вместо возведения в степень. Как и для RSA, для генерации закрытого ключа необходимо знать множители (P и Q), которые можно получить через факторизацию модуля (N). Но в нашем случае длина модуля — 832 бита. Естественно, ни у меня, ни у Jupiter’а таких вычислительных мощностей нет. А на квантовый компьютер мы еще денег не накопили. ????
Как повлияло бы на описанную атаку увеличение модуля (N) до 2048 бит?
- Увеличило бы время атаки вдвое
- Сделало бы атаку невозможной за разумное время
- Никак не повлияло бы
Загрузка …
Для решения этой проблемы мы сами сгенерируем приватный и публичный ключ криптоалгоритма LUC. Приватным зашифруем лицензию, публичным программа будет расшифровывать лицензию. А чтобы публичный ключ проходил, мы пропатчим его в памяти.
Помимо LUC, в Total’е присутствуют механизмы самозащиты, защита от модификации исполняемого файла. Можно, конечно, хардкорно запатчить файл, но это как раз и есть «костыль», который лишает обход защиты универсальности.
WARNING
Статья публикуется в образовательных целях. Редакция не несет ответственности за любой вред, причиненный материалами данной публикации. В статье намеренно не рассматривается сам алгоритм лицензирования, а демонстрируются практические аспекты имплементации обхода защиты с помощью техники proxy DLL.
Что делаем?
Наша задача — заменить модуль (N) в исполняемом файле программы, не нарушая его целостности. Тогда наш сгенерированный файл ключа будет верно расшифрован и программа будет зарегистрирована.
Существует два варианта решения данной задачи:
- Написать загрузчики для х86- и х64-версий программы (Loader).
- Написать proxy DLL, которые будут выполнять ту же функцию, что и загрузчики.
Оба варианта позволяют беспрепятственно обновлять программу. Но я выбираю второй вариант, он более удобный. В этом варианте не нужно будет исправлять пути в свойствах ярлыков программы с исполняемого файла Total’а на наш лоадер. Достаточно просто скопировать DLL’ки и файл ключа в папку с установленной программой.
Инструменты
x64dbg
— отладчик;masm x32
— компилятор;masm x64
— компилятор;wincmd.key
— ключ для программы, сгенерированный моим с Jupiter’ом кейгеном.
Процесс
Что делает proxy DLL?
- Устанавливает локальный прокси для эмуляции лицензирования онлайн
- Перенаправляет вызовы функций оригинальной DLL через себя, подменяя используемые для проверки лицензии
- Запускается во втором кольце защиты, подменяя указатель на лицензионный ключ
Загрузка …
Я скачал с официального сайта последнюю бета-версию, включающую в себя обе версии программы (х86 и х64). Установил директорию, которую предложил инсталлятор (C:totalcmd
).
Теперь запускаем на выбор TOTALCMD.EXE
или TOTALCMD64.EXE
, без разницы. Получаем вот такое окно.
Это было ожидаемо. ???? Теперь запускаем Total под отладчиком и заходим в закладку Symbols.
В левой половине окна видим загруженные в память процесса модули (DLL). Из всех модулей нас интересуют только две динамические библиотеки — это version.dll
и winspool.drv
.
Пусть тебя не смущает, что у winspool.drv
расширение не dll
, на самом деле внутренняя структура у winspool.drv
как у обычной динамической библиотеки. Эти два модуля и будут кандидатами для написания одноименных proxy DLL для Total’а.
Продолжение доступно только подписчикам
Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.
Подпишись на «Хакер» по выгодной цене!
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
1 год6890 р. Экономия 1400 рублей! |
1 месяц720 р. 25-30 статей в месяц |
Уже подписан?
- Ручная распаковка. Вскрываем кастомный пакер на примере вымогателя GlobeImp ...
- Инструментарий Android-разработчика. Подбираем программы, которые помогут в ...
- Искусство форензики. Находим источники данных, ищем и анализируем артефакты
- Шифрование по ГОСТу. Работаем с алгоритмом блочного шифрования «Магма»
- Просто бизнес. Как Apple защищает данные своих пользователей, препятствуя р ...
Мы рекомендуем Вам зарегистрироваться и принять участие в жизни нашего интернет-сообщества, либо войти на сайт под своим именем.
Сколько времени в день Вы проводите за компьютером?