Как узнать пароли игроков в Marriage For Windows v 2.3

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Оформил: 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

{/codecitation}

Добавить комментарий