Blog. Just Blog

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

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

Программа Folder2List предназначена для формирования списка файлов и папок, учитывая различные метаданные файлов. Вы можете легко настроить внешний вид готового списка и сохранить его в формате XLS, XML, PDF, HTML, CSV или TXT. Все делается буквально за несколько кликов мышкой. В демонстрационном варианте список можно включить не более 10 файлов, а за полную версию требуется отвалить какое-то ненулевое количество бабла. Это, конечно, для нас неприемлемо.

Первым делом забираем с сайта дистрибутив, устанавливаем его и смотрим. Наиболее наглядным признаком демонстрационной версии является надпись "Demo" в заголовке главного окна программы. Давайте поищем эту строчку в исполняемом файле.

Строки в ресурсах
Строки в ресурсах

Строка обнаружится в ресурсах. Программа многоязычная, но в ресурсах основной язык немецкий. Это сейчас неважно, ведь нас интересует только индекс строки - 63706 или 0F8DAh в шестнадцатеричной системе счисления. Отправляем файл в дизассемблер, когда он закончит работу, поищем в листинге значение "0F8DAh". Обнаружится вот такая конструкция, присущая программам на Дельфи:
  1. .text:00BE3144 off_BE3144      dd offset hInstance
  2. .text:00BE3148                 dd 0F8DAh
По перекрестным ссылкам выходим на код, где эта конструкция используется:
  1. .text:00BE364B                 mov     eax, [eax]
  2. .text:00BE364D                 mov     eax, [eax+68h]
  3. ; Вызвать функцию проверки
  4. .text:00BE3650                 call    sub_9857D8
  5. ; Если она вернула AL=1, то программа считается незарегистрированной
  6. .text:00BE3655                 cmp     al, 1
  7. .text:00BE3657                 jnz     short loc_BE3684
  8. ; Поменять заголовок на "Demo"
  9. .text:00BE3659                 lea     edx, [ebp+var_8]
  10. .text:00BE365C                 mov     eax, offset off_BE3144
  11. .text:00BE3661                 call    sub_40C29C
  12. .text:00BE3666                 mov     edx, [ebp+var_8]
  13. .text:00BE3669                 lea     ecx, [ebp+var_4]
  14. .text:00BE366C                 mov     eax, off_CD565C
  15. .text:00BE3671                 mov     eax, [eax]
  16. .text:00BE3673                 call    sub_939488
Ничего необычного. Вызывается функция проверки, если она вернула AL=1, то программа считается незарегистрированной, для любого другого значения устанавливается заголовок полной версии. Посмотрим функцию проверки:
  1. .text:009857D8 sub_9857D8      proc near
  2. .text:009857D8                 push    ebx
  3. .text:009857D9                 push    esi
  4. .text:009857DA                 mov     esi, eax
  5. .text:009857DC                 xor     ebx, ebx
  6. .text:009857DE                 mov     eax, esi
  7. .text:009857E0                 call    sub_9857D0
  8. .text:009857E5                 test    al, al
  9. .text:009857E7                 jz      short loc_9857F3
  10. .text:009857E9                 mov     bl, 1
  11. .text:009857EB                 cmp     byte ptr [esi+19h], 0
  12. .text:009857EF                 jz      short loc_9857F3
  13. .text:009857F1                 mov     bl, 2
  14. .text:009857F3 loc_9857F3:
  15. .text:009857F3                 mov     eax, ebx
  16. .text:009857F5                 pop     esi
  17. .text:009857F6                 pop     ebx
  18. .text:009857F7                 retn
  19. .text:009857F7 sub_9857D8      endp
Ага, диапазон значений уточнился. Для полной версии функция должна вернуть значение 2, для демонстрационной - 1. Нам осталось только помочь ей в этом. Патчим начало функции по адресу 009857D8 парой команд MOV EAX,2 и RET, сохраняем изменения, запускаем.

Программа успешно "зарегистрирована"
Программа успешно "зарегистрирована"

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

Поделиться ссылкой ВКонтакте
Просмотров: 2486 | Комментариев: 11

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

Комментарии

Отзывы посетителей сайта о статье
user (28.04.2024 в 12:23):
А, ну да
ManHunter (28.04.2024 в 12:05):
user, так она тут и не для полезности :) А NikFileTree тут уже было самым первым камментом.
user (28.04.2024 в 12:00):
Программа по нужности не очень. Не строит дерево.
А вот NikFileTree это то, что надо.
http://www.niksoft.ru/rus/prog...etree_ss.htm
ManHunter (26.05.2018 в 11:14):
Exescope исключительно по привычке, ничего более.
pawel97 (26.05.2018 в 00:49):
Exescope - просто дело привычки, или там есть хоть одна уникальная фича в сравнении с тем же ResHacker?
p.s. Лайфхак по ida - строки лучше искать по alt-b чем alt-t, так найдёт без вариантов (если не в ресурсах), даже если не определились анализом. А индексы по alt-i (можно не переводить в hex). Ну вдруг кто не знал, я поначалу вообще asm сохранял и дальше блокнотом :d
tr (25.05.2018 в 23:54):
Вы являетесь образцом видео для этих операций. спасибо
nubuser (25.05.2018 в 11:55):
Спасибо за развернутый ответ!
ManHunter (25.05.2018 в 11:52):
В HiEW ищу сперва ASCII-строку, потом переключаюсь на юникод, ищу там. Затем на глаз определяю, где строка находится - просто в секции кода/данных или же в ресурсах. Там ошибиться сложно, в крайнем случае можно посмотреть, в какую секцию попадает нужный адрес. Если строка в ресурсах, то уже открываю в eXeScope список ресурсов со строками и ручками ищу индекс нужной мне строки, это совсем не трудно.

В случае, когда используются всякие библиотеки, языковые файлы и прочая хрень, то выручает Total Commander с поиском строки по файлам во всех мыслимых кодировках. Локализовав файл с нужной строкой, повторяю пункт 1.

Зная адрес, в большинстве случаев в HiEW достаточно поставить курсор на начало строки и нажать F6, сразу будет найден код, где эта строка используется. Но в любом случае я всегда уточняю это в дизассемблере. Для индексов, как в статье, однозначно IDA c поиском значения индекса по всему листингу.

Как-то так.
nubuser (25.05.2018 в 11:46):
А можете раскрыть секрет общей формулы поиска строк? В каких программах и где начинаете, что затем подключаете?
MacTePXP (23.05.2018 в 21:52):
Благодарю за мануал !
С помощью последнего IDR с ехелаба, нашел адрес и перешел в IDA. Есть поддержка IDA, OllyDbg, x32Dbg, Hiew из IDR, очень удобно.
brute (23.05.2018 в 21:33):
если такая программа нужна, то вот эта лучше:
http://www.niksoft.ru/rus/prog...etree_ss.htm
Всего 600кб и бесплатно.

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

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

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