Исследование защиты программы Smart Photo Import
Скриншот программы Smart Photo Import
Программа Smart Photo Import помогает переносить цифровые фотоснимки из камеры или с flash-карточек разного формата. При этом Smart Photo Import автоматически переименовывает файлы на основании EXIF-данных или по установленным пользователем правилам. Также может автоматически раскладывать скопированные файлы по каталогам. Польза от программы сомнительная, тем более от платной версии, но как объект исследования может и пригодится.
Сразу скажу, что программа обновляется пару раз в месяц, поэтому некоторые данные из статьи, такие как адреса кода в исполняемом файле, могут оказаться иными. Впрочем, это касается и любой другой программы. Скачиваем дистрибутив, устанавливаем, запускаем. После старта незарегистрированной программы сразу появляется триальное окно с таймером и предложением купить или зарегистрировать ее. На ввод заведомо неправильных данных программа отреагирует вот таким сообщением:
Сообщение о неправильной регистрации
Поищем эту строчку. Файл не упакован, и искомая строка найдется в ресурсах под индексом 64798 в десятичной системе счисления или 0FD1Eh в шестнадцатеричной.
Строка в ресурсах
Отправляем файл в дизассемблер, ждем окончания его работы и теперь можно спокойно поискать, где в коде используется значение этого индекса. Шестнадцатеричного, естественно. Найдется типичный указатель на указатель.
Code (Assembler) : Убрать нумерацию
- CODE:007AAE50 off_7AAE50 dd offset hModule
- CODE:007AAE54 dd 0FD1Eh
Code (Assembler) : Убрать нумерацию
- ...
- CODE:007AAEBE call sub_40C22C
- CODE:007AAEC3 mov eax, [ebp+var_4]
- ; Получить длину регистрационного имени
- CODE:007AAEC6 call sub_40445C
- ; Имя не может быть меньше 8 символов
- CODE:007AAECB cmp eax, 8
- CODE:007AAECE jl loc_7AAF62
- ; Преобразовать имя в регистрационный ключ
- CODE:007AAED4 lea edx, [ebp+var_14]
- CODE:007AAED7 mov eax, [ebp+var_4]
- CODE:007AAEDA call sub_5DABDC
- ; Команда "cmpstr" - сравнение двух строк
- CODE:007AAEDF mov edx, [ebp+var_14]
- CODE:007AAEE2 mov eax, [ebp+var_8]
- CODE:007AAEE5 call sub_40456C
- ; Если строчки не равны, то переход
- CODE:007AAEEA jnz short loc_7AAF40
- ; Сохранить куда-то регистрационные данные
- CODE:007AAEEC lea edx, [ebp+var_18]
- CODE:007AAEEF mov eax, [ebx+2E0h]
- CODE:007AAEF5 call sub_43A4B4
- CODE:007AAEFA mov ecx, [ebp+var_18]
- CODE:007AAEFD mov edx, offset aUser_1 ; "user"
- CODE:007AAF02 mov eax, offset aRegistration_1
- ; "registration"
- CODE:007AAF07 call sub_5DBA48
- CODE:007AAF0C mov eax, offset aRegistration_1
- ; "registration"
- CODE:007AAF11 mov ecx, [ebp+var_8]
- CODE:007AAF14 mov edx, offset aRegcode_1 ; "regcode"
- CODE:007AAF19 call sub_5DBA48
- CODE:007AAF1E push 0
- CODE:007AAF20 lea edx, [ebp+var_1C]
- CODE:007AAF23 mov eax, offset off_7AAE48
- CODE:007AAF28 call sub_4076B8
- CODE:007AAF2D mov eax, [ebp+var_1C]
- CODE:007AAF30 mov cx, word_7AB024
- CODE:007AAF37 mov dl, 2
- CODE:007AAF39 call sub_460448
- CODE:007AAF3E jmp short loc_7AAF82
- CODE:007AAF40 ; ---------------------------------------------------
- ; Вывод сообщения о неправильной регистрации
- CODE:007AAF40 loc_7AAF40:
- CODE:007AAF40 push 0
- CODE:007AAF42 lea edx, [ebp+var_20]
- CODE:007AAF45 mov eax, offset off_7AAE50
- CODE:007AAF4A call sub_4076B8
- CODE:007AAF4F mov eax, [ebp+var_20]
- CODE:007AAF52 mov cx, word_7AB024
- CODE:007AAF59 mov dl, 2
- CODE:007AAF5B call sub_460448
Ссылки на строчки в регистрах отладчика
EAX указывает на введенный нами заведомо неправильный серийный номер, EDX указывает на строку, которая очень похожа на серийный номер для имени "ManHunter/ PCL". Сохраним значение строчки из регистра EDX, перезапустим программу и попробуем зарегистрировать ее с найденной парой "имя-серийник".
Программа успешно зарегистрирована
Снова перезапустим программу. На этот раз триальное окно исчезло, значит программа действительно зарегистрирована. Мне определенно нравятся такие типы защиты, когда введенный серийник сравнивается с правильным. Во-первых, это позволяет зарегистрировать программу практически легально, не прибегая к байт-хаку, распаковке, лоадерам и прочим инструментам второй линии фронта. Во-вторых, нет нужды медитировать на код и отладчик, пытаясь отреверсить алгоритм проверки с целью написания кейгена. Отлов серийников - это хорошо и правильно.
Просмотров: 5256 | Комментариев: 2
Метки: исследование защиты, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
brute
(02.08.2013 в 07:17):
Число 64798 в иде не искал, hview -не люблю идеологически. В оле не нашёл, особо и не искал. В IDR нашел процедуру проверки, стал отлаживать.. Увидел в регистрах, дампе и стеке строку рядом с reg_name. Попробовал ввести её в качестве пароля и прога зарегистрировалась - сам не понял и не запомнил как всё быстро получилось. Хотел пропатчить что-нибудь, а прога по Ctrl+F2 в оле уже не останавливается на вводе пароля (даже после переустановки).. Реестр чистить лень..
Добавить комментарий
Заполните форму для добавления комментария
HKCU\Software\New_World_Software