Исследование защиты программы Recover Passwords
Скриншот программы Recover Passwords
Программа Recover Passwords предназначена для автоматического сбора паролей на локальном или удаленном (при наличии соответствующих прав доступа) компьютере. Она извлекает сохраненные пароли из мессендежров, ICQ-клиентов, браузеров, почтовых программ, FTP-клиентов и т.п. Полный список поддерживаемых программ есть на офсайте, посмотрите, если интересно. В демонстрационном, то есть бесплатном режиме, Recover Passwords только показывает список найденных программ, но не показывает сами найденные пароли. Сейчас мы попробуем устранить этот недостаток.
Скачиваем дистрибутив, устанавливаем, запускаем. Действительно, программа пишет, что пароли найдены, показывает учетные записи, но сами пароли не показывает. В заголовке написано "Эта копия не зарегистрированнна" (орфография оригинала сохранена), а на панели инструментов присутствует иконка "Order me". При выходе из программы открывается наг-скрин с не менее оригинальной надписью и предложением купить ее или ввести регистрационный ключ.
Окно регистрации программы
Вот, теперь у нас есть практически все проявления незарегистрированной версии, поищем условия, при которых проявляются какие-нибудь из них. В подпапке Lang в файле Russian.xml есть строки:
<String name="cSKeyValid">Спасибо за регистрацию этого продукта</String>
<String name="cSKeyInvalid">Ключ не верный</String>
Очевидно, что это сообщения о результатах проверки регистрационного ключа, а обращение к ним идет по имени cSKeyValid или, соответственно, cSKeyInvalid. Поищем их в исполняемом файле.
Строка сообщения найдена
Найдена строка в юникоде. Теперь смотрим как и при каких условиях к ним идет обращение.
Code (Assembler) : Убрать нумерацию
- ...
- .text:0097BDA8 mov eax, [eax]
- .text:0097BDAA mov edx, [ebp+var_4]
- ; Вызвать какую-то функцию проверки
- .text:0097BDAD call sub_7819D0
- .text:0097BDB2 test al, al
- ; Если она вернула AL=0, то вывести сообщение о неправильном ключе
- .text:0097BDB4 jz short loc_97BE24
- ; Иначе записать его куда-то в реестр и поблагодарить за регистрацию
- .text:0097BDB6 lea eax, [ebp+var_10]
- .text:0097BDB9 mov edx, [ebp+var_4]
- .text:0097BDBC call sub_407FB0
- .text:0097BDC1 mov eax, [ebp+var_10]
- .text:0097BDC4 push eax
- ...
Code (Assembler) : Убрать нумерацию
- .text:007819D0 sub_7819D0 proc near
- .text:007819D0 mov eax, edx
- .text:007819D2 call sub_781798
- .text:007819D7 retn
- .text:007819D7 sub_7819D0 endp
Программа успешно "зарегистрирована"
В заголовке надпись, что программа зарегистрирована, в окне "О программе" тоже, на панели инструментов пропала иконка регистрации, наг-скрина при выходе тоже нет. С виду все нормально, попробуем теперь найти пароли. На этот раз никаких проблем, все пароли открыты, что и требовалось получить. Ну а на чьих компьютерах использовать Recover Passwords - это вы уже решите самостоятельно.
Просмотров: 5647 | Комментариев: 21
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
PiaVia
(16.02.2017 в 12:08):
Для версии v1.0.0.33
.text:008154EC mov al, 1
.text:008154EE nop
.text:008154EF nop
.text:008154F0 nop
.text:008154F1 nop
.text:008154F2 nop
HEX
008154EC B0 01 90 90 90 90 90
.text:008154EC mov al, 1
.text:008154EE nop
.text:008154EF nop
.text:008154F0 nop
.text:008154F1 nop
.text:008154F2 nop
HEX
008154EC B0 01 90 90 90 90 90
Жека
(22.07.2014 в 00:37):
ManHunter, заходил я в этот call, но правка одного байта предпочтительнее для меня, тем более прога сразу уже зарегена, без всяких дополнительных манипуляций.
ManHunter
(21.07.2014 в 23:14):
Это ж очень похоже на функцию сравнения. Лучше бы поставил бряк на 007CB31B и посмотрел, что там в EAX и EDX.
А там сравнивается хэш от введенного серийника с пулом готовых хэшей валидных серийников (00755FF4). Перебиваешь любую из сумм на свою и можешь регистрировать красивым серийником. Для релиза самое оно.
А там сравнивается хэш от введенного серийника с пулом готовых хэшей валидных серийников (00755FF4). Перебиваешь любую из сумм на свою и можешь регистрировать красивым серийником. Для релиза самое оно.
Жека
(21.07.2014 в 22:31):
Описанный тут метод уже не работает. Вот новое решение для последней версии 1.0.0.25
007CB316 8B07 mov eax,[edi]
007CB318 8B55FC mov edx,[ebp-04h]
007CB31B E894CBC3FF call SUB_L00407EB4
007CB320 7504 <--- меняем на 7404 jnz L007CB326
007CB322 B301 mov bl,01h
007CB324 EB06 jmp L007CB32C
007CB326 83C704 add edi,00000004h
007CB329 4E dec esi
007CB32A 75EA jnz L007CB316
007CB32C 33C0 xor eax,eax
007CB32E 5A pop edx
007CB32F 59 pop ecx
007CB330 59 pop ecx
007CB331 648910 mov fs:[eax],edx
007CB334 6849B37C00 push L007CB349
007CB339 8D45FC lea eax,[ebp-04h]
007CB33C E88BC1C3FF call SUB_L004074CC
007CB341 C3 retn
Также этот переход можно занопить, но это как-то не красиво.
007CB316 8B07 mov eax,[edi]
007CB318 8B55FC mov edx,[ebp-04h]
007CB31B E894CBC3FF call SUB_L00407EB4
007CB320 7504 <--- меняем на 7404 jnz L007CB326
007CB322 B301 mov bl,01h
007CB324 EB06 jmp L007CB32C
007CB326 83C704 add edi,00000004h
007CB329 4E dec esi
007CB32A 75EA jnz L007CB316
007CB32C 33C0 xor eax,eax
007CB32E 5A pop edx
007CB32F 59 pop ecx
007CB330 59 pop ecx
007CB331 648910 mov fs:[eax],edx
007CB334 6849B37C00 push L007CB349
007CB339 8D45FC lea eax,[ebp-04h]
007CB33C E88BC1C3FF call SUB_L004074CC
007CB341 C3 retn
Также этот переход можно занопить, но это как-то не красиво.
zlo
(26.12.2012 в 00:04):
скачал не давно что то не прокатывает ((((
ядщ
(26.12.2012 в 00:03):
CODE:00401098
CODE:00401098
CODE:00401098 sub_401098 proc near ; CODE XREF: sub_403D7C+71p
CODE:00401098
CODE:00401098 var_18 = byte ptr -18h
CODE:00401098 var_14 = word ptr -14h
CODE:00401098
CODE:00401098 push ebx
CODE:00401099 add esp, 0FFFFFFBCh
CODE:0040109C mov ebx, 0Ah
CODE:004010A1 push esp ; lpStartupInfo
CODE:004010A2 call GetStartupInfoA
CODE:004010A7 test [esp+44h+var_18], 1
CODE:004010AC jz short loc_4010B3
CODE:004010AE movzx ebx, [esp+44h+var_14]
CODE:004010B3
CODE:004010B3 loc_4010B3: ; CODE XREF: sub_401098+14j
CODE:004010B3 mov eax, ebx
CODE:004010B5 add esp, 44h
CODE:004010B8 pop ebx
CODE:004010B9 retn
CODE:004010B9 sub_401098 endp
это правильная секция ?
CODE:00401098
CODE:00401098 sub_401098 proc near ; CODE XREF: sub_403D7C+71p
CODE:00401098
CODE:00401098 var_18 = byte ptr -18h
CODE:00401098 var_14 = word ptr -14h
CODE:00401098
CODE:00401098 push ebx
CODE:00401099 add esp, 0FFFFFFBCh
CODE:0040109C mov ebx, 0Ah
CODE:004010A1 push esp ; lpStartupInfo
CODE:004010A2 call GetStartupInfoA
CODE:004010A7 test [esp+44h+var_18], 1
CODE:004010AC jz short loc_4010B3
CODE:004010AE movzx ebx, [esp+44h+var_14]
CODE:004010B3
CODE:004010B3 loc_4010B3: ; CODE XREF: sub_401098+14j
CODE:004010B3 mov eax, ebx
CODE:004010B5 add esp, 44h
CODE:004010B8 pop ebx
CODE:004010B9 retn
CODE:004010B9 sub_401098 endp
это правильная секция ?
JokerBaD
(20.05.2012 в 05:51):
Дааа наипростейшая защита.Зато сам процесс поиска механизма защиты и крэк полное удовольствие)))
brute
(14.03.2012 в 18:31):
спасибо! Программа может быть иногда полезна... но у меня "не пашет": оно и понятно - портабельный firefox версии 2.0 с открытыми паролями в текстовом файле не взломаешь!
ManHunter
(13.03.2012 в 20:04):
brute, не может быть универсальных рецептов на все случаи жизни. Вкратце:
1 - в дикой природе нет, в заповедниках есть
1.5 - хз
2 - не совпадают. WinAPI на порядок приятнее отслеживать.
3 - компиляторов на самом деле очень мало, а в статике поведение не отследить, только эвристикой и эмуляцией по типовому набору функций. Вот это вирус или нет? :)
jmp skip_virus
... VIRUS!!!!! KILL 'EM ALL!!!! ...
skip_virus:
exit
В песочнице один фиг все сводится к вызову тех же чистых API, только под дельфями над ними еще стопицот всяких оберток. Но в итоге получаются все те же функции.
1 - в дикой природе нет, в заповедниках есть
1.5 - хз
2 - не совпадают. WinAPI на порядок приятнее отслеживать.
3 - компиляторов на самом деле очень мало, а в статике поведение не отследить, только эвристикой и эмуляцией по типовому набору функций. Вот это вирус или нет? :)
jmp skip_virus
... VIRUS!!!!! KILL 'EM ALL!!!! ...
skip_virus:
exit
В песочнице один фиг все сводится к вызову тех же чистых API, только под дельфями над ними еще стопицот всяких оберток. Но в итоге получаются все те же функции.
ManHunter
(13.03.2012 в 19:52):
Vitalik, именно так:
.text:007819D0 MOV AL,1
.text:007819D2 RET
.text:007819D0 MOV AL,1
.text:007819D2 RET
Vitalik
(13.03.2012 в 19:10):
Здраствуйте уважаемый ManHunter!
Я только учусь ,не сочтите за наглость, скажите пожалуйста:
Я нашел в Ольке
.text:007819D2 call sub_781798
Захожу на sub_781798
И в какое начало надо ставить MOV Al,1; RET
Заместо ".text:007819D0" mov eax, edx ?
Я только учусь ,не сочтите за наглость, скажите пожалуйста:
Я нашел в Ольке
.text:007819D2 call sub_781798
Захожу на sub_781798
И в какое начало надо ставить MOV Al,1; RET
Заместо ".text:007819D0" mov eax, edx ?
brute
(13.03.2012 в 18:27):
а если бы имена (которые в файле локализации "cSKeyValid") были в самой программе вначале пошифрованы, то полная ж? Не хватает теории, просвяти, пожалуйста:
1. есть ли в дикой природе idasig для делфи2010 или для idr? (что-то не гуглится)
1.5 чистое любопытство: как же так надо, и главное, зачем переделывать в новых делфях все функции, что старые (от 2009) совсем не подходят?
2. совпадают ли сообщения (и общее устройство цикла сообщений) у делфей и прог на winAPI?
3. как антивири статически анализируют такие (созданные каким-либо новым или редким компилятором) файлы (без анализа поведения путём запуска в песочнице: изменения файлов, обращения к сети и реестру?)
3.5 давече открыл в IDA "програмку" (вывод строки в консоль и пауза), написанную на любимом PB, весом менее 1.5 Кб. На граф было страшно смотреть, строки не видно, фунции все левые (нет writeconsole)...
1. есть ли в дикой природе idasig для делфи2010 или для idr? (что-то не гуглится)
1.5 чистое любопытство: как же так надо, и главное, зачем переделывать в новых делфях все функции, что старые (от 2009) совсем не подходят?
2. совпадают ли сообщения (и общее устройство цикла сообщений) у делфей и прог на winAPI?
3. как антивири статически анализируют такие (созданные каким-либо новым или редким компилятором) файлы (без анализа поведения путём запуска в песочнице: изменения файлов, обращения к сети и реестру?)
3.5 давече открыл в IDA "програмку" (вывод строки в консоль и пауза), написанную на любимом PB, весом менее 1.5 Кб. На граф было страшно смотреть, строки не видно, фунции все левые (нет writeconsole)...
ManHunter
(13.03.2012 в 12:19):
С локализациями как раз проще, в языковом файле смотришь имя (номер, код и т.п.) строки, в исполняемом файле ищешь манипуляции с этим именем. Сперва в ASCII, а если не находит, то в юникоде. Дальше два варианта, или каждая строка подгружается по мере необходимости, или считывается сразу весь файл и хранится в виде указателей на строки, других вариантов я не встречал. Ну а потом уже по ситуации.
brute
(13.03.2012 в 12:15):
Ну да-да, молодец, отхачил прогу! Я хотел повторить сей кульбит самостоятельно, не подглядывая. Ни ида, ни де-де, ни idr прогу не жуют (похоже delphi 2010 или закриптована). Нужны или файлы delphi2010 для idr, или сигнатуры для иди (где их найти в свободном доступе?). Все строки в файлах локализации, т.е. не в секции кода - бряк не поставишь(или на чтение данных в памяти ставить?). Хотел на щелчок мыши поставить (keymouseup), вроде не получилось.. В дельфях свои события что-ли?
ManHunter
(13.03.2012 в 11:14):
Никаких готовых файлов на этом сайте никогда не будет.
Mike
(13.03.2012 в 11:14):
выложи "исправленный" файл :)
я не умею делать так, как тут написанно, даже по шагово.
я не умею делать так, как тут написанно, даже по шагово.
SVS
(13.03.2012 в 00:07):
Мне всегда казалось, что есть только одно слово с тремя буквами подряд - длинношеее :) Теперь буду знать, что есть ещё слово "зарегистрированнна". И ещё не совсем усекла оборотистость русского языка - не бесплатно, но почти свобдно приобрести без ограничений. А что с теми, кто хотел приобрести, но почти не смог? Совсем чуть-чуть почти не хватило... Ах, да, для таких почти есть manhunter :)))
KnightR
(11.03.2012 в 14:30):
Есть ощущение, что эта прога сделана полностью на основе исходников Multi Password Recovery от автора пинча. Он как раз продает их отдельно. Хотя при всем желании от последней трудно добиться толковой работы. Да и автор забросил чего-то проект. Может сабж будет развиваться.
ManHunter
(11.03.2012 в 10:52):
На счет защиты согласен, а программа полезная.
Voffka
(11.03.2012 в 03:04):
Очередная ламо-защита с кучей md5 хэшей.
Добавить комментарий
Заполните форму для добавления комментария
HEX
004148EC B0 01 90 90 90 90 90