Исследование защиты программы Diacrit
Скриншот программы Diacrit
Программа Diacrit предназначена для удобного ввода многобайтных символов различных национальных алфавитов, математических символов и значков, которых нет на клавиатуре. Что-то типа стандартной таблицы символов Windows, только более специализированная. Символы заносятся в буфер обмена, а затем их можно вставить в нужное приложение. В незарегистрированной версии доступны только два первых символа, а лицензия стоит почти 10 килорублей. Будем это устранять.
Запускаем программу, сперва появляется наг-скрин. После этого выбираем какой-нибудь язык из предлагаемого списка, и попытаемся выбрать какой-нибудь символ, начиная с третьего. Получим вот такое триальное сообщение:
Сообщение незарегистрированной программы
Отлично, теперь поищем эту строчку в файле. Исполняемый файл ничем не упакован и не зашифрован, все находится в лучшем виде:
Нехорошая строка найдена
Теперь все как обычно, загоняем файл в дизассемблер и подождем, когда он закончит работу. После этого поищем в листинге ссылки на строку о незарегистрированности. Последовательно найдется несколько указателей, ссылающихся друг на друга.
Code (Assembler) : Убрать нумерацию
- ; DATA XREF: DATA:off_485754
- DATA:00485234 off_485234 dd offset aOnly1st2Charac
- ; "Only 1st 2 characters allowed in unregi"...
Code (Assembler) : Убрать нумерацию
- ; DATA XREF: sub_47F938+48
- DATA:00485754 off_485754 dd offset off_485234
Code (Assembler) : Убрать нумерацию
- ...
- ; Проверить двойное слово по адресу 485624
- CODE:0047F971 mov eax, ds:off_485624
- CODE:0047F976 cmp dword ptr [eax], 0
- ; Если оно не равно 0, то сообщение о незарегистрированности не выводить
- CODE:0047F979 jnz short loc_47F9A3
- CODE:0047F97B push 0
- CODE:0047F97D lea eax, [ebp+var_10]
- ; Указатель на строку 'Only 1st 2 characters allowed in unregistered version'
- CODE:0047F980 mov edx, ds:off_485754
- CODE:0047F986 mov edx, [edx]
- ; Вывести сообщение на экран
- CODE:0047F988 call sub_4046DC
- CODE:0047F98D mov eax, [ebp+var_10]
- CODE:0047F990 mov cx, word_48094C
- CODE:0047F997 mov dl, 2
- ...
Code (Assembler) : Убрать нумерацию
- CODE:0047E1FB mov edx, [ebp+var_2C]
- CODE:0047E1FE lea eax, [ebp+var_C]
- CODE:0047E201 call sub_404584
- CODE:0047E206 mov eax, ds:off_4856C4
- CODE:0047E20B mov edx, [ebp+var_C]
- CODE:0047E20E call sub_404540
- ; Указатель на флаг зарегистрированности
- CODE:0047E213 mov eax, ds:off_485624
- CODE:0047E218 xor edx, edx
- ; Записать туда дефолтное значение 0
- CODE:0047E21A mov [eax], edx
- CODE:0047E21C mov eax, [ebp+var_8]
- CODE:0047E21F mov al, [eax+5]
- ; Какая-то проверка
- CODE:0047E222 cmp al, 80h
- ; Если она не пройдена, то программа не зарегистрирована
- CODE:0047E224 jb short loc_47E231
- ; Записать значение 511h в флаг зарегистрированности
- CODE:0047E226 mov eax, ds:off_485624
- CODE:0047E22B mov dword ptr [eax], 511h
- CODE:0047E231 loc_47E231:
Программа успешно "зарегистрирована"
После патча пропал стартовый наг-скрин, ограничение на символы, пункт покупки в меню, и появилась информация о регистрации в окне "О программе". Задача выполнена.
Просмотров: 4616 | Комментариев: 12
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Srinivas
(05.08.2011 в 10:46):
ManHunter
(23.05.2011 в 10:44):
Я никогда не выкладывал дистрибутивы, тем более на свой сервер. В остальном ничего особо не изменилось. Ищешь место, где инициализируется 511h, далее патч начала процедуры проверки как написано в статье. Затраченное время около 5 минут. Никаких ложных прыжков и прочей хни не замечено. Ну и пруф, конечно, чтобы не было сомнений:
http://s11.radikal.ru/i183/110...c45c2b3d.gif
http://s11.radikal.ru/i183/110...c45c2b3d.gif
mov
(22.05.2011 в 18:24):
ранее вы ещё не выкладывали дистрибутивы на сервер, вследствие чего польза этого исследования уменьшилась (а может, увеличилась, ибо до всего надо доходить самому) - по ссылке скачивается новая версия с новой логикой защиты, новыми смещениями, строками, проверкой забаненых ключей и кучей люжных прыжков для запутывания
Isaev
(21.11.2010 в 17:43):
На счёт закейгенить, я в ней сам заблудился :)))
А что не доделал на кого зарегена?
Красивее бы было, а то как-то не закончено смотрится.
А что не доделал на кого зарегена?
Красивее бы было, а то как-то не закончено смотрится.
ezfalc0n
(16.11.2010 в 01:14):
думаю автор на донате больше б заработал, хотя нет - с таким соотношением жадности и качества поделки - врядли.
хотя - мож для их менталитета - эт нормально?
ворота поставили, а забор забыли - про защиту.
спасибо - мало таких уютных местечек в сети
хотя - мож для их менталитета - эт нормально?
ворота поставили, а забор забыли - про защиту.
спасибо - мало таких уютных местечек в сети
fat-designer
(08.11.2010 в 15:02):
Надо учить ассемблер. Интересно, с фотошопом будет столь же легко?
ManHunter
(01.11.2010 в 18:15):
Ну есть же платные блокноты, платные программы для выбора цвета, платные редакторы реестра, и другие программы для всякой прочей мелочи. Имя им Легион, и все ихние аффтары хотят подрезать бабла за свои поделия.
zummenix
(01.11.2010 в 18:13):
Мне показалось, на вид программа простая, и за это просят денег? Скоро дойдет до того, что проги показывающие что-то типа MessageBox'а станут платными :)
Vampir
(01.11.2010 в 15:37):
когда все просят патч, и кейген не нужен ;)
ManHunter
(31.10.2010 в 10:22):
Щаз придет товарищ Исаев, и скажет, что надо было закейгенить. Потом придет Вовка и скажет, что опять ничего полезного :)
AyTkACT
(31.10.2010 в 04:30):
запись в ds:off_485624 - изящное решение :)
Мануал, как обычно, полезен.
Спасибо.
Мануал, как обычно, полезен.
Спасибо.
Добавить комментарий
Заполните форму для добавления комментария
If you this program useful then please register at
Порывшись в коде нашел ad7yj38fhdG9rG7n65EhY87HrW297UJk8TF5Re3wj76HYp65WQ90pmZa ключик глотает но не регает. Как бы функционал смахивает на фулл. Но вот наг напрягает
0052CF10 /$ 55 PUSH EBP
0052CF11 |. 89E5 MOV EBP,ESP
0052CF13 |. B8 10D05200 MOV EAX,OFFSET 0052D010
0052CF18 |. A3 707F5800 MOV DWORD PTR DS:[587F70],EAX
0052CF1D |. B8 10D25200 MOV EAX,OFFSET 0052D210
0052CF22 |. A3 747F5800 MOV DWORD PTR DS:[587F74],EAX
0052CF27 |. B8 00CF5200 MOV EAX,0052CF00
0052CF2C |. A3 787F5800 MOV DWORD PTR DS:[587F78],EAX
0052CF31 |. B8 802A4000 MOV EAX,00402A80
0052CF36 |. A3 7C7F5800 MOV DWORD PTR DS:[587F7C],EAX
0052CF3B |. A0 50D65200 MOV AL,BYTE PTR DS:[52D650]
0052CF40 |. A2 807F5800 MOV BYTE PTR DS:[587F80],AL
0052CF45 |. C9 LEAVE
0052CF46 \. C3 RETN
------------------------------------------------------
0052CF50 C605 20305800 MOV BYTE PTR DS:[583020],0
0052CF57 E8 B4FFFFFF CALL 0052CF10
0052CF5C |. B8 707F5800 MOV EAX,OFFSET 00587F70
0052CF61 E8 9A34EEFF CALL 00410400
0052CF66 \. C3 RETN
Подскажите уважаемый ManHunter как первык кол обмануть чтобы нага небыло. Нопы не помогают.