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, после чего и консольная версия программы начинает работать без выкрутасов.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
user (06.03.2024 в 11:07):
Рассмотренная в статье версия чуть ли не последняя для x32.
Текущая версия 5.3 уже только для x64.
user (16.04.2020 в 09:03):
ЦитатаПользуюсь SnakeTail, там есть опция "File Reopen Check Interval" которая "переоткрывает" заново лог, если была перезапущена прога, которая пишет в этот лог.

Глянул её, не понравилась.
Работает вяло. Оказывается, на дотнете.
Поэтому сразу под снос.
То блин вижуалбасики были популярны, теперь этот дотнет..
user (15.04.2020 в 13:13):
А теперь ещё и делаем так,
чтобы эта красота всёже работала в WinXP/SP2:

;000.CRK file:  (Use CRACKER.EXE for apply it)
;
;----------------------------------------------
Tail4win v.5.0.1.180710
Fixed - Run under WinXP/SP2

msvcr120.dll - Fix import
msvcr120.dll
.10027BAF: 4C 43
.10027BB1: 67 6D
.10027BB2: 69 6D
.10027BB3: 63 61
.10027BB4: 61 6E
.10027BB5: 6C 64
.10027BB6: 50 4C
.10027BB7: 72 69
.10027BB8: 6F 6E
.10027BB9: 63 65
.10027BBA: 65 41
.10027BBB: 73 00
.1002D84F: 4C 43
.1002D851: 67 6D
.1002D852: 69 6D
.1002D853: 63 61
.1002D854: 61 6E
.1002D855: 6C 64
.1002D856: 50 4C
.1002D857: 72 69
.1002D858: 6F 6E
.1002D859: 63 65
.1002D85A: 65 41
.1002D85B: 73 00
.100E5CB3: 4C 43
.100E5CB5: 67 6D
.100E5CB6: 69 6D
.100E5CB7: 63 61
.100E5CB8: 61 6E
.100E5CB9: 6C 64
.100E5CBA: 50 4C
.100E5CBB: 72 69
.100E5CBC: 6F 6E
.100E5CBD: 63 65
.100E5CBE: 65 41
.100E5CBF: 73 00

tail.exe - Fix import
tail.exe
.004065F3: 4C 43
.004065F5: 67 6D
.004065F6: 69 6D
.004065F7: 63 61
.004065F8: 61 6E
.004065F9: 6C 64
.004065FA: 50 4C
.004065FB: 72 69
.004065FC: 6F 6E
.004065FD: 63 65
.004065FE: 65 41
.004065FF: 73 00
.0046B12B: 4C 43
.0046B12D: 67 6D
.0046B12E: 69 6D
.0046B12F: 63 61
.0046B130: 61 6E
.0046B131: 6C 64
.0046B132: 50 4C
.0046B133: 72 69
.0046B134: 6F 6E
.0046B135: 63 65
.0046B136: 65 41
.0046B137: 73 00

tail.exe - Skip #GP after Fix Import
tail.exe
.00406530: 55 C3
;----------------------------------------------
ManHunter (31.01.2020 в 18:35):
Именно так.
Тащмайор (31.01.2020 в 17:33):
ЦитатаНе понимаю, почему вы, с вашей квалификацией, выкладываете такие простенькие и однообразные взломы?
Потому что ни один нормальный реверсер в трезвом уме не станет выкладывать взломы серьёзных вещей рядом со своими же фотками. Вы название блога читали? Оно является своего рода ответом тем, кто в своё время провёл разъяснительную работу с автором блога на предмет "неуставной деятельности". Поэтому он и создал "Просто блог", в котором он блестяще реализует свои таланты, но при этом не переступает черту.
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-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0107 сек.) / Память: 4.5 Mb
Наверх