Исследование защиты программы InScribe
Скриншот программы InScribe
InScribe - легковесный и очень шустрый почтовый клиент. При своем небольшом размере обладает всеми необходимыми функциями для работы с почтовыми аккаунтами. Портативный, кроссплатформенный, есть даже бесплатная версия для работы с одним аккаунтом. Прямо даже рука на такую красоту не поднимается. Но десять баксов - это все-таки десять баксов.
Забираем с офсайта последний на сегодняшний день дистрибутив, устанавливаем, запускаем. После выбора языка нам сразу предлагают зарегистрироваться. Логично, ведь это платная версия и никакого пробного использования она не предполагает. На ввод левых данных реагирует следующим сообщением:
Сообщение о неправильной регистрации
Так, исходные данные у нас есть. Исполняемый файл ничем не накрыт, отправляем его в дизассемблер. Затем поиском по всем файлам в папке с установленной программой ищем эту строчку. Она обнаружится в файле Resources\Scribe.lr8
Строка сообщения в языковом файле
Раз она там есть, значит каким-то образом программа должна эту строчку загружать. Если посмотреть внимательно, то выяснится, что у каждой строки в языковом файле есть уникальный идентификатор "Cid". Для интересующей нас строки он имеет значение 1090. Переведем десятичное число в шестнадцатеричное и поищем в коде место, где этот индекс используется.
Code (Assembler) : Убрать нумерацию
- .text:005D80C3 mov ecx, [ebp+var_114]
- .text:005D80C9 sub ecx, 20h
- .text:005D80CC call sub_40E880
- .text:005D80D1 push eax
- ; Вызвать функцию проверки
- .text:005D80D2 call sub_5D8680
- .text:005D80D7 add esp, 10h
- .text:005D80DA movzx eax, al
- ; Если она вернула AL!=0, то регистрационные данные правильные
- .text:005D80DD test eax, eax
- .text:005D80DF jnz short loc_5D810B
- .text:005D80E1 push 0
- .text:005D80E3 mov ecx, off_8037AC
- .text:005D80E9 push ecx
- ; Значение строки по умолчанию, если в ресурсах ее не найдено
- .text:005D80EA push offset aThatNameAndKey
- ; "That name and key don't match."
- .text:005D80EF push 442h
- ; Загрузить строку с индексом 1090 (442h)
- .text:005D80F4 call ds:LgiLoadString
- .text:005D80FA add esp, 8
- .text:005D80FD push eax
- .text:005D80FE push 0
- ; Вывести сообщение о неправильной регистрации
- .text:005D8100 call ds:LgiMsg
- .text:005D8106 add esp, 10h
Code (Assembler) : Убрать нумерацию
- .text:005D869A cmp [ebp+arg_0], 0
- .text:005D869E jz loc_5D879A
- .text:005D86A4 mov eax, [ebp+arg_4]
- .text:005D86A7 cmp dword ptr [eax], 6
- .text:005D86AA jnz loc_5D879A
- .text:005D86B0 mov ecx, [ebp+arg_4]
- .text:005D86B3 cmp dword ptr [ecx+8], 10h
- .text:005D86B7 jnz loc_5D879A
Code (Assembler) : Убрать нумерацию
- .text:005D8721 mov eax, [ebp+arg_8]
- .text:005D8724 push eax
- .text:005D8725 mov ecx, [ebp+arg_0]
- .text:005D8728 push ecx
- .text:005D8729 push offset aSS_24 ; "%s%s"
- .text:005D872E push 100h ; SizeInBytes
- .text:005D8733 lea edx, [ebp+DstBuf]
- .text:005D8739 push edx ; DstBuf
- ; Сформировать строку из регистрационного имени и "соли"
- .text:005D873A call ds:sprintf_s
- .text:005D8740 add esp, 14h
- .text:005D8743 push 0FFFFFFFFh
- .text:005D8745 lea eax, [ebp+DstBuf]
- .text:005D874B push eax
- .text:005D874C lea ecx, [ebp+Buf1]
- .text:005D874F push ecx
- ; Посчитать MD5 от полученной строки
- .text:005D8750 call ds:MDStringToDigest
- .text:005D8756 add esp, 0Ch
- .text:005D8759 mov edx, [ebp+arg_4]
- .text:005D875C mov eax, [edx+8]
- .text:005D875F push eax ; Size
- .text:005D8760 mov ecx, [ebp+arg_4]
- .text:005D8763 mov edx, [ecx+0Ch]
- .text:005D8766 push edx ; Buf2
- .text:005D8767 lea eax, [ebp+Buf1]
- .text:005D876A push eax ; Buf1
- ; Сравнить полученный хэш с переданными в функцию двоичными данными
- .text:005D876B call ds:memcmp
- .text:005D8771 add esp, 0Ch
- .text:005D8774 test eax, eax
- .text:005D8776 jnz short loc_5D8784
- .text:005D8778 mov [ebp+var_120], 1
- .text:005D8782 jmp short loc_5D878E
Code (Assembler) : Убрать нумерацию
- .text:005D8053 mov edx, [eax+164h]
- .text:005D8059 call edx
- .text:005D805B push eax ; Str
- .text:005D805C lea eax, [ebp+var_168]
- ; Адрес строки с введенным серийником
- .text:005D8062 push eax ; int
- .text:005D8063 call sub_5D87B0
- .text:005D8068 add esp, 8
- .text:005D806B mov [ebp+var_12C], eax
- .text:005D8071 mov ecx, [ebp+var_12C]
Code (Assembler) : Убрать нумерацию
- .text:005D87FE mov eax, [ebp+Str]
- .text:005D8801 push eax ; Str
- .text:005D8802 call ds:strlen
- .text:005D8808 add esp, 4
- .text:005D880B push eax
- .text:005D880C mov ecx, [ebp+Str]
- .text:005D880F push ecx
- .text:005D8810 push 100h
- .text:005D8815 lea edx, [ebp+var_110]
- .text:005D881B push edx
- .text:005D881C call ds:ConvertBase64ToBinary
- .text:005D8822 add esp, 10h
- .text:005D8825 mov [ebp+var_118], eax
- .text:005D882B cmp [ebp+var_118], 0
Закрываем отладчик, запускаем программу в обычном режиме и повторяем регистрацию найденным серийным номером. Программа ничего не выдает, но сразу стартует и в заголовке главного окна появляется введенное имя.
Программа успешно зарегистрирована
Цель достигнута. Спасибо автору за хорошую программу и несложную защиту. Рабочий кейген теперь вы можете написать самостоятельно.
Просмотров: 1686 | Комментариев: 10
Метки: исследование защиты, сеть
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
doz.me
(16.01.2021 в 20:05):
MaCTeP, в одну строку в batch/sh-файле можно уложиться, а тут 517 килобайт. "Это какой-то позор" (с)
ManHunter
(26.11.2019 в 10:49):
Поменял ссылку, спасибо
CheshireCat
(26.11.2019 в 10:13):
InScribe Email Client 2.3 [Stable]:
http://www.memecode.com/inscri...-v2.3.14.exe
http://www.memecode.com/inscri...-v2.3.16.exe
http://www.memecode.com/inscri...-v2.3.14.exe
http://www.memecode.com/inscri...-v2.3.16.exe
0110
(26.11.2019 в 06:35):
в таком случае, нет ссылки для скачки inScribe. Там где "Забираем с офсайта последний на сегодняшний день дистрибутив" качается i.Scribe. На офсайте ссылки для inScribe тоже не увидел..
ManHunter
(25.11.2019 в 19:42):
Так там и было две версии, бесплатная i.Scribe и платная inScribe
Василий
(25.11.2019 в 19:34):
Дистрибутив поменяли на платную и бесплатную версии
0110
(25.11.2019 в 18:10):
не получилось ни вылечить, ни заюзать. При установке портабельной версии и выборе русского языка окна регистрации нет (может, дистрибутив поменяли или регистрация для всех языков кроме русского?). При настройке почты (с яндекса) необходим протокол SSL, который требует дополнительного софта в системе.., т.е. уже портабельной программы не получится..
MaCTeP
(24.11.2019 в 18:14):
Упаковал :)
https://mega.nz/#!nWhgjAyJ!tsJ...y09sRm3IysYw
https://mega.nz/#!nWhgjAyJ!tsJ...y09sRm3IysYw
ManHunter
(24.11.2019 в 16:49):
MaCTeP, работает, только размер какой-то монстрячий :)
MaCTeP
(23.11.2019 в 23:38):
Нарисовал кейген к данному софту. Прошу проверить результат на валидность.
https://mega.nz/#!iLxHQYCA!3S7...rMo750o88meA
Доброй ночи...
https://mega.nz/#!iLxHQYCA!3S7...rMo750o88meA
Доброй ночи...
Добавить комментарий
Заполните форму для добавления комментария