Blog. Just Blog

Исследование защиты программы PDFCompressor-CL

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы PDFCompressor-CL
Скриншот программы PDFCompressor-CL

Программа PDFCompressor-CL предназначена для уменьшения размеров PDF-файлов путем их сжатия и оптимизации содержимого. Главное преимущество перед подобными софтинами - возможность работать из командной строки, что есть хорошо. Но без лицензии вообще нормально не запускается, что не есть хорошо.

Забираем с сайта дистрибутив, устанавливаем, запускаем, настраиваем как надо, пытаемся обработать какой-нибудь PDF-документ.

Сообщение об отсутствии лицензии
Сообщение об отсутствии лицензии

Ну что, вполне ожидаемо. Программа написана на дотнете, но при попытке открыть исполняемый файл на анализ получается полная бредятина. И текстовых строчек в файле не обнаруживается. Очень похоже, что тут поработали каким-то обфускатором. Ничего страшного, de4dot легко справляется с этой проблемой.

Убираем обфускацию с файла
Убираем обфускацию с файла

Отправляем распакованный файл в дотнетовский декомпилятор dnSpy, а там поиском по строковому значению "license" выясняем, откуда берется строка о неправильной лицензии. После получения списка методов и ресурсов, поочередно выясняем, где они используются. Правый мыш на результате поиска - "Анализировать" - "Используется в". Нас интересует метод "IsLicenseExist", так как по логике и названию, он должен отвечать на вопрос наличия лицензии.

Метод проверки наличия лицензии
Метод проверки наличия лицензии

"5PC" в параметре вызова - это, скорее всего, какой-то внутренний идентификатор продукта, так как у издателя есть несколько вариантов всякого софта для работы с PDF. И этот же код отображается в менеджере лицензий, если вы вдруг решите его ради прикола запустить.

Открываем метод на редактирование
Открываем метод на редактирование

Открываем метод на редактирование. Нам надо сделать так, чтобы при любом раскладе возвращался правильный результат, что все хорошо, что лицензия существует, что щебечут птички и светит солнышко.

Изменяем метод
Изменяем метод

Без вариантов. Правда (TRUE) торжествует. Компилируем метод после внесения изменений. Сохраняем измененный модуль. Проверяем работоспособность с обработкой какого-нибудь PDF-файла. Сообщения об отсутствии лицензии больше не появляется, но в оптимизированном файле на первой странице обнаруживается надпись о демо-версии:

Маркер незарегистрированной версии
Маркер незарегистрированной версии

В основном файле никаких упоминаний о демо-версии нет, значит надо искать где-то еще. В папке с программой, помимо пачки более-менее стандартных библиотек, у которых характерные названия через точки в имени файлов, обнаруживается файл "PDFCompress.dll". Текстовых строчек на первый взгляд в нем тоже нет, но de4dot не менее легко решает и эту проблему.

Убираем обфускацию с файла
Убираем обфускацию с файла

Отправляем распакованную библиотеку в dnSpy, там поиском строки "DEMO" по файлу и последующим анализом мест, где этот текст используется, обнаруживаем вот такой метод:

Нанесение маркера на документ
Нанесение маркера на документ

Вам хватит школьного курса информатики и английского языка такого же школьного уровня, чтобы понять, чего тут происходит. Воспитанникам церковно-приходской школы поясню: проверяется какой-то флаг, если он имеет неправильное значение, то на первую страницу документа по диагонали накладывается текст "DEMO VERSION".

Есть два варианта решения. Первый - пройтись по всем методам, где маркируется документ, и удалить код вставки метки, а таких методов точно более одного. Второй - найти код, где инициализируется флаг, после чего заменить значение флага на правильное. Лично мне больше нравится второй вариант, ведь неизвестно, где и как еще может вылезти отсутствие лицензии. Например, ограничение по количеству обрабатываемых страниц или еще какие-нибудь подлянки. Анализом конструкции "PDFCompressor.flag" выходим на метод, где этот флаг инициализируется.

Инициализация флага
Инициализация флага

Красота, хоть курсовую по программированию пиши :) Открываем метод на редактирование, заменяем последнюю строчку на "PDFCompressor.flag = 1;". Компилируем, сохраняем отредактированный модуль.

Маркер не наносится
Маркер не наносится

Проверяем на PDF-документе, теперь на выходе получаем чистенький и оптимизированный файл. Цель достигнута. Закидываем в копилку полезных программ еще один грамотный инструмент. Ну а защита остальных программ разработчика обходится аналогичным образом.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 519 | Комментариев: 10

Комментарии

Отзывы посетителей сайта о статье
ManHunter (23.08.2020 в 14:32):
Я не выкладываю патченные файлы.
Дмитрий (23.08.2020 в 14:18):
Доброго дня!
У меня эта програмка вообще магию творит.
Из 55Мб файла делает 12Мб, причём визуально никаких изменений нет.
Не могли бы вы скинуть ссылочку на уже пропатченную версию?
Руки не оттуда растут, пытался разобраться, не вышло (
ManHunter (07.08.2020 в 22:47):
1.1.4
asfa (07.08.2020 в 14:42):
Добрый день.
Подскажите, какая версия была в исследовании?
Lazy_Kent (27.05.2020 в 22:39):
Не пытаюсь что-то доказать. Просто самому стало интересно.

https://harper.ru/files/manual...al%20HKC.pdf

Если будет желание. Мало графики. Ну не нашёл быстро чисто текстовый.
Размер: 31340042

Оптимизированный:
Размер: 13619074

Как у PDFCompressor-CL ?
ManHunter (27.05.2020 в 09:10):
Сравнение не совсем корректное. В файле много графики, на одной только оптимизации картинок до шакальего состояния можно легко выиграть несколько сотен килобайт. На однородном текстовом файле разница вряд ли будет так заметна.
Lazy_Kent (26.05.2020 в 21:57):
Отправилось неожиданно. Продолжу.

В наших линуксах Ghostscript рулит.

1844096 vs 1706451

А файловый этот хостинг убил. Скачал с пятого раза, минут 15 тянул.
Lazy_Kent (26.05.2020 в 21:46):
Спасибо.

В ответку свой оптимизированный файл закинул:
https://www.upload.ee/files/11...pdf.zip.html

В наших линуксах Ghostscript
ManHunter (25.05.2020 в 11:18):
Конечно, какие проблемы:
https://www.upload.ee/files/11...pdf.zip.html
оригинал и файл после обработки программой.
Lazy_Kent (24.05.2020 в 23:51):
Можно получить ссылки на изначальный и оптимизированный PDF-файлы? Для некоторого сравнения.

Сам не могу попробовать. Здесь Linux.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2020
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0051 сек.) / Память: 4.75 Mb
Наверх