Blog. Just Blog

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

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

iSunshare Password Genius предназначена для восстановления забытых паролей от офисных документов, архивов, баз данных, всего несколько десятков различных форматов. Взлом пароля работает путем прямого перебора, по шаблону, по словарю. Без регистрации можно восстановить только пароли не длиннее 3 символов, что для практического применения бесполезно. Это досадное недоразумение надо исправить.

Забираем с офсайта дистрибутив максимально доступной Advanced-версии программы, устанавливаем, смотрим. Основной файл упакован UPX без каких-либо модификаций, так что распаковываем его самим же UPX командой upx -d PasswordGeniusAdvancedTrial.exe. Распакованный файл отправляем на разбор в дизассемблер, а параллельно посмотрим на внешние проявления триальности:

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

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

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

Дизассемблер уже закончил свою работу, можно поискать место, где и при каких условиях это сообщение появляется.
  1. .text:00423E9D                 call    sub_424100
  2. .text:00423EA2                 lea     eax, [esp+1Ch]
  3. .text:00423EA6                 push    eax
  4. .text:00423EA7                 call    sub_4037F0
  5. .text:00423EAC                 mov     byte ptr [esp+3Ch], 1
  6. .text:00423EB1                 mov     eax, [esp+10h]
  7. .text:00423EB5                 cmp     dword ptr [eax-0Ch], 0
  8. .text:00423EB9                 jl      short loc_423F1E
  9. .text:00423EBB                 push    offset aIsunsharePas_0
  10. ; "ISUNSHARE-PASSWORD-GENIUS-ADVANCED"
  11. .text:00423EC0                 push    eax
  12. .text:00423EC1                 call    _wcsstr
  13. .text:00423EC6                 add     esp, 8
  14. .text:00423EC9                 test    eax, eax
  15. .text:00423ECB                 jz      short loc_423F1E
  16. .text:00423ECD                 sub     eax, [esp+10h]
  17. .text:00423ED1                 sar     eax, 1
  18. .text:00423ED3                 jnz     short loc_423F1E
  19. .text:00423ED5                 mov     ecx, ebx
  20. .text:00423ED7                 push    ecx
  21. .text:00423ED8                 call    sub_423540
  22. .text:00423EDD                 test    al, al
  23. .text:00423EDF                 jz      short loc_423F1E
  24. .text:00423EE1                 mov     edx, ebx
  25. .text:00423EE3                 push    edx
  26. .text:00423EE4                 call    sub_4236D0
  27. .text:00423EE9                 test    al, al
  28. .text:00423EEB                 jz      short loc_423F2C
  29. .text:00423EED                 call    ?AfxGetModuleState
  30. .text:00423EF2                 mov     eax, [eax+4]
  31. .text:00423EF5                 mov     esi, [eax+20h]
  32. .text:00423EF8                 call    sub_40F930
  33. .text:00423EFD                 push    0
  34. .text:00423EFF                 push    offset aIsunsharePassw
  35. ; "iSunshare Password Genius Advanced Tria"...
  36. .text:00423F04                 push    offset aThankYouForReg
  37. ; "Thank you for registering!"
  38. .text:00423F09                 mov     ecx, edi
  39. .text:00423F0B                 call    sub_45509E
  40. .text:00423F10                 mov     eax, [edi]
  41. .text:00423F12                 mov     edx, [eax+158h]
  42. .text:00423F18                 mov     ecx, edi
  43. .text:00423F1A                 call    edx
  44. .text:00423F1C                 jmp     short loc_423F3F
  45. .text:00423F1E ; ---------------------------------------
  46. .text:00423F1E loc_423F1E:
  47. .text:00423F1E                 push    30h
  48. .text:00423F20                 push    offset aRegistration
  49. ; "Registration"
  50. .text:00423F25                 push    offset aTheCodeYouVeEn
  51. ; "The Code you've entered invalid!"
  52. .text:00423F2A                 jmp     short loc_423F38
Несколько условных переходов по адресам 00423EB9, 00423ECB, 00423ED3, 00423EDF и 00423EEB, каждый из которых ведет на сообщение о неправильной регистрации. Забиваем их все командами NOP. Теперь любой серийник будет принят как правильный. Но это еще не все, ведь серийник проверяется при старте, после чего к интерфейсу применяются все признаки триальности или наоборот, не применяются. Надо найти место, где выполняются аналогичные проверки. Выйти на второе место помогают перекрестные ссылки на функцию sub_423540, которая вызывается как раз из двух мест.
  1. .text:004234CE                 mov     eax, [esp+1Ch+var_14]
  2. .text:004234D2                 cmp     [eax-0Ch], ebx
  3. .text:004234D5                 jl      short loc_4234FD
  4. .text:004234D7                 push    offset aIsunsharePas_0
  5. ; "ISUNSHARE-PASSWORD-GENIUS-ADVANCED"
  6. .text:004234DC                 push    eax             ; wchar_t *
  7. .text:004234DD                 call    _wcsstr
  8. .text:004234E2                 add     esp, 8
  9. .text:004234E5                 cmp     eax, ebx
  10. .text:004234E7                 jz      short loc_4234FD
  11. .text:004234E9                 sub     eax, [esp+1Ch+var_14]
  12. .text:004234ED                 sar     eax, 1
  13. .text:004234EF                 jnz     short loc_4234FD
  14. .text:004234F1                 lea     edx, [esp+1Ch+var_14]
  15. .text:004234F5                 push    edx             ; wchar_t *
  16. .text:004234F6                 call    sub_423540
  17. .text:004234FB                 mov     bl, al
  18. .text:004234FD loc_4234FD:
  19. .text:004234FD                 mov     [esp+1Ch+var_4], 0FFFFFFFFh
  20. .text:00423505                 mov     eax, [esp+1Ch+var_14]
Точно так же NOP'им условные переходы по адресам 004234D5,004234E7 и 004234EF. Но обратите внимание, что результат функции sub_423540 сохраняется в регистр BL. А он, как мы помним по предыдущему кусочку кода, должен быть ненулевым. Ок, открываем функцию проверки по адресу 00423540, забиваем в начало пару команд MOV AL,1 и RET 4, чтобы не порушить стек при возврате. Сохраняем изменения.

Теперь можно проверить работоспособность. Открываем архивный файл "TEST.ZIP" с паролем и получаем сообщение, что такой формат не поддерживается. Переименовываем файл в "TEST.zip" и программа его без проблем принимает в обработку. Серьезно???! Чувствительность к регистру расширения? Написать программу для взлома паролей и запороться на такой элементарщине? Стыдоба какая.

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

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

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

Комментарии

Отзывы посетителей сайта о статье
1 (23.09.2020 в 09:34):
Так там их две этих процедуры я их пропачил и все а остальное как описал автор
fury (22.09.2020 в 13:36):
nop
nop
Адрес 00423540 указан, вот туда и надо вносить изменения.
MOV AL,1 RET 4
ManHunter (19.09.2020 в 10:07):
Адрес 00423540 указан, вот туда и надо вносить изменения.
1 (19.09.2020 в 07:51):
Место с BL нашел то не то CPU Disasm
Address   Hex dump          Command                                  Comments
0042351D  |.  8B11          MOV EDX,DWORD PTR DS:[ECX]
0042351F  |.  50            PUSH EAX
00423520  |.  8B42 04       MOV EAX,DWORD PTR DS:[EDX+4]
00423523  |.  FFD0          CALL EAX
00423525  |>  8AC3          MOV AL,BL
00423527  |.  8B4C24 10     MOV ECX,DWORD PTR SS:[ARG.4]
0042352B  |.  64:890D 00000 MOV DWORD PTR FS:[0],ECX
00423532  |.  59            POP ECX
? Не сильно шарю в процедурах, в какое начало надо пройти 00423540
FFFF (17.09.2020 в 16:25):
Там ещё raid версия есть. Ссылок не наблюдается, но конструруем по аналогии и...
https://www.isunshare.com/down...ius-raid.exe
ManHunter (17.09.2020 в 09:17):
Там еще образ диска для сброса паролей на винде при загрузке
user (17.09.2020 в 09:16):
Но размер дистрибутива устрашающий.

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

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

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