Исследование защиты программы Teleport Pro
Скриншот программы Teleport Pro
Teleport Pro - один из лучших оффлайновых браузеров, позволяющих целиком выкачивать сайты с сохранением всех внутренних ссылок и структуры. Также может сохранять отдельные типы файлов, например, только картинки нужного размера. Кроме версии Pro есть еще и другие версии программы, но разница между ними только в цене, в максимальном количестве одиночных страниц в проекте, и расширенные версии доступны для скачивания только после их покупки. Но обычно хватает версии Pro, которую можно свободно скачать с офсайта. Недостаток у всех версий один - они все хотят денег.
Запускаем программу, открываем окно регистрации, вводим любые левые данные, получаем отлуп: "We're sorry! The registration number you entered appears to be invalid". Нехорошая строка находится дизассемблером:
Code (Assembler) : Убрать нумерацию
- .data:0049112C aWeReSorryTheRe db 'We',27h,'re sorry! The registration number'
- .data:0049112C db ' you entered appears to b...'
- .data:0049112C ; DATA XREF: .data:off_48C310
Code (Assembler) : Убрать нумерацию
- .data:0048C310 ; LPCSTR off_48C310
- ; DATA XREF: sub_42EC7A:loc_42ED05
- .data:0048C310 off_48C310 dd offset aWeReSorryTheRe
- .data:0048C310 ; "We're sorry! The registration number y"...
Code (Assembler) : Убрать нумерацию
- ...
- .text:0042ECB3 cmp esi, ebx
- .text:0042ECB5 mov ebp, offset aUser ; "User"
- .text:0042ECBA jz short loc_42ED15
- .text:0042ECBC push dword ptr [edi+0D5h] ; Str
- ; Вызвать функцию генерации серийного номера на основании введенного имени
- .text:0042ECC2 call sub_42F675
- ; Сгенерированный серийник совпадает с введенным?
- .text:0042ECC7 cmp esi, eax
- .text:0042ECC9 pop ecx
- .text:0042ECCA jnz short loc_42ECDB
- .text:0042ECCC push ebx ; int
- .text:0042ECCD push ebx ; uType
- ; Сообщение об успешной регистрации
- .text:0042ECCE push off_48C290 ; lpText
- .text:0042ECD4 call sub_4542AB
- .text:0042ECD9 jmp short loc_42ED50
- .text:0042ECDB ; --------------------------------------------
- .text:0042ECDB
- .text:0042ECDB loc_42ECDB:
- .text:0042ECDB mov edi, [edi+0D5h]
- .text:0042ECE1 cmp [edi-8], ebx
- .text:0042ECE4 jnz short loc_42ECF0
- .text:0042ECE6 push ebx
- .text:0042ECE7 push ebx
- .text:0042ECE8 push off_48C308
- .text:0042ECEE jmp short loc_42ED0B
- .text:0042ECF0 ; ----------------------------------------
- .text:0042ECF0
- .text:0042ECF0 loc_42ECF0:
- .text:0042ECF0 push edi ; Str
- ; Вызвать функцию проверки введенного серийного номера
- .text:0042ECF1 call sub_42F675
- .text:0042ECF6 pop ecx
- ; Если функция вернула 0, то введено слишком короткое имя, иначе
- ; введены неправильные регистрационные данные
- .text:0042ECF7 test eax, eax
- .text:0042ECF9 push ebx ; int
- .text:0042ECFA push ebx ; uType
- .text:0042ECFB jnz short loc_42ED05
- ; Сообщение о слишком коротком введенном имени
- .text:0042ECFD push off_48C30C
- .text:0042ED03 jmp short loc_42ED0B
- .text:0042ED05 ; -----------------------------------------------------
- .text:0042ED05
- .text:0042ED05 loc_42ED05:
- ; Сообщение об ошибке
- .text:0042ED05 push off_48C310 ; lpText
- .text:0042ED0B
- .text:0042ED0B loc_42ED0B:
- .text:0042ED0B call sub_4542AB
- .text:0042ED10 jmp loc_42EDED
- ...
Code (Assembler) : Убрать нумерацию
- .text:0042F675 push edi
- .text:0042F676 mov edi, [esp+4+Str]
- .text:0042F67A test edi, edi
- .text:0042F67C jz short loc_42F687
- .text:0042F67E push edi ; Str
- ; Получить длину введенного имени
- .text:0042F67F call _strlen
- .text:0042F684 pop ecx
- .text:0042F685 jmp short loc_42F689
- .text:0042F687 ; -------------------------------------------------------
- .text:0042F687
- .text:0042F687 loc_42F687:
- .text:0042F687 xor eax, eax
- .text:0042F689
- .text:0042F689 loc_42F689:
- ; Длина имени должна быть не менее 5 символов
- .text:0042F689 cmp eax, 5
- .text:0042F68C jnb short loc_42F692
- .text:0042F68E xor eax, eax
- .text:0042F690 pop edi
- .text:0042F691 retn
- .text:0042F692 ; -------------------------------------------------------
- .text:0042F692
- .text:0042F692 loc_42F692:
- .text:0042F692 push ebx
- .text:0042F693 push esi
- ; Начальная константа для генерации серийного номера
- .text:0042F694 mov esi, 5DFEE4A4h
- .text:0042F699 xor ebx, ebx
- .text:0042F69B
- .text:0042F69B loc_42F69B:
- ; Регистр EDI - указатель на текущее положение "кадра" в имени
- .text:0042F69B test edi, edi
- .text:0042F69D jz short loc_42F6A8
- .text:0042F69F push edi ; Str
- .text:0042F6A0 call _strlen
- .text:0042F6A5 pop ecx
- .text:0042F6A6 jmp short loc_42F6AA
- .text:0042F6A8 ; -------------------------------------------------------
- .text:0042F6A8
- .text:0042F6A8 loc_42F6A8:
- .text:0042F6A8 xor eax, eax
- .text:0042F6AA
- .text:0042F6AA loc_42F6AA:
- .text:0042F6AA add eax, 0FFFFFFFCh
- ; "Кадр" за 4 символа до конца имени?
- .text:0042F6AD cmp ebx, eax
- .text:0042F6AF jnb short loc_42F6BD
- ; ПоXORить константу с 4 символами имени в "кадре"
- .text:0042F6B1 xor esi, [ebx+edi]
- .text:0042F6B4 test bl, 40h
- .text:0042F6B7 jz short loc_42F6BA
- .text:0042F6B9 inc ebx
- .text:0042F6BA
- .text:0042F6BA loc_42F6BA:
- .text:0042F6BA inc ebx
- .text:0042F6BB jmp short loc_42F69B
- .text:0042F6BD ; -------------------------------------------------------
- .text:0042F6BD
- .text:0042F6BD loc_42F6BD:
- ; В регистре EAX правильный серийный номер для введенного имени
- ; Переведите его в десятичное число и можно повторить регистрацию уже с этим
- ; правильным серийником
- .text:0042F6BD mov eax, esi
- .text:0042F6BF pop esi
- .text:0042F6C0 pop ebx
- .text:0042F6C1 pop edi
- .text:0042F6C2 retn
- .text:0042F6C2 sub_42F675 endp
А теперь поковыряемся в реестре в ветке, где хранятся данные о регистрации. В программе полей ввода только два: имя и номер, а в реестр записывается еще один пустой ключ Company:
[HKEY_LOCAL_MACHINE\SOFTWARE\Tennyson Maxwell\Teleport Pro]
"Name"="ManHunter"
"Company"=""
"Registration"=dword:1fb7b8db
Попробуем его отредактировать и сохранить изменения. Получается вполне симпатичная картина:
Программа успешно зарегистрирована
Теперь для регистрации можно использовать следующий reg-файл:
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Tennyson Maxwell\Teleport Pro]
"Name"="ManHunter"
"Company"="Perm Crack Laboratory"
"Registration"=dword:1fb7b8db
Все поля, естественно, могут быть с вашими регистрационными данными. Вот такая защита. Автор не меняет алгоритм регистрации уже много лет, поэтому есть вероятность, что и в следующих версиях также ничего не изменится.
Просмотров: 6404 | Комментариев: 6
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Влад
(24.06.2012 в 00:13):
Извините пожалуйста. Не хотел обидеть.
Владимир
(22.06.2012 в 15:57):
;---------------------------
push offset Buffer ;В буфере имя, полученное любым способом от пользователя
;---------------------------
call KEY_GEN
;---------------------------
KEY_GEN proc
push ebp
mov ebp,esp
mov edi, [ebp+8h]
push edi
call lstrlen
cmp eax, 5
jnb loc_42FAAD
;здесь должен быть обработчик события--размер имени не должен быть меньше пяти букв
mov eax,0FFFFFFFFh ;указатель ошибки
mov esp,ebp
pop ebp
ret
loc_42FAAD:
mov esi,5DFEE4A4h
xor ebx,ebx
loc_42FAB6:
push edi
call lstrlen
add eax,0FFFFFFFCh
cmp ebx,eax
jnb loc_42FAD8
xor esi,[ebx+edi]
inc ebx
jmp loc_42FAB6
loc_42FAD8:
mov eax, esi ;в аккумуляторе шестнадцатеричное число, которое надо перевести в десятичное функцией wsprintf
mov esp,ebp
pop ebp
ret
KEY_GEN endp
;---------------------------
Весь текст взят из IDA Pro!
Это masm, не fasm!
Все проверено работает!
push offset Buffer ;В буфере имя, полученное любым способом от пользователя
;---------------------------
call KEY_GEN
;---------------------------
KEY_GEN proc
push ebp
mov ebp,esp
mov edi, [ebp+8h]
push edi
call lstrlen
cmp eax, 5
jnb loc_42FAAD
;здесь должен быть обработчик события--размер имени не должен быть меньше пяти букв
mov eax,0FFFFFFFFh ;указатель ошибки
mov esp,ebp
pop ebp
ret
loc_42FAAD:
mov esi,5DFEE4A4h
xor ebx,ebx
loc_42FAB6:
push edi
call lstrlen
add eax,0FFFFFFFCh
cmp ebx,eax
jnb loc_42FAD8
xor esi,[ebx+edi]
inc ebx
jmp loc_42FAB6
loc_42FAD8:
mov eax, esi ;в аккумуляторе шестнадцатеричное число, которое надо перевести в десятичное функцией wsprintf
mov esp,ebp
pop ebp
ret
KEY_GEN endp
;---------------------------
Весь текст взят из IDA Pro!
Это masm, не fasm!
Все проверено работает!
ManHunter
(06.04.2011 в 17:09):
Слышь, школота, если у тебя руки растут из жопы, то лизни розетку, не засоряй своей тупизной генофонд планеты. Читай что такое реестр, что такое шестнадцатеричные числа, а только потом, дебил, разевай свою пасть, что не работает.
vic
(06.04.2011 в 17:00):
Эх!!! я так в тебя верил! Не работает твоя кря!!!
Вот учись у пацанов малолетних
[del]
Вот учись у пацанов малолетних
[del]
Жека
(30.11.2009 в 02:07):
Лучше пропатчить - проверку имени и размера можно убрать легко, заменив 2 условных перехода (0040DB47 и 0040DBA9)на безусловные, а дальше делай с ним что угодно, например перевести на русский. Но дальше что делать? (Я только учусь). Хочется что-б работало без установки и рег.файла.
Вова
(24.10.2009 в 05:44):
Аплодисменты !!!!!!!!!
Добавить комментарий
Заполните форму для добавления комментария