
Скриншот программы Recover Passwords
Программа
Recover Passwords предназначена для автоматического сбора паролей на локальном или удаленном (при наличии соответствующих прав доступа) компьютере. Она извлекает сохраненные пароли из мессендежров, ICQ-клиентов, браузеров, почтовых программ, FTP-клиентов и т.п. Полный список поддерживаемых программ есть на офсайте, посмотрите, если интересно. В демонстрационном, то есть бесплатном режиме, Recover Passwords только показывает список найденных программ, но не показывает сами найденные пароли. Сейчас мы попробуем устранить этот недостаток.
Скачиваем
дистрибутив, устанавливаем, запускаем. Действительно, программа пишет, что пароли найдены, показывает учетные записи, но сами пароли не показывает. В заголовке написано "Эта копия не зарегистрированнна" (орфография оригинала сохранена), а на панели инструментов присутствует иконка "Order me". При выходе из программы открывается наг-скрин с не менее оригинальной надписью и предложением купить ее или ввести регистрационный ключ.

Окно регистрации программы
Вот, теперь у нас есть практически все проявления незарегистрированной версии, поищем условия, при которых проявляются какие-нибудь из них. В подпапке Lang в файле Russian.xml есть строки:
<String name="cSKeyValid">Спасибо за регистрацию этого продукта</String>
<String name="cSKeyInvalid">Ключ не верный</String>
Очевидно, что это сообщения о результатах проверки регистрационного ключа, а обращение к ним идет по имени cSKeyValid или, соответственно, cSKeyInvalid. Поищем их в исполняемом файле.

Строка сообщения найдена
Найдена строка в юникоде. Теперь смотрим как и при каких условиях к ним идет обращение.
...
.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
Ну здесь без вариантов, в самое начало вписываем команды MOV Al,1; RET и сохраняем изменения. Попробуем запустить:

Программа успешно "зарегистрирована"
В заголовке надпись, что программа зарегистрирована, в окне "О программе" тоже, на панели инструментов пропала иконка регистрации, наг-скрина при выходе тоже нет. С виду все нормально, попробуем теперь найти пароли. На этот раз никаких проблем, все пароли открыты, что и требовалось получить. Ну а на чьих компьютерах использовать Recover Passwords - это вы уже решите самостоятельно.