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

Скриншот программы IconTOY
IconTOY - компактная утилита для извлечения иконок из файлов любого типа: EXE, DLL, ICL, ICO, BMP. Работает на любых версиях Windows, несмотря на возраст. Но работать, честно говоря, с IconTOY не хочется. Ее делали в те времена, когда многие программисты добавляли в свои поделки огромное количество свистоперделок. Это показывало умение разработчика, "так могу, и вот так еще могу", а сейчас это считается дурным тоном. Так что для выполнения задачи лучше использовать какую-нибудь более удобную утилиту, благо их в интернетах предостаточно. И как вы догадались, IconTOY бесплатно работает только 30 дней, а затем требует денег.
Забираем с офсайта дистрибутив, устанавливаем, смотрим что и как. Главный файл ничем не упакован, отправляем его на дизассемблирование.

Триальное окно
С трудом можно найти кнопку "R", в которой находится поле для регистрации.

Сообщение о неправильной регистрации
При попытке ввести левые данные, программа реагирует на строку "Registration key error!". Пока все ожидаемо.

Ошибка
А вот если попробовать ввести буквы или длинное число, то программа падает с ошибкой. То есть мы еще ничего не сделали в плане исследования, но уже видим, что регистрационный код должен быть числом, и при этом не очень большим.
Переходим к дизассемблеру. Обычным поиском по листингу обнаруживается строка "Registration key error!". И над ней проверка, затем сообщение о удачной регистрации, строка реестра, где хранятся настройки и скорее всего регистрационные данные.
Code (Assembler) : Убрать нумерацию
- CODE:00485F9B mov eax, ds:dword_48E904
- ; Проверка
- CODE:00485FA0 call sub_485C58
- ; Если появился флаг, то регистрация выполнена
- CODE:00485FA5 cmp ds:byte_48E900, 1
- CODE:00485FAC jnz loc_486076
- ; Регистрация в реестре
- CODE:00485FB2 lea edx, [ebp+var_8]
- CODE:00485FB5 mov eax, [ebp+var_4]
- CODE:00485FB8 mov eax, [eax+30Ch]
- CODE:00485FBE call sub_42B50C
- CODE:00485FC3 mov edx, [ebp+var_8]
- CODE:00485FC6 mov eax, offset dword_48E908
- CODE:00485FCB call sub_403B5C
- CODE:00485FD0 mov dl, 1
- CODE:00485FD2 mov eax, off_45E530
- CODE:00485FD7 call sub_45E6DC
- CODE:00485FDC mov ebx, eax
- CODE:00485FDE mov cl, 1
- CODE:00485FE0 mov edx, offset aSoftwareLightt
- ; "\\software\\lighttek\\icontoy"
- CODE:00485FE5 mov eax, ebx
- CODE:00485FE7 call sub_45E8D0
- CODE:00485FEC fild ds:dword_48E904
- CODE:00485FF2 fdiv flt_4860D0
- CODE:00485FF8 call sub_402A84
- CODE:00485FFD push edx
- CODE:00485FFE push eax
- CODE:00485FFF lea eax, [ebp+var_C]
- CODE:00486002 call sub_4084B4
- CODE:00486007 mov ecx, [ebp+var_C]
- CODE:0048600A mov edx, offset dword_4860DC
- CODE:0048600F mov eax, ebx
- CODE:00486011 call sub_45EA6C
- CODE:00486016 mov ecx, ds:dword_48E908
- CODE:0048601C mov edx, offset dword_4860E8
- CODE:00486021 mov eax, ebx
- CODE:00486023 call sub_45EA6C
- CODE:00486028 mov eax, ebx
- CODE:0048602A call sub_45E744
- CODE:0048602F mov eax, ebx
- CODE:00486031 call sub_402F38
- CODE:00486036 mov eax, offset aYouAreRegister
- ; "You are registered! Thank you."
- CODE:0048603B call sub_44E080
- CODE:00486040 lea eax, [ebp+var_C]
- CODE:00486043 mov ecx, ds:dword_48E908
- CODE:00486049 mov edx, offset aRegisteredFo_0
- ; "Registered for: "
- CODE:0048604E call sub_403DD0
- CODE:00486053 mov edx, [ebp+var_C]
- CODE:00486056 mov eax, ds:dword_48E8FC
- CODE:0048605B mov eax, [eax+2E8h]
- CODE:00486061 call sub_42B53C
- CODE:00486066 mov eax, ds:off_48D280
- CODE:0048606B mov eax, [eax]
- CODE:0048606D mov dl, 1
- CODE:0048606F mov ecx, [eax]
- CODE:00486071 call dword ptr [ecx+60h]
- CODE:00486074 jmp short loc_486080
- CODE:00486076 ; ------------------------------------------
- CODE:00486076 loc_486076:
- ; Неправильная регистрация
- CODE:00486076 mov eax, offset aRegistrationKe
- ; "Registration key error!"
- CODE:0048607B call sub_44E080
- ...
Code (Assembler) : Убрать нумерацию
- CODE:00485C58 sub_485C58 proc near
- CODE:00485C58 push ebp
- CODE:00485C59 mov ebp, esp
- CODE:00485C5B push 0
- CODE:00485C5D xor edx, edx
- CODE:00485C5F push ebp
- CODE:00485C60 push offset loc_485ECD
- CODE:00485C65 push dword ptr fs:[edx]
- CODE:00485C68 mov fs:[edx], esp
- CODE:00485C6B cmp eax, 0BAA68Ch
- CODE:00485C70 jz loc_485E2F
- CODE:00485C76 cmp eax, 135A6Ah
- CODE:00485C7B jz loc_485E2F
- CODE:00485C81 cmp eax, 1362E0h
- CODE:00485C86 jz loc_485E2F
- CODE:00485C8C cmp eax, 132876h
- CODE:00485C91 jz loc_485E2F
- CODE:00485C97 cmp eax, 31EDAEh
- CODE:00485C9C jz loc_485E2F
- CODE:00485CA2 cmp eax, 31E9C6h
- CODE:00485CA7 jz loc_485E2F
- CODE:00485CAD cmp eax, 12D8A8h
- CODE:00485CB2 jz loc_485E2F
- CODE:00485CB8 cmp eax, 137F26h
- CODE:00485CBD jz loc_485E2F
- CODE:00485CC3 cmp eax, 0B8B7B6h
- CODE:00485CC8 jz loc_485E2F
- CODE:00485CCE cmp eax, 127AAEh
- CODE:00485CD3 jz loc_485E2F
- CODE:00485CD9 cmp eax, 12D2A2h
- CODE:00485CDE jz loc_485E2F
- CODE:00485CE4 cmp eax, 0B9FA2Ah
- CODE:00485CE9 jz loc_485E2F
- CODE:00485CEF cmp eax, 0B9F836h
- CODE:00485CF4 jz loc_485E2F
- ...

Сообщение об успешной регистрации
Программа говорит "спасибо", убирается кнопка регистрации, а главное, что больше нет ограничений при работе.

Программа успешно зарегистрирована
Как выяснилось, нормально работать с IconTOY не получится, и даже не только из-за кривого интерфейса. В программе полно ошибок и странно, что за столько лет эти ошибки не исправлены. А вот если использовать IconTOY как пособие, то тогда нормально, все равно удалять. Цель достигнута.
Просмотров: 231 | Комментариев: 0
Метки: исследование защиты, иконки
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария


