Исследование Marriage for windows v2.3 по-русски
Оформил: DeeCo
Автор: http://www.cracklab.narod.ru
"Знал бы прикуп -
Жил бы в Сочи"
Все, надеюсь, любят играть в преферанс. Например, я провожу за этим делом больше,
чем за исследованием программ (шутка :) Вот попалась мне в руки
Windows-версия этой программки и мне сразу понравилась. Но когда я стал
понемногу проигрывать, а мой брат, который зарегистрировался и поставил
пароль, стал выигрывать, меня начала терзать весёлая мысля: "..."
Итак, во-первых мне захотелось поиграть за компьютер, т.е. под одним из
имен (рентген, бакалавр...) но когда их выбираешь, то кнопка "Новая Игра"
становится недоступной (disable). Будем ломать...
ставим бряк
bpx EnableWindow do "p ret"
- эта функция может сделать enable/disable с почти любым объектом
(стандартным и не очень Ж)
теперь попытаемся кликнуть на любого компьютерного игрока и вываливаемся в
айсе тут (листинг взят из WDasm'a):
:00437EFD E8DAEEFCFF Call user32.EnableWindow
:00437F02 5B pop ebx
:00437F03 C3 ret
Как видите, функция вложенная, т.е. вызывается откуда-то, поэтому скролим по
программе (F10) выходя из вложенных функций (т.е. проходя по ret'am), и очень
скоро мы очутимся вот тут:
:004DC350 FF5228 call [edx+28] <--проверка, кто есть игрок
:004DC353 84C0 test al, al <-- если он компьютер
:004DC355 7504 jne 004DC35B <--то не прыгаем и значит кнопка "Новая игра" disable
:004DC357 33DB xor ebx, ebx
:004DC359 EB02 jmp 004DC35D
:004DC35B B301 mov bl, 01
:004DC35D 8BD3 mov edx, ebx
:004DC35F 8B86A0030000 mov eax, dword ptr [esi+000003A0]
:004DC365 8B08 mov ecx, dword ptr [eax]
:004DC367 FF5160 call [ecx+60]
:004DC36A 8BD3 mov edx, ebx <-- Мы тут
:004DC36C 8B8684030000 mov eax, dword ptr [esi+00000384]
:004DC372 8B08 mov ecx, dword ptr [eax]
судя по отсутствию поблизости ret'ов мы вышли из вложенных функций и видим,
что по адресу 004DC355 интересный прыжок, убираем все бряки и ставим бряк
на этот самый прыжок и выходим из айса. Теперь нажимаем на компьютерного
игрока и видим, что прыжок не выполняется, выходим из айса, выбираем своего
игрока и в айсе видим, что прыжок выполняется, т.е. нужно заменить
jne 004DC35B на jmp 004DC35B и теперь при любом игроке кнопка "Новая игра"
будет enable! Теперь можно "поиграть" допустим за "бакалавра", и каждый раз
говорить мизер, даже когда нужно говорить 10 БК! Вот это кайф :) (после 10
минут такой игры у бакалавра было около -10000 :)
Во-вторых я хотел "поиграть" за своего брата чтобы понизить его ставки,
но он поставил пароль, которого я не знаю :( , будем ломать...
беру RegMon, запускаю его, запускаю марриаж, создаю нового игрока, ввожу
пароль, иду в RegMon и смотрю, куда же марриаж записывает пароли и вижу:
HKEY_LOCAL_MACHINE\Software\Marriage\Users\User2
т.е. программа для каждого юзера создает раздел "user"+номер_юзера.
в каждом разделе есть ключ "password" - интересно. Изучать алгоритм
шифрования я не стал, я просто скопировал значение ключа "Password" у своего
игрока и записал это значение в ключ "Password" у игрока брата :)
Теперь оказалось, что у брата стоит мой пароль :) представляю его лицо :)
Теперь я "поиграл" за брата, как и с бакалавром и на всякий случай вернул
значение его пароля назад.
В-третьих мне жутко не нравится реклама, поэтому я отважился убрать всю
рекламу в главном окне (там 4 баннера и одна бегущая строка) - Всё равно все
эти ссылки на паги в инете есть в Хелпе.
Я не стал открывать Америку и искать создание окон, я подумал:
раз программа не попакована, написана на делфи, то сам Бог велел использовать
программку типа ExeScope, для выдирания и изменения ресурсов.
Запускаем ExeScope, идём в раздел Resource, потом открываем раздел RCData,
здесь хранится информация обо всех Form'ax программки, причём все свойства
этих форм можно править :) После небольших поисков я нашёл в форме
TMarriageMain вот что:
object RunString: TPanel;
судя по названию - это та самая бегущая строка
Left = 10
Top = 366
Width = 677;
!!!правим длинну окна на 0
Height = 51;
!!!и высоту на 0
BorderWidth = 3
Caption = 'RunString'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
TabOrder = 1
Visible = False
object Panel5: TPanel
Left = 4
Top = 4
Width = 669;
!!!правим длинну окна на 0
Height = 43;
!!!и высоту на 0
Align = alClient
BevelOuter = bvLowered
Caption = 'Panel5'
TabOrder = 0
object RunLabel1: TRunLabel
Left = 1
Top = 1
Width = 667;
!!!правим длинну окна на 0
Height = 41;
!!!и высоту на 0
..........поскипано.........
end
после того как мы подправили в трёх местах длинну и высоту окна на 0 больше
окна с бегущей строкой мы не увидим. Осталось четыре баннера...
Я искал хоть какой-нибудь намёк на описание баннеров в ресурсах, но не нашёл
и решил ломать в лоб:
ставим бряк
bpx createwindowExA do "p ret"
запускаем марриаж и фигеем, потому как эта функция при запуске вызывается
около 200 (!) раз, это не удивительно: стоко ресурсов и написана на делфи.
Короче, нам надо словить момент создания окон баннеров, т.е. нам нужен тот
createwindowExA после которого появится баннерное окно. Я сделал так:
убрал все бряки, запустил марриаж и в тот момент, когда уже появилось главное
окно, но ещё не создались окна баннеров (там будет пару секунд времени чтобы
успеть), я захожу в айс и ставлю бряк:
bpx createwindowExA do "p ret"
теперь F5 До тех пор, пока не появится рамка первого баннера (на месте баннера
должна появится характерная серая рамка :). и когда мы вывалились в айсе
после создания этой самой рамки, то это должно произойти где-то тут:
:00435F33 E8040EFDFF Call user32.CreateWindowExA
:00435F38 898640010000 mov dword ptr [esi+00000140], eax
:00435F3E 5E pop esi
:00435F3F 5B pop ebx
:00435F40 C3 ret
выходи из этой процедуры, оказываемся тут:
:00435E90 83BB4001000000 cmp dword ptr [ebx+00000140], 00000000
:00435E97 7505 jne 00435E9E
:00435E99 E8C66BFDFF call 0040CA64
теперь скролим, выходя из вложенных функций, пока не окажемся вот тут:
:004D74B9 E8B6B6F5FF call 00432B74 <-- проверяем нужны ли баннеры
:004D74BE 8B8614050000 mov eax, dword ptr [esi+00000514]
:004D74C4 85C0 test eax, eax
:004D74C6 742B je 004D74F3 <--если да - НЕпрыгаем
:004D74C8 8B7808 mov edi, dword ptr [eax+08]
:004D74CB 4F dec edi
:004D74CC 85FF test edi, edi
:004D74CE 7C23 jl 004D74F3
:004D74D0 47 inc edi
:004D74D1 C745FC00000000 mov [ebp-04], 00000000
:004D74D8 8B55FC mov edx, dword ptr [ebp-04]
:004D74DB 8B8614050000 mov eax, dword ptr [esi+00000514]
:004D74E1 E88E94F3FF call 00410974
:004D74E6 8BD3 mov edx, ebx
:004D74E8 E887B6F5FF call 00432B74 <--создание окон баннеров (это та самая ф-ия, в котороы сработал бряк)
:004D74ED FF45FC inc [ebp-04]
:004D74F0 4F dec edi
:004D74F1 75E5 jne 004D74D8 <--все создали? если нет - прыгаем
как видите, все окна баннеров создаются в цикле, а по адресу 004D74C6
можно этот цикл перепрыгнуть, заменив je 004D74F3 на jmp 004D74F3.
Теперь больше не появляются баннеры! Ура!
ВсЁ!
А для самых ленивых, крак:
--------вырезать тут----------
marriage for windows v2.3 CracK by vallkor//PTDS
Removes Banners. You can play as Bakalavr.
marriage.exe
000DB755: 75 EB
000D68C6: 74 EB
-----------и тут-------------
Исследовал и наваял туториал:
vallkor //PTDS
e-mail: vallkor@chat.ru
page: http://vallkor.chat.ru
|