Blog. Just Blog

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

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

Как-то один начинающий программист на старой флешке нашел свою лабораторную работу по информатике на тему "Отправка сообщений окнам". И плевать, что за работу препод влепил ему трояк с большой натяжкой, рынок профессионального ПО ждать не будет. Надо срочно выкатить на дистрибьюторские сайты свое поделие за много-много денег. Вот так в природе появилась программа ForceToolkit. Перечислять все косяки этой программы я не буду, если говорить компьютерным языком, то это *.*

Забираем с сайта дистрибутив портативной версии, распаковываем, смотрим. Единственный исполняемый файл написан на Visual Basic, он ничем не упакован, отправляем его в дизассемблер.

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

На попытку зарегистрировать программу какими-нибудь левыми данными она реагирует вот таким сообщением. Поиском строки в дизассемблере выходим на следующий код:
  1. .text:006FA323                 push    eax
  2. .text:006FA324                 push    2
  3. .text:006FA326                 call    ds:__vbaFreeVarList
  4. .text:006FA32C                 add     esp, 0Ch
  5. .text:006FA32F                 mov     dword ptr [ebp-4], 8
  6. .text:006FA336                 mov     ecx, [ebp-44h]
  7. .text:006FA339                 push    ecx
  8. ; Проверить длину строки
  9. .text:006FA33A                 call    ds:__vbaLenBstr
  10. ; Длина должна быть 0Ch (12) символов или меньше
  11. .text:006FA340                 cmp     eax, 0Ch
  12. .text:006FA343                 jle     loc_6FA4A9
  13. .text:006FA349                 mov     dword ptr [ebp-4], 9
  14. .text:006FA350                 mov     dword ptr [ebp-98h], 80020004h
  15. .text:006FA35A                 mov     dword ptr [ebp-0A0h], 0Ah
  16. .text:006FA364                 mov     dword ptr [ebp-88h], 80020004h
  17. .text:006FA36E                 mov     dword ptr [ebp-90h], 0Ah
  18. .text:006FA378                 mov     dword ptr [ebp-0B8h], offset off_6DE000
  19. .text:006FA382                 mov     dword ptr [ebp-0C0h], 8
  20. .text:006FA38C                 lea     edx, [ebp-0C0h]
  21. .text:006FA392                 lea     ecx, [ebp-80h]
  22. .text:006FA395                 call    ds:__vbaVarDup
  23. .text:006FA39B                 mov     dword ptr [ebp-0A8h], offset aWrongCode_
  24. ; "Wrong Code."
  25. .text:006FA3A5                 mov     dword ptr [ebp-0B0h], 8
  26. .text:006FA3AF                 lea     edx, [ebp-0B0h]
  27. .text:006FA3B5                 lea     ecx, [ebp-70h]
  28. .text:006FA3B8                 call    ds:__vbaVarDup
  29. .text:006FA3BE                 lea     edx, [ebp-0A0h]
Серийник у нас представляет одну строку, тут проверяется длина строки, то есть длина правильного серийного номера должна быть не более 12 символов. Переходим в листинге на адрес правильной ветки алгоритма, смотрим дальше. Тут выполняется всякая свистопляска с преобразованием символов, какими-то мелкими сравнениями в цикле и тому подобная имитация бурной деятельности. Заканчивается она пачкой проверок:
  1. .text:006FA7D9                 cmp     word ptr [ebp-3Ch], 0FFFFh
  2. .text:006FA7DE                 jnz     loc_6FACEF
  3. .text:006FA7E4                 cmp     word ptr [ebp-34h], 0FFFFh
  4. .text:006FA7E9                 jnz     loc_6FACEF
  5. .text:006FA7EF                 cmp     word ptr [ebp-40h], 0FFFFh
  6. .text:006FA7F4                 jnz     loc_6FACEF
  7. .text:006FA7FA                 cmp     word ptr [ebp-38h], 0FFFFh
  8. .text:006FA7FF                 jnz     loc_6FACEF
Если все эти проверки не выполняются, то начинается форсированный пробой днища. Часть кода я пропущу для наглядности.
  1. .text:006FA805                 mov     dword ptr [ebp-4], 1Bh
  2. .text:006FA80C                 mov     dword ptr [ebp-0A8h], offset aAppdata
  3. ; "APPDATA"
  4. .text:006FA816                 mov     dword ptr [ebp-0B0h], 8
  5. .text:006FA820                 lea     edx, [ebp-0B0h]
  6. .text:006FA826                 lea     ecx, [ebp-70h]
  7. .text:006FA829                 call    ds:__vbaVarDup
  8. .text:006FA82F                 lea     edx, [ebp-70h]
  9. .text:006FA832                 push    edx
  10. .text:006FA833                 lea     eax, [ebp-80h]
  11. .text:006FA836                 push    eax
  12. .text:006FA837                 call    ds:rtcEnvironVar
  13. .text:006FA83D                 mov     dword ptr [ebp-0B8h], offset aSoundft_dll
  14. ; "\\soundft.dll"
  15. .text:006FA847                 mov     dword ptr [ebp-0C0h], 8
  16. .text:006FA851                 lea     ecx, [ebp-80h]
  17. .text:006FA854                 push    ecx
  18. .text:006FA855                 lea     edx, [ebp-0C0h]
  19. .text:006FA85B                 push    edx
  20. .text:006FA85C                 lea     eax, [ebp-90h]
  21. .text:006FA862                 push    eax
  22. .text:006FA863                 call    ds:__vbaVarCat
  23. .text:006FA869                 push    eax
  24. .text:006FA86A                 call    ds:__vbaStrVarMove
  25. .text:006FA870                 mov     edx, eax
  26. .text:006FA872                 lea     ecx, [ebp-48h]
  27. .text:006FA875                 call    ds:__vbaStrMove
  28. .text:006FA87B                 push    eax
  29. .text:006FA87C                 push    1
  30. .text:006FA87E                 push    0FFFFFFFFh
  31. .text:006FA880                 push    2
  32. .text:006FA882                 call    ds:__vbaFileOpen
  33. .text:006FA888                 lea     ecx, [ebp-48h]
  34. .text:006FA88B                 call    ds:__vbaFreeStr
  35. .text:006FA891                 lea     ecx, [ebp-90h]
  36. .text:006FA897                 push    ecx
  37. ...
  38. ...
  39. ...
  40. .text:006FAA7A                 mov     dword ptr [ebp-98h], 80020004h
  41. .text:006FAA84                 mov     dword ptr [ebp-0A0h], 0Ah
  42. .text:006FAA8E                 mov     dword ptr [ebp-88h], 80020004h
  43. .text:006FAA98                 mov     dword ptr [ebp-90h], 0Ah
  44. .text:006FAAA2                 mov     dword ptr [ebp-0B8h], offset off_6DE090
  45. .text:006FAAAC                 mov     dword ptr [ebp-0C0h], 8
  46. .text:006FAAB6                 lea     edx, [ebp-0C0h]
  47. .text:006FAABC                 lea     ecx, [ebp-80h]
  48. .text:006FAABF                 call    ds:__vbaVarDup
  49. .text:006FAAC5                 mov     dword ptr [ebp-0A8h], aRegisteredSucc
  50. ; "Registered successfully!"
  51. .text:006FAACF                 mov     dword ptr [ebp-0B0h], 8
  52. .text:006FAAD9                 lea     edx, [ebp-0B0h]
  53. .text:006FAADF                 lea     ecx, [ebp-70h]
  54. .text:006FAAE2                 call    ds:__vbaVarDup
  55. .text:006FAAE8                 lea     ecx, [ebp-0A0h]
Кто с наскока не понял, я поясню. Разворачивается переменная окружения %AppData%, к ней дописывается имя файла "\soundft.dll". Дальше этот файл создается, в него что-то записывается и по итогу выводится сообщение об успешной регистрации. В 2022-м году продолжать маскировать свое дерьмо под динамические библиотеки и прятать их в системных папках? Серьезно?

Запускаем программу под отладчиком, ставим точку останова по адресу 006FA7D9. Отпускаем на выполнение, регистрируем каким-нибудь 12-значным серийником. Когда точка останова сработает, в пошаговом режиме проходим все проверки, меняя при необходимости значение флага ZF, чтобы условные переходы не выполнились. Ну или просто заNOP'ив их в памяти. После прохождения проверок отпускаем процесс на выполнение.

Сообщение об успешной регистрации
Сообщение об успешной регистрации

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
voffka (23.10.2022 в 18:44):
кейген на масме
https://pastebin.com/8TWK8wfG
voffka (23.10.2022 в 16:45):
Чуть выше проверок есть ещё 4 проверки _vbaVarTstEq, которые посимвольно проверяют код на наличие 4 символов WD86, если они есть, то ты молодец.
ManHunter (18.10.2022 в 17:46):
В основном OllyDebug, изредка x64dbg
Zeroes (18.10.2022 в 17:42):
какие отладчики используете?

ps. Я до сих пор NTICE под XPsp3 в виртуалке люблю заюзать :)
dElk (14.10.2022 в 17:07):
Ради интереса поковырял Force Delete на той-же страничке. Затейники у них там собрались.
ManHunter (13.10.2022 в 12:45):
*.* - со времен MS-DOS означает любой файл или каталог с любым возможным расширением при выполнении файловых операций, в моем контексте это "вообще всё".
NobootRecord (13.10.2022 в 12:33):
С предисловием и лабораторной работой вы классно придумали, как всегда :)
Единственное только непонятно - что означает "*.* компьютерным языком"? Это какой-то смайлик или замаскированное слово? Не совсем понял прикола...
АЕ (13.10.2022 в 10:46):
Предисловие к этой рубрике это уже, можно сказать, классика! :)
ManHunter (11.10.2022 в 01:07):
Ну да, а мне каждый раз приходится придумывать что-то новое
Musika (10.10.2022 в 17:48):
Здравствуйте,
в этой рубрике нравилось и продолжает нравиться предисловие ..

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

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

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