Исследование защиты программы KeyboardTest
Скриншот программы KeyboardTest
Программа KeyboardTest предназначена для тестирования практически всех типов проводных и беспроводных клавиатур: WiFi, PS/2 и USB. Показывает скан-коды нажатых клавиш, тестирует световые индикаторы, кнопки расширенной клавиатуры, комбинации клавиатуры и мыши, макро-клавиши и т.п. Хороший инструмент, когда надо проверить что не так с клавиатурой или если вам надо держать под рукой справочник по кодам клавиш при разработке программ. Несмотря на всю пользу, выкладывать тридцатку зелени за софт - это не в моих правилах.
Забираем с сайта дистрибутив, устанавливаем, смотрим. Исполняемый файл вроде ничем не упакован, поэтому отправляем его на переработку в дизассемблер. Запускаем программу и сразу же получаем окно с предложением зарегистрироваться.
Окно регистрации
При попытке ввода неправильных данных программа реагирует соответствующим сообщением и дальше не пускает. Если ничего не вводить и продолжить работу в ознакомительном периоде, то в окне "О программе" красуется сообщение, что программе не зарегистрирована и выводится количество оставшихся дней.
Окно "О программе"
Поиском по этим строчкам в файле обнаружится следующее совпадение:
Строки сообщения в файле
Посмотрим, где и как это используется.
Code (Assembler) : Убрать нумерацию
- .text:00401387 lea eax, [ebp+String]
- ; Проверить переменную, если ее значение 1, то программа не зарегистрирована
- .text:0040138D cmp dword_4334B0, 1
- .text:00401394 jnz short loc_4013AC
- .text:00401396 push dword_4337DC
- .text:0040139C push offset aIDaysLeftInEva
- ; "%i Days left in evaluation"
- .text:004013A1 push eax
- .text:004013A2 call sub_40E5C8
- .text:004013A7 add esp, 0Ch
- .text:004013AA jmp short loc_4013BA
- .text:004013AC ; ---------------------------------------
- .text:004013AC loc_4013AC:
- .text:004013AC push offset aRegisteredVers
- ; "Registered Version"
- .text:004013B1 push eax
- .text:004013B2 call sub_40E5C8
- .text:004013B7 add esp, 8
Перекрестные ссылки на переменную
Первый фрагмент, отвечающий за инициализацию:
Code (Assembler) : Убрать нумерацию
- .text:004093E8 cmp [ebp+var_19C], 0
- ; По умолчанию программа не зарегистрирована
- .text:004093EF mov dword_4334B0, 1
- ; Условный переход на основании предыдущего сравнения
- .text:004093F9 jz short loc_409424
- ; Программа зарегистрирована
- .text:004093FB mov dword_4334B0, 0
- .text:00409405 xor eax, eax
- .text:00409407 jmp short loc_409410
Code (Assembler) : Убрать нумерацию
- .text:0040D1E8 call sub_407DF0
- .text:0040D1ED mov eax, hInstance
- .text:0040D1F2 add esp, 4
- .text:0040D1F5 mov esi, ds:LoadIconA
- ; Инициализация переменных при запуске программы
- .text:0040D1FB mov dword_4334B0, 1
- .text:0040D205 mov dword_4337DC, 0
- .text:0040D20F push offset IconName ; "KeyboardTest"
- .text:0040D214 push eax ; hInstance
- .text:0040D215 mov [ebp+var_540.cbSize], 30h
- .text:0040D21F mov [ebp+var_540.style], 3
По строчке "User:" находим код, где формируется итоговая строка. Кто знаком с программированием, наверняка узнает функцию printf.
Code (Assembler) : Убрать нумерацию
- ; Указатель на строку регистрационного имени
- .text:0040140E push offset DstBuf
- .text:00401413 lea eax, [ebp+String]
- .text:00401419 push offset aUserS ; "User: %s"
- .text:0040141E push eax
- .text:0040141F call sub_40E5C8
Программа успешно "зарегистрирована"
Красота! Вот теперь все недостатки программы KeyboardTest окончательно устранены, ей можно пользоваться без ограничений.
Просмотров: 2266 | Комментариев: 7
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Eka
(12.03.2019 в 12:02):
Спасибо ! Возьму как "Get Started" для IDA Pro. Очень хороший пример, т.к. нет обфускации, чисто работа с дизассемблером.
ManHunter
(07.03.2019 в 14:58):
Да, там еще есть отсылки к Armaccess.dll и несколько типичных переменных армудилы. Хотя фактически они нигде не используются.
voffka
(07.03.2019 в 00:52):
Видать на прошлых версиях проги висела арма со stolen code, видно по огромным кускам nop'oв средь кода.
user
(28.02.2019 в 01:41):
Достойный пример спасибо за основу
Ellephant
(27.02.2019 в 16:46):
ManHunter, печатной машинки! )))
ManHunter
(27.02.2019 в 14:54):
Ellephant, а цифры, а знаки препинания, а всякие F1-F12? Так шрифты можно проверять, но точно не клавиатуру.
Ellephant
(27.02.2019 в 14:47):
А в древние времена, для проверки клавиатуры достаточно было ввести текст "В чащах юга жил бы цитрус? Да, но фальшивый экземпляр." В этом тексте все клавиши печатной машинки ;)
Добавить комментарий
Заполните форму для добавления комментария