Blog. Just Blog

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

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

AbsoluteTelnet от Celestial Software - мощный Telnet, SSH и SFTP-клиент. Позволяет устанавливать соединения по SSH1 и SSH2, эмулирует терминалы VT52, VT100, VT220, VT320, XTERM, QNX, ANSI и SCO-ANSI, поддерживает большое количество алгоритмов шифрования и передачу файлов. Настройки отдельных соединений можно сохранять в файлы, и потом подключаться через них. Интерфейс программы выполнен в виде закладок, поэтому можно работать с несколькими серверами одновременно. Есть, конечно, и бесплатные альтернативы, типа PuTTY, но в некоторых случаях мне удавалось соединиться с удаленными серверами только через AbsoluteTelnet. Так что иметь такую программу в арсенале будет очень полезно, и желательно бесплатно.

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

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

Ни тот, ни другой вариант нас не устраивает. Лицензий, оказывается, тоже несколько видов: профессиональная и облегченная с урезанным функционалом. В любом случае, без какой-нибудь лицензии программа работать не будет. Поищем это диалоговое окно в ресурсах исполняемого файла AbsoluteTelnet.exe, попутно загрузив его на анализ в дизассемблер.

Диалоговое окно найдено в ресурсах
Диалоговое окно найдено в ресурсах

Диалоговое окно найдено, идентификатор ресурса 158, или 9Eh в шестнадцатеричной системе. К этому времени как раз закончит работу дизассемблер, и можно поискать в листинге все, что так или иначе связано с этим числом. Сигнатур найдется всего две: первая где-то в инструкции, а вторая в интересной процедуре:
  1. .text:00496DF0 sub_496DF0      proc near
  2. ; CODE XREF: WinMain(x,x,x,x)+C93
  3. ; sub_46E280+65
  4. .text:00496DF0
  5. .text:00496DF0 var_10          = dword ptr -10h
  6. .text:00496DF0 var_C           = dword ptr -0Ch
  7. .text:00496DF0 var_4           = dword ptr -4
  8. .text:00496DF0 arg_0           = byte ptr  4
  9. .text:00496DF0
  10. .text:00496DF0                 push    0FFFFFFFFh
  11. .text:00496DF2                 push    offset loc_541E02
  12. .text:00496DF7                 mov     eax, large fs:0
  13. .text:00496DFD                 push    eax
  14. .text:00496DFE                 push    ecx
  15. .text:00496DFF                 push    ebx
  16. .text:00496E00                 push    ebp
  17. .text:00496E01                 push    edi
  18. .text:00496E02                 mov     eax, dword_64A5F8
  19. .text:00496E07                 xor     eax, esp
  20. .text:00496E09                 push    eax
  21. .text:00496E0A                 lea     eax, [esp+20h+var_C]
  22. .text:00496E0E                 mov     large fs:0, eax
  23. .text:00496E14                 mov     eax, dword_65B97C
  24. .text:00496E19                 push    eax
  25. .text:00496E1A                 push    esi
  26. ; Вот здесь используется число 158 (9Eh)
  27. .text:00496E1B                 mov     ecx, 9Eh
  28. .text:00496E20                 mov     [esp+28h+var_10], esi
  29. .text:00496E24                 call    sub_41FA70
  30. .text:00496E29                 xor     edi, edi
  31. .text:00496E2B                 mov     [esp+20h+var_4], edi
  32. .text:00496E2F                 mov     dword ptr [esi], offset off_600B6C
  33. .text:00496E35                 mov     ebx, 1
  34. .text:00496E3A                 mov     ebp, offset off_5F278C
  35. .text:00496E3F                 lea     ecx, [esi+50h]
  36. .text:00496E42                 mov     [esi+3Ch], edi
  37. .text:00496E45                 mov     [esi+38h], edi
  38. ...
Под отладчиком можно убедиться, что действительно именно этот фрагмент кода отвечает за открытие диалогового окна с регистрацией. Теперь посмотрим откуда и при каких условиях она вызывается. Первая же перекрестная ссылка дает следующий код:
  1. .text:0045F04C                 mov     ecx, offset dword_66FD68
  2. .text:0045F051                 call    edx
  3. .text:0045F053                 mov     esi, eax
  4. ; Вызвать какую-то процедуру какой-то проверки
  5. .text:0045F055                 call    sub_46D1C0
  6. .text:0045F05A                 add     esp, 4
  7. ; Если она вернула AL!=0, то окно регистрации открывать не надо
  8. .text:0045F05D                 test    al, al
  9. .text:0045F05F                 jnz     short loc_45F0B8
  10. .text:0045F061                 mov     eax, dword_66FD68
  11. .text:0045F066                 mov     edx, [eax+0Ch]
  12. .text:0045F069                 mov     ecx, offset dword_66FD68
  13. .text:0045F06E                 call    edx
  14. .text:0045F070                 mov     ecx, eax        ; Source
  15. .text:0045F072                 lea     edi, [esp+1698h+var_15C8]
  16. .text:0045F079                 call    sub_4745C0
  17. .text:0045F07E                 sub     esp, 28h
  18. .text:0045F081                 mov     esi, edi
  19. .text:0045F083                 mov     edi, esp
  20. .text:0045F085                 mov     ecx, 0Ah
  21. .text:0045F08A                 rep movsd
  22. .text:0045F08C                 lea     esi, [esp+16C0h+var_1598]
  23. ; Открыть окно с предложением зарегистрироваться
  24. .text:0045F093                 call    sub_496DF0
  25. .text:0045F098                 mov     ecx, esi
  26. .text:0045F09A                 call    sub_4958C0
  27. .text:0045F09F                 test    eax, eax
  28. .text:0045F0A1                 jnz     short loc_45F0AB
  29. .text:0045F0A3                 push    1               ; Code
  30. .text:0045F0A5                 call    ds:exit
  31. .text:0045F0AB ; ------------------------------------------------
  32. .text:0045F0AB loc_45F0AB:
  33. .text:0045F0AB                 lea     eax, [esp+1698h+var_1598]
  34. .text:0045F0B2                 push    eax
  35. .text:0045F0B3                 call    sub_45F3D0
Для обхода защиты достаточно сделать так, чтобы процедура проверки всегда возвращала AL=1, в этом случае программа будет считать себя зарегистрированной даже при отсутствии лицензии.
  1. .text:0046D1C0 sub_46D1C0      proc near
  2. .text:0046D1C0 var_390         = byte ptr -390h
  3. .text:0046D1C0 var_368         = byte ptr -368h
  4. .text:0046D1C0 var_4           = dword ptr -4
  5. .text:0046D1C0 arg_0           = byte ptr  4
  6. .text:0046D1C0
  7. ; Заменить первые команды процедуры на MOV AL,1; RET
  8. .text:0046D1C0                 sub     esp, 390h
  9. .text:0046D1C6                 mov     eax, dword_64A5F8
  10. .text:0046D1CB                 xor     eax, esp
  11. .text:0046D1CD                 mov     [esp+390h+var_4], eax
  12. .text:0046D1D4                 cmp     [esp+390h+arg_0], 0
  13. .text:0046D1DC                 push    ebx
  14. .text:0046D1DD                 push    edi
  15. .text:0046D1DE                 jnz     short loc_46D1E9
  16. .text:0046D1E0                 cmp     byte_6702E4, 0
  17. .text:0046D1E7                 jnz     short loc_46D231
  18. .text:0046D1E9 loc_46D1E9:
  19. .text:0046D1E9                 lea     eax, [esp+398h+var_368]
  20. .text:0046D1ED                 push    eax
  21. .text:0046D1EE                 call    sub_46C220
  22. .text:0046D1F3                 mov     ecx, esi        ; Source
  23. .text:0046D1F5                 lea     edi, [esp+398h+var_390]
  24. .text:0046D1F9                 mov     byte_6702E4, 1
  25. .text:0046D200                 call    sub_4745C0
  26. .text:0046D205                 mov     ecx, edi
  27. .text:0046D207                 lea     ebx, [esp+398h+var_368]
  28. .text:0046D20B                 call    sub_46B520
  29. .text:0046D210                 test    al, al
  30. .text:0046D212                 setnz   al
  31. ; Установить флаг зарегистрированности
  32. .text:0046D215                 mov     byte_670B34, al
  33. .text:0046D21A                 pop     edi
  34. .text:0046D21B                 pop     ebx
  35. .text:0046D21C                 mov     ecx, [esp+390h+var_4]
  36. .text:0046D223                 xor     ecx, esp
  37. .text:0046D225                 call    sub_51D219
  38. .text:0046D22A                 add     esp, 390h
  39. .text:0046D230                 retn
  40. .text:0046D231 ; --------------------------------------------------
  41. .text:0046D231 loc_46D231:
  42. .text:0046D231                 mov     ecx, [esp+398h+var_4]
  43. .text:0046D238                 mov     al, byte_670B34
  44. .text:0046D23D                 pop     edi
  45. .text:0046D23E                 pop     ebx
  46. .text:0046D23F                 xor     ecx, esp
  47. .text:0046D241                 call    sub_51D219
  48. .text:0046D246                 add     esp, 390h
  49. .text:0046D24C                 retn
  50. .text:0046D24C sub_46D1C0      endp
Сохраняем изменения, запускаем программу. Ни слова о регистрации, все функции работают. Перевод часов на пару месяцев вперед тоже не причиняет программе никаких неудобств. Что и требовалось получить :) Приятного вам администрирования!

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

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

Комментарии

Отзывы посетителей сайта о статье
Sasha (02.01.2013 в 14:56):
Добрый день.
А с последней версией программы такое тоже работает?
ManHunter (11.08.2012 в 16:59):
IDA, HiEW, OllyDbg, голова, руки. В большинстве случаев этого вполне достаточно.
Женя (11.08.2012 в 10:34):
Мастер! Обзор Ваших инструментов осветите.
Eugeny (03.01.2011 в 17:09):
Я повторить не смог за целую ночь, видать руки кривые, инструменты тупые
или смертным это не дано...
ManHunter (21.12.2010 в 07:37):
Это ситуации не меняет, здесь готового вареза никогда не будет.
Alexey (21.12.2010 в 00:38):
Знал, что не спишь, еще знаком с тобой с региона59...
Ладно, на руборде народ отзывчевее....
ManHunter (21.12.2010 в 00:31):
Ну точно не здесь. Гуглояндексы в помощь.
Alexey (21.12.2010 в 00:17):
Столько хорошего... а где простым смертным скачать уже вскрытую програмку то? И не только эту хочется (
-=bigcatwar=- (06.09.2010 в 18:11):
ai da molodca ManHunter :)
user (25.03.2010 в 12:43):
))) NoKG. А всё же спасибо.
ManHunter (24.03.2010 в 17:47):
eXeScope - это дело привычки, не более.
Rustamer (24.03.2010 в 15:30):
ManHunter объясни, почему ты предпочитаешь eXeScope? Это религиозные убеждения или у него есть какие-то преимущества по сравнению с аналогами? Напиши как-нибудь обзорчик хороших редакторов ресурсов. Вообще интересно было бы почитать какие ты инструменты для реверсинга предпочитаешь. Наверняка что-нибудь новое встречу :).
По статьям абсолютно согласен - нужны именно такие простые статьи на простеньких программах. С одной стороны можно на крякмисах учится, но тут все таки реальные программы, хоть удовольствие новички будут получать от небольшого успеха. Только про ИДУ имхо лучше не стоит - сложновато все-таки.
А за прожку спасибо. Не видел чего-то такую. Приглянулась, хотя PuTTY святое.
НашОтветЧемберлену (24.03.2010 в 01:08):
Если кого обидел извините, не хотел. Борюсь за право новичков получать материал в доступной и понятной форме. ManHunter твои "статейки" мне кажутся очень полезным материалом для новичков, а если будут такие сложные труды, как на других сайтах и блогах, то это уже будет не гуд. Понятное дело, что есть те кто уже готов справиться со сложными задачами, но лично я ценю этот блог, за доступность и простоту излагаемого материала.
ManHunter (23.03.2010 в 23:22):
Ну еще только ругани мне тут не хватало.

AyTkACT, у меня ж больше тысячи релизов, я на старом сайте по несколько штук каждый день выкладывал. Так что есть из чего выбрать :))
НашОтветЧемберлену (23.03.2010 в 22:07):
ManHunter, делает правильное дело, его статьи лишний раз поучиться, как работать на Тёмной стороне силы. И я благодарен ему за его творчество, сколько разных статей перечитано, но такого грамотного и хорошо оформленного подхода ещё не было. Зачитываюсь. Так что не стоит в чужой монастырь со своим Руководством идти. Не нравиться идите дальше, блогов море, а полезное не трожь!

ManHunter продолжай, ждем новых творений. Кстати, а вы могли бы немного про ИДА расписать, как и чего ею работать?
AyTkACT (23.03.2010 в 19:32):
Меня всё терзает вопрос: где ты откапываешь такой софт?
Куда не плюнь везде с защитой навесной, или вот Vit Registry Fix 10, который как раз сейчас попался под руку, вроде б UPX и всё, но не всё так просто, плюс к тому P-Code VB.
Противно и даже копать не хочется.

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

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

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