Blog. Just Blog

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

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

Программа Mosaic Creator предназначена для создания из фотографии профессиональных коллажей на основе пачки исходных изображений, ASCII-арта, пикселизации исходного изображения, а также множества других эффектнейших преобразований графики. Тут можно посмотреть примеры готовых коллажей. Стоит ли говорить, что это все чего-то стоит?

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

Сообщение о неправильной регистрации
Сообщение о неправильной регистрации

Отлично, строка для анализа у нас есть. Исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер. Когда он закончит работу, по тексту строки сообщения выходим на следующий код:
  1. CODE:0053B486                 mov     eax, [ebx+2EAh]
  2. ; Вызвать функцию проверки регистрации
  3. CODE:0053B48C                 call    sub_61072C
  4. ; Сохранить ее результаты из EAX в ESI
  5. CODE:0053B491                 mov     esi, eax
  6. CODE:0053B493 loc_53B493:
  7. ; ESI = 0? 
  8. CODE:0053B493                 test    esi, esi
  9. ; Нет, больше, значит программа имеет какую-то регистрацию
  10. CODE:0053B495                 jge     short loc_53B4E3
  11. CODE:0053B497                 mov     eax, [ebx+2C6h]
  12. CODE:0053B49D                 xor     edx, edx
  13. CODE:0053B49F                 call    sub_458CA0
  14. CODE:0053B4A4                 push    0
  15. CODE:0053B4A6                 lea     edx, [ebp+var_18]
  16. CODE:0053B4A9                 mov     eax, offset aBadRegistratio
  17. ; "Bad registration number"
  18. CODE:0053B4AE                 call    sub_5CAB28
  19. CODE:0053B4B3                 mov     eax, [ebp+var_18]
  20. CODE:0053B4B6                 mov     cx, word_53B804
  21. CODE:0053B4BD                 mov     dl, 1
  22. CODE:0053B4BF                 call    sub_451A58
  23. CODE:0053B4C4                 inc     ds:dword_668024
  24. CODE:0053B4CA                 cmp     ds:dword_668024, 3
  25. CODE:0053B4D1                 jl      loc_53B745
  26. CODE:0053B4D7                 mov     eax, ebx
  27. CODE:0053B4D9                 call    sub_4757E4
  28. CODE:0053B4DE                 jmp     loc_53B745
  29. CODE:0053B4E3 ; --------------------------------------
  30. CODE:0053B4E3 loc_53B4E3:
  31. CODE:0053B4E3                 lea     edx, [ebp+var_4]
  32. ; Сохранить данные регистрации
  33. CODE:0053B4E6                 mov     eax, offset aRegusernumber
  34. ; "RegUserNumber"
  35. CODE:0053B4EB                 call    sub_602188
  36. CODE:0053B4F0                 lea     edx, [ebp+var_1C]
  37. CODE:0053B4F3                 mov     eax, [ebx+2C6h]
  38. CODE:0053B4F9                 call    sub_458C70
  39. CODE:0053B4FE                 mov     edx, [ebp+var_1C]
  40. CODE:0053B501                 mov     eax, [ebp+var_4]
  41. CODE:0053B504                 call    sub_405308
  42. CODE:0053B509                 jnz     short loc_53B517
  43. CODE:0053B50B                 mov     eax, ebx
  44. CODE:0053B50D                 call    sub_4757E4
  45. CODE:0053B512                 jmp     loc_53B745
  46. CODE:0053B517 ; --------------------------------------
  47. CODE:0053B517 loc_53B517:
  48. CODE:0053B517                 mov     eax, [ebp+var_4]
  49. CODE:0053B51A                 mov     edx, [ebx+2EAh]
  50. CODE:0053B520                 call    sub_405308
  51. CODE:0053B525                 jnz     short loc_53B547
  52. CODE:0053B527                 lea     edx, [ebp+var_20]
  53. CODE:0053B52A                 mov     eax, [ebx+2C6h]
  54. CODE:0053B530                 call    sub_458C70
  55. CODE:0053B535                 cmp     [ebp+var_20], 0
  56. CODE:0053B539                 jnz     short loc_53B547
  57. CODE:0053B53B                 mov     eax, ebx
  58. CODE:0053B53D                 call    sub_4757E4
  59. CODE:0053B542                 jmp     loc_53B745
  60. CODE:0053B547 ; --------------------------------------
  61. CODE:0053B547 loc_53B547:
  62. CODE:0053B547                 mov     eax, ds:off_666A68
  63. CODE:0053B54C                 mov     eax, [eax]
  64. CODE:0053B54E                 mov     eax, [eax+562h]
  65. CODE:0053B554                 xor     edx, edx
  66. CODE:0053B556                 call    sub_44CAF4
  67. ; ESI = 1?
  68. CODE:0053B55B                 cmp     esi, 1
  69. ; Если да, то регистрация для версии Lite
  70. CODE:0053B55E                 jnz     short loc_53B580
  71. CODE:0053B560                 push    0
  72. CODE:0053B562                 lea     edx, [ebp+var_24]
  73. CODE:0053B565                 mov     eax, offset aYouAreRegister
  74. ; "You are registered Lite version, thank "...
  75. CODE:0053B56A                 call    sub_5CAB28
  76. CODE:0053B56F                 mov     eax, [ebp+var_24]
  77. CODE:0053B572                 mov     cx, word_53B804
  78. CODE:0053B579                 mov     dl, 2
  79. CODE:0053B57B                 call    sub_451A58
  80. CODE:0053B580 loc_53B580:
  81. ; ESI = 2?
  82. CODE:0053B580                 cmp     esi, 2
  83. ; Если нет, то что-то непонятное
  84. CODE:0053B583                 jnz     short loc_53B5A5
  85. ; Регистрация для версии Professional
  86. CODE:0053B585                 push    0
  87. CODE:0053B587                 lea     edx, [ebp+var_28]
  88. CODE:0053B58A                 mov     eax, offset aYouAreRegist_0
  89. ; "You are registered Professional version"...
  90. CODE:0053B58F                 call    sub_5CAB28
  91. CODE:0053B594                 mov     eax, [ebp+var_28]
  92. CODE:0053B597                 mov     cx, word_53B804
  93. CODE:0053B59E                 mov     dl, 2
  94. CODE:0053B5A0                 call    sub_451A58
Функция проверки небольшая. Что-то тут вызывается, что-то с чем-то сравнивается, не суть важно. На выходе в регистре EAX имеем значение от 0 до 2.
  1. CODE:0061072C sub_61072C      proc near
  2. CODE:0061072C                 push    ebp
  3. CODE:0061072D                 mov     ebp, esp
  4. CODE:0061072F                 add     esp, 0FFFFFFF8h
  5. CODE:00610732                 push    ebx
  6. CODE:00610733                 push    esi
  7. CODE:00610734                 push    edi
  8. CODE:00610735                 mov     [ebp+var_4], eax
  9. CODE:00610738                 mov     eax, [ebp+var_4]
  10. CODE:0061073B                 call    sub_4053AC
  11. CODE:00610740                 xor     eax, eax
  12. CODE:00610742                 push    ebp
  13. CODE:00610743                 push    offset loc_610809
  14. CODE:00610748                 push    dword ptr fs:[eax]
  15. CODE:0061074B                 mov     fs:[eax], esp
  16. CODE:0061074E                 mov     [ebp+var_8], 0FFFFFFFFh
  17. CODE:00610755                 cmp     [ebp+var_4], 0
  18. CODE:00610759                 jz      loc_6107F3
  19. CODE:0061075F                 call    sub_602144
  20. CODE:00610764                 xor     eax, eax
  21. CODE:00610766                 push    ebp
  22. CODE:00610767                 push    offset loc_6107E4
  23. CODE:0061076C                 push    dword ptr fs:[eax]
  24. CODE:0061076F                 mov     fs:[eax], esp
  25. CODE:00610772                 mov     eax, [ebp+var_4]
  26. CODE:00610775                 call    sub_61087C
  27. CODE:0061077A                 lea     eax, [ebp+var_4]
  28. CODE:0061077D                 call    sub_6108D8
  29. CODE:00610782                 mov     eax, [ebp+var_4]
  30. CODE:00610785                 mov     edx, offset dword_610824
  31. CODE:0061078A                 call    sub_405308
  32. CODE:0061078F                 jnz     short loc_610798
  33. CODE:00610791                 mov     [ebp+var_8], 2
  34. CODE:00610798 loc_610798:
  35. CODE:00610798                 mov     eax, [ebp+var_4]
  36. CODE:0061079B                 mov     edx, offset dword_61083C
  37. CODE:006107A0                 call    sub_405308
  38. CODE:006107A5                 jnz     short loc_6107AE
  39. CODE:006107A7                 mov     [ebp+var_8], 2
  40. CODE:006107AE loc_6107AE:
  41. CODE:006107AE                 mov     eax, [ebp+var_4]
  42. CODE:006107B1                 mov     edx, offset dword_610854
  43. CODE:006107B6                 call    sub_405308
  44. CODE:006107BB                 jnz     short loc_6107C4
  45. CODE:006107BD                 mov     [ebp+var_8], 1
  46. CODE:006107C4 loc_6107C4:
  47. CODE:006107C4                 mov     eax, [ebp+var_4]
  48. CODE:006107C7                 mov     edx, offset loc_61086C
  49. CODE:006107CC                 call    sub_405308
  50. CODE:006107D1                 jnz     short loc_6107DA
  51. CODE:006107D3                 mov     [ebp+var_8], 1
  52. CODE:006107DA loc_6107DA:
  53. CODE:006107DA                 xor     eax, eax
  54. CODE:006107DC                 pop     edx
  55. CODE:006107DD                 pop     ecx
  56. CODE:006107DE                 pop     ecx
  57. CODE:006107DF                 mov     fs:[eax], edx
  58. CODE:006107E2                 jmp     short loc_6107EE
  59. CODE:006107E4 ; --------------------------------------
  60. CODE:006107E4 loc_6107E4:
  61. CODE:006107E4                 jmp     sub_4045FC
  62. CODE:006107E9 ; --------------------------------------
  63. CODE:006107E9                 call    sub_404964
  64. CODE:006107EE loc_6107EE:
  65. CODE:006107EE                 call    sub_602154
  66. CODE:006107F3 loc_6107F3:
  67. CODE:006107F3                 xor     eax, eax
  68. CODE:006107F5                 pop     edx
  69. CODE:006107F6                 pop     ecx
  70. CODE:006107F7                 pop     ecx
  71. CODE:006107F8                 mov     fs:[eax], edx
  72. CODE:006107FB                 push    offset loc_610810
  73. CODE:00610800 loc_610800:
  74. CODE:00610800                 lea     eax, [ebp+var_4]
  75. CODE:00610803                 call    sub_404F0C
  76. CODE:00610808                 retn
  77. CODE:00610809 ; --------------------------------------
  78. CODE:00610809 loc_610809:
  79. CODE:00610809                 jmp     loc_4048B0
  80. CODE:0061080E ; --------------------------------------
  81. CODE:0061080E                 jmp     short loc_610800
  82. CODE:00610810 ; --------------------------------------
  83. CODE:00610810 loc_610810:
  84. CODE:00610810                 mov     eax, [ebp+var_8]
  85. CODE:00610813                 pop     edi
  86. CODE:00610814                 pop     esi
  87. CODE:00610815                 pop     ebx
  88. CODE:00610816                 pop     ecx
  89. CODE:00610817                 pop     ecx
  90. CODE:00610818                 pop     ebp
  91. CODE:00610819                 retn
  92. CODE:00610819 sub_61072C      endp
Как видно по коду, у программы есть два режима: Lite и Professional. Ну что ж, пить - так чтобы лежа качало, ебать - так королеву. Меньше, чем на Professional я не согласен. Версии Lite соответствует возвращенное из функции проверки значение 1, а версии Professional значение 2. Значит патчим начало функции проверки парой команд MOV EAX,2 и RET. Сохраняем изменения, проверяем.

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

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

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

Цель достигнута, никаких ограничений по функционалу больше нет, никаких триальных окон больше не появляется. В окне "О программе" красуется введенное регистрационное имя.

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

Комментарии

Отзывы посетителей сайта о статье
Petya (12.01.2024 в 16:27):
ЦитатаПо всей видимости, его можно скачать откуда-то с офсайта легально зарегистрированным пользователям.

Даже не надо быть легально зарегистрированным, пароль - единственное, что их защищает. На странице с загрузками вниз пролистать.

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

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

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