Blog. Just Blog

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

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

Tail4win - очень удобный инструмент для мониторинга логов различных программ в реальном времени, например, лог ошибок веб-сервера, лог запросов к базе данных и т.п. Программа показывает все последние изменения в выбранном логе, есть возможность подсветки ключевых слов и целых строчек, в которых эти слова встречаются. Кто работает с Linux, наверняка знаком с командой tail, так вот в Tail4win кроме графической оболочки есть и консольная версия. Короче, это реально отличный помощник для системных администраторов, если бы только не цена. Но это дело поправимо.

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

Окно "О программе"
Окно "О программе"

Если попробовать открыть диалог регистрации, то мы выясним, что для регистрации требуется не серийный номер, а какой-то ключевой файл.

Окно регистрации
Окно регистрации

Естественно, что такого файла у нас нет, никакой информации о его внутреннем формате и даже о его названии нам тоже не известно. Значит придется применять бинарную хирургию. Зацепка у нас есть, это триальный текст в окне "О программе" что мы "хава нот регистер". Оставим грамматику на совести автора и поищем текст в файле.

Текст сообщения в файле
Текст сообщения в файле

Возвращаемся в дизассемблер. Нам надо найти место, где эта строка используется, а также выяснить, при каких условиях она появляется.
  1. .text:0068AB7B                 mov     [ebp+var_8], eax
  2. .text:0068AB7E                 xor     eax, eax
  3. .text:0068AB80                 mov     [ebp+var_C], eax
  4. .text:0068AB83                 lea     edx, [ebp+var_C]
  5. .text:0068AB86                 lea     eax, [ebp+var_8]
  6. ; Вызвать функцию проверки
  7. .text:0068AB89                 call    sub_597B90
  8. ; Если AL!=0, то триальную строку не показывать
  9. .text:0068AB8E                 test    al, al
  10. .text:0068AB90                 jnz     short loc_68ABC8
  11. .text:0068AB92                 lea     edx, [ebp+var_14]
  12. .text:0068AB95                 lea     eax, [ebp+var_10]
  13. .text:0068AB98                 call    sub_597E5C
  14. .text:0068AB9D                 push    offset aYouHavaNotRegi
  15. ; "You hava not register. This copy left "
  16. .text:0068ABA2                 mov     eax, [ebp+var_14]
  17. .text:0068ABA5                 xor     edx, edx
  18. .text:0068ABA7                 push    edx
  19. .text:0068ABA8                 push    eax
  20. .text:0068ABA9                 lea     eax, [ebp+var_24]
  21. .text:0068ABAC                 call    sub_420740
  22. .text:0068ABB1                 push    [ebp+var_24]
Тут все понятно. По результатам единственной проверки принимается решение, выводить триальную строку или нет. Функцию проверки разбирать не имеет смысла, у нас нет образца ключевого файла. Поэтому просто сделаем так, чтобы она всегда возвращала нужный результат, то есть AL=1. Как это делается, вы наверняка уже знаете. Две команды MOV AL,1 и RET по адресу 00597B90 раз и навсегда решают проблему с регистрацией программы.

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

Триальная надпись больше не выводится, из меню пропали пункты регистрации, напоминалка и наг-окно при выходе больше не появляются. Половина задачи выполнена. Почему только половина? Потому что у нас есть еще консольная версия программы, и она также требует хирургического вмешательства.

Сообщение незарегистрированной программы
Сообщение незарегистрированной программы

В незарегистрированной версии перед данными из лог-файла выводится сообщение об оставшихся днях и копирайты разработчика. Далеко искать не пришлось, все нужное находится прямо на точке входа в программу:
  1. .itext:0045EB4C                 xor     eax, eax
  2. .itext:0045EB4E                 mov     ds:dword_468028, eax
  3. .itext:0045EB53                 mov     edx, offset dword_468028
  4. .itext:0045EB58                 mov     eax, offset dword_468024
  5. ; Вызвать функцию проверки
  6. .itext:0045EB5D                 call    sub_4591C0
  7. ; Если AL!=0, то триальную строку не показывать
  8. .itext:0045EB62                 test    al, al
  9. .itext:0045EB64                 jnz     loc_45ECE0
  10. .itext:0045EB6A                 mov     edx, offset dword_468030
  11. .itext:0045EB6F                 mov     eax, offset dword_46802C
  12. .itext:0045EB74                 call    sub_459388
  13. .itext:0045EB79                 cmp     ds:dword_468030, 0
  14. .itext:0045EB80                 ja      loc_45EC11
  15. .itext:0045EB86                 mov     eax, off_46215C
  16. .itext:0045EB8B                 mov     edx, offset aYourTrialHasEx
  17. ; "Your trial has expired. "
  18. .itext:0045EB90                 call    sub_405968
  19. .itext:0045EB95                 call    sub_405A68
Такая же функция проверки, такие же условия появления триальной строки. Значит и лечение будет по той же схеме. Пара команд MOV AL,1 и RET по адресу 004591C0, после чего и консольная версия программы начинает работать без выкрутасов.

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

Вот и все, теперь цель достигнута. Спасибо разработчикам за полезную программу, а вам спасибо, что дочитали до конца.

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

Комментарии

Отзывы посетителей сайта о статье
Eka (13.05.2019 в 13:52):
Пользуюсь SnakeTail, там есть опция "File Reopen Check Interval" которая "переоткрывает" заново лог, если была перезапущена прога, которая пишет в этот лог. В Tail4win такую опцию не нашел, соответственно надо каждый раз лог сначала закрыть, потом заново октрыть, тогда видны новые записи.
Sergey_K (11.05.2019 в 17:19):
Спасибо! Ok!
ManHunter (10.05.2019 в 17:47):
Алексей, прям с языка снял. Еще добавлю, что за нейтрализацию всякого серьезного другие грамотные ребята имеют дополнительные пару шекелей в карман. Зачем усложнять им жизнь?
xussr (10.05.2019 в 17:44):
Ну прям совсем все пля асы ...давайте по делу писать
Алексей (10.05.2019 в 17:35):
За что то серьёзное, могут и в гости придти, как бы сказать :) воспитательные работы проводить. И опять же: это еще в лучшем случаи. А худшем, конфискуют технику на проверку, а там пеняй на себя.
А за эту тему, да кому она нужна... В худшем случаи, что и может быть, так это фикс данного недочета в программе и всего лишь. Хотя авторы разные, кто то и за копейку удавится :D
MaCTeP (10.05.2019 в 12:36):
Автор что хочет то рисует в своем блоге.
ManHunter (09.05.2019 в 18:26):
Потому что я так решил.
Евгений (09.05.2019 в 18:25):
Не понимаю, почему вы, с вашей квалификацией, выкладываете такие простенькие и однообразные взломы? Вы вполне могли бы разбирать, хоть и не так часто, более изощренные виды защит, а то получается пальбы из пушки по воробьям...

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

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

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