
Исследование защиты программы 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-документе, теперь на выходе получаем чистенький и оптимизированный файл. Цель достигнута. Закидываем в копилку полезных программ еще один грамотный инструмент. Ну а защита остальных программ разработчика обходится аналогичным образом.
Просмотров: 1701 | Комментариев: 12

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье

ru-board
(29.01.2021 в 12:35):
лекарство для последней версии
PDFCompress.dll CRC32: 1B24C144
Comparing files PDFCompress.bak.dll and PDFCOMPRESS.DLL
00006ED1: 16 17
00009779: 16 17
PDFCompress.dll CRC32: 1B24C144
Comparing files PDFCompress.bak.dll and PDFCOMPRESS.DLL
00006ED1: 16 17
00009779: 16 17

ManHunter
(23.08.2020 в 14:32):
Я не выкладываю патченные файлы.

Дмитрий
(23.08.2020 в 14:18):
Доброго дня!
У меня эта програмка вообще магию творит.
Из 55Мб файла делает 12Мб, причём визуально никаких изменений нет.
Не могли бы вы скинуть ссылочку на уже пропатченную версию?
Руки не оттуда растут, пытался разобраться, не вышло (
У меня эта програмка вообще магию творит.
Из 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 ?
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 тянул.
В наших линуксах Ghostscript рулит.
1844096 vs 1706451
А файловый этот хостинг убил. Скачал с пятого раза, минут 15 тянул.

Lazy_Kent
(26.05.2020 в 21:46):
Спасибо.
В ответку свой оптимизированный файл закинул:
https://www.upload.ee/files/11...pdf.zip.html
В наших линуксах Ghostscript
В ответку свой оптимизированный файл закинул:
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
оригинал и файл после обработки программой.
https://www.upload.ee/files/11...pdf.zip.html
оригинал и файл после обработки программой.

Lazy_Kent
(24.05.2020 в 23:51):
Можно получить ссылки на изначальный и оптимизированный PDF-файлы? Для некоторого сравнения.
Сам не могу попробовать. Здесь Linux.
Сам не могу попробовать. Здесь Linux.

Добавить комментарий
Заполните форму для добавления комментария

PDFCompress.dll
CRC32: FD65E182
--
00006F21: 16 17
000098B6: 16 17