Как узнать пароли игроков в Marriage For Windows v 2.3
Оформил: DeeCo
Автор: http://www.cracklab.narod.ru
Инструменты:
1) SoftIce
2) HView
Все заядлые игроки в преферанс наверняка сталкивались с этой
чудесной реализацией вечной игры. Однако, когда кто-то играет лучше
тебя, то хочется ему все испортить, но не тут то было - вход в игру
может быть закрыт паролем. А как же его узнать???
В прошлом исследовании мы нашли место, где проверяется
введенный нами пароль с тем, который записан в реестре, вот это место:
015F:004C9792 807DFF00 CMP BYTE PTR [EBP-01],00 <--проверяют совпадают ли длины паролей
015F:004C9796 7447 JZ 004C97DF <--если нет - прыжок
015F:004C9798 8D55F0 LEA EDX,[EBP-10]
015F:004C979B 8B45F8 MOV EAX,[EBP-08]
015F:004C979E 8B80DC020000 MOV EAX,[EAX+000002DC]
015F:004C97A4 E8B394F6FF CALL 00432C5C
015F:004C97A9 8B45F0 MOV EAX,[EBP-10] <--адрес нашего пароля
015F:004C97AC 8B5374 MOV EDX,[EBX+74] <--адрес правильного пароля
015F:004C97AF E884A8F3FF CALL 00404038 <--сравниваем
015F:004C97B4 750F JNZ 004C97C5 <--если равны - НЕ прыгаем
Я обнаружил, что правильный пароль расшифровывается из реестра при
запуске программы, т.к. когда я его изменил в памяти, то при следующих
попытках ввода пароля мой изменённый пароль принимался за правильный.
Нам нужно найти место в программе, где зашифрованная строка
расшифровывается.
Я нашел это место, (а вы?):
015F:004B0759 8B95ACFCFFFF MOV EDX,[EBP-0354] <--"users\user#"
015F:004B075F A188484F00 MOV EAX,[004F4888] <--
015F:004B0764 8B00 MOV EAX,[EAX] <--00243745h
015F:004B0766 B998094B00 MOV ECX,004B0998 <--"Password"
015F:004B076B E88038FAFF CALL 00453FF0 <--читаем и расшифровываем
015F:004B0770 8B95B0FDFFFF MOV EDX,[EBP-0250] <--адрес уже расшифрованного пароля
015F:004B0776 8D4674 LEA EAX,[ESI+74] <--
015F:004B0779 E88235F5FF CALL 00403D00 <--
Значит по здесь:
015F:004B0770 8B95B0FDFFFF MOV EDX,[EBP-0250]
пароль уже расшифрован. А что если не разгадывать алгоритм шифра,
а просто после того, как пароль расшифрован показать его!
Итак, будем встраивать свою процедуру. Для этого нужно:
1) по адресу 004B0770 сделать безусловный переход на место, куда мы
впишем нашу процедуру:
015F:004B0770 jmp 004F1C10
2) По адресу 004F1C10 напишем нашу процедуру.
3) востановим затертую прыжком операцию:
mov edx,[ebp-0250]
4) в самом конце прыжок назад:
jmp 004B0776
После изменений:
(1)
.004B076B: E88038FAFF call .000453FF0 -------- (1)
.004B0770: E99B140400 jmp .0004F1C10 -------- (2)
.004B0775: 90 nop
.004B0776: 8D4674 lea eax,[esi][00074]
(2)процедура вывода паролей:
.004F1C10: 8B95B0FDFFFF mov edx,[ebp][0FFFFFDB0]
.004F1C16: 50 push eax
.004F1C17: 8D4679 lea eax,[esi][00079]
.004F1C1A: 6A00 push 000
.004F1C1C: 50 push eax
.004F1C1D: 52 push edx
.004F1C1E: 6A00 push 000
.004F1C20: E86FF6F0FF call MessageBoxA ;user32.dll
.004F1C25: 83EC10 sub esp,010 ;""
.004F1C28: 58 pop eax
.004F1C29: 5A pop edx
.004F1C2A: 58 pop eax
.004F1C2B: 58 pop eax
.004F1C2C: 58 pop eax
.004F1C2D: E944EBFBFF jmp .0004B0776 -------- (2)
Теперь программа при запуске показывает MessageBox в заголовке
которого имя игрока а в тексте - его пароль. Таких сообщений будет
ровно столько, сколько игроков. Если игрок не назначил пароль, то
сообщение выводиться не будет.
ЗЫ: теперь вы можете всегда узнать пароль другого человека, имея
"исправленную" версию marriage.exe
Но это делать низзя, т.к. это прямое нарушение авторских прав.
А вся эта статья только для того, чтобы обучить вас встраивать свой
же код в свои же программы!
До следующих встреч.
Исследовал и наваял туториал:
vallkor //PTDS
E-mail: vallkor@chat.ru
Page: http://vallkor.chat.ru
|