Исследование защиты программы ForceToolkit
Скриншот программы ForceToolkit
Как-то один начинающий программист на старой флешке нашел свою лабораторную работу по информатике на тему "Отправка сообщений окнам". И плевать, что за работу препод влепил ему трояк с большой натяжкой, рынок профессионального ПО ждать не будет. Надо срочно выкатить на дистрибьюторские сайты свое поделие за много-много денег. Вот так в природе появилась программа ForceToolkit. Перечислять все косяки этой программы я не буду, если говорить компьютерным языком, то это *.*
Забираем с сайта дистрибутив портативной версии, распаковываем, смотрим. Единственный исполняемый файл написан на Visual Basic, он ничем не упакован, отправляем его в дизассемблер.
Сообщение о неправильной регистрации
На попытку зарегистрировать программу какими-нибудь левыми данными она реагирует вот таким сообщением. Поиском строки в дизассемблере выходим на следующий код:
Code (Assembler) : Убрать нумерацию
- .text:006FA323 push eax
- .text:006FA324 push 2
- .text:006FA326 call ds:__vbaFreeVarList
- .text:006FA32C add esp, 0Ch
- .text:006FA32F mov dword ptr [ebp-4], 8
- .text:006FA336 mov ecx, [ebp-44h]
- .text:006FA339 push ecx
- ; Проверить длину строки
- .text:006FA33A call ds:__vbaLenBstr
- ; Длина должна быть 0Ch (12) символов или меньше
- .text:006FA340 cmp eax, 0Ch
- .text:006FA343 jle loc_6FA4A9
- .text:006FA349 mov dword ptr [ebp-4], 9
- .text:006FA350 mov dword ptr [ebp-98h], 80020004h
- .text:006FA35A mov dword ptr [ebp-0A0h], 0Ah
- .text:006FA364 mov dword ptr [ebp-88h], 80020004h
- .text:006FA36E mov dword ptr [ebp-90h], 0Ah
- .text:006FA378 mov dword ptr [ebp-0B8h], offset off_6DE000
- .text:006FA382 mov dword ptr [ebp-0C0h], 8
- .text:006FA38C lea edx, [ebp-0C0h]
- .text:006FA392 lea ecx, [ebp-80h]
- .text:006FA395 call ds:__vbaVarDup
- .text:006FA39B mov dword ptr [ebp-0A8h], offset aWrongCode_
- ; "Wrong Code."
- .text:006FA3A5 mov dword ptr [ebp-0B0h], 8
- .text:006FA3AF lea edx, [ebp-0B0h]
- .text:006FA3B5 lea ecx, [ebp-70h]
- .text:006FA3B8 call ds:__vbaVarDup
- .text:006FA3BE lea edx, [ebp-0A0h]
Code (Assembler) : Убрать нумерацию
- .text:006FA7D9 cmp word ptr [ebp-3Ch], 0FFFFh
- .text:006FA7DE jnz loc_6FACEF
- .text:006FA7E4 cmp word ptr [ebp-34h], 0FFFFh
- .text:006FA7E9 jnz loc_6FACEF
- .text:006FA7EF cmp word ptr [ebp-40h], 0FFFFh
- .text:006FA7F4 jnz loc_6FACEF
- .text:006FA7FA cmp word ptr [ebp-38h], 0FFFFh
- .text:006FA7FF jnz loc_6FACEF
Code (Assembler) : Убрать нумерацию
- .text:006FA805 mov dword ptr [ebp-4], 1Bh
- .text:006FA80C mov dword ptr [ebp-0A8h], offset aAppdata
- ; "APPDATA"
- .text:006FA816 mov dword ptr [ebp-0B0h], 8
- .text:006FA820 lea edx, [ebp-0B0h]
- .text:006FA826 lea ecx, [ebp-70h]
- .text:006FA829 call ds:__vbaVarDup
- .text:006FA82F lea edx, [ebp-70h]
- .text:006FA832 push edx
- .text:006FA833 lea eax, [ebp-80h]
- .text:006FA836 push eax
- .text:006FA837 call ds:rtcEnvironVar
- .text:006FA83D mov dword ptr [ebp-0B8h], offset aSoundft_dll
- ; "\\soundft.dll"
- .text:006FA847 mov dword ptr [ebp-0C0h], 8
- .text:006FA851 lea ecx, [ebp-80h]
- .text:006FA854 push ecx
- .text:006FA855 lea edx, [ebp-0C0h]
- .text:006FA85B push edx
- .text:006FA85C lea eax, [ebp-90h]
- .text:006FA862 push eax
- .text:006FA863 call ds:__vbaVarCat
- .text:006FA869 push eax
- .text:006FA86A call ds:__vbaStrVarMove
- .text:006FA870 mov edx, eax
- .text:006FA872 lea ecx, [ebp-48h]
- .text:006FA875 call ds:__vbaStrMove
- .text:006FA87B push eax
- .text:006FA87C push 1
- .text:006FA87E push 0FFFFFFFFh
- .text:006FA880 push 2
- .text:006FA882 call ds:__vbaFileOpen
- .text:006FA888 lea ecx, [ebp-48h]
- .text:006FA88B call ds:__vbaFreeStr
- .text:006FA891 lea ecx, [ebp-90h]
- .text:006FA897 push ecx
- ...
- ...
- ...
- .text:006FAA7A mov dword ptr [ebp-98h], 80020004h
- .text:006FAA84 mov dword ptr [ebp-0A0h], 0Ah
- .text:006FAA8E mov dword ptr [ebp-88h], 80020004h
- .text:006FAA98 mov dword ptr [ebp-90h], 0Ah
- .text:006FAAA2 mov dword ptr [ebp-0B8h], offset off_6DE090
- .text:006FAAAC mov dword ptr [ebp-0C0h], 8
- .text:006FAAB6 lea edx, [ebp-0C0h]
- .text:006FAABC lea ecx, [ebp-80h]
- .text:006FAABF call ds:__vbaVarDup
- .text:006FAAC5 mov dword ptr [ebp-0A8h], aRegisteredSucc
- ; "Registered successfully!"
- .text:006FAACF mov dword ptr [ebp-0B0h], 8
- .text:006FAAD9 lea edx, [ebp-0B0h]
- .text:006FAADF lea ecx, [ebp-70h]
- .text:006FAAE2 call ds:__vbaVarDup
- .text:006FAAE8 lea ecx, [ebp-0A0h]
Запускаем программу под отладчиком, ставим точку останова по адресу 006FA7D9. Отпускаем на выполнение, регистрируем каким-нибудь 12-значным серийником. Когда точка останова сработает, в пошаговом режиме проходим все проверки, меняя при необходимости значение флага ZF, чтобы условные переходы не выполнились. Ну или просто заNOP'ив их в памяти. После прохождения проверок отпускаем процесс на выполнение.
Сообщение об успешной регистрации
Программа благодарит за регистрацию, в системной папке создается текстовый файл soundft.dll со всякой бредятиной. Закрываем отладчик, запускаем программу в обычном режиме.
Программа успешно зарегистрирована
Триальное окно с напоминанием при старте больше не появляется, в заголовке окна красуется надпись "PRO". Вот и все, цель достигнута, даже ничего не пришлось патчить. Пойду покурю кальян, мне срочно надо это забыть и развидеть. А программа, естественно, только на удаление.
Просмотров: 1428 | Комментариев: 10
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
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 в виртуалке люблю заюзать :)
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):
Здравствуйте,
в этой рубрике нравилось и продолжает нравиться предисловие ..
в этой рубрике нравилось и продолжает нравиться предисловие ..
Добавить комментарий
Заполните форму для добавления комментария
https://pastebin.com/8TWK8wfG