Quake 3 Team Arena Автор : gering Перевод: nightcat Цель : Quake 3 Team Arena Метод : patch E-MAIL : gering@polbox.com E-MAIL : nightcat@bsuir.com запускаем setup.exe. Выбираем 'Install'. Открывается DemoShield. Играет музычка и тут появлется окошко с просьбой ввести регистрационный код. А его у нас нет! ;). вводим что-нибудь и открываем SoftICE, ставим брейкпоинт на 'getwindowtexta'. Жмём 'OK' и выскакивает sice с куском кода с функцией getwindowtexta. Зашибись. Жмём F5 неколько раз и выясняем, что функция getwindowtexta вызывается 7 раз. Теперь еще раз, но только вместо F5 нажимаем F11 и идём по коду до call'a, который вызывает окошко и стамим брейкоинт на последний джампе перед ним, это адрес 01B91398. :01B9138F 84C0 test al, al :01B91391 6A00 push 00000000 :01B91393 68C8720110 push 1B9172C8 :01B91398 741D jz 01B9113B7 <===Вот тут :01B9139A 8B4B7C mov ecx, dword ptr [ebx+7C] :01B9139D 51 push ecx :01B9139E 8BCB mov ecx, ebx :01B913A0 E8589C0000 call 01B91AFFD :01B913A5 8BCB mov ecx, ebx :01B913A7 E887810000 call 01B919533 :01B913AC 8BCB mov ecx, ebx :01B913AE E880810000 call 01B919533 :01B913B3 5F pop edi :01B913B4 5E pop esi :01B913B5 5B pop ebx :01B913B6 C3 ret Нужно изменить джамп, то выскочит окошко с информацией о том, что введённый код правильный. Теперь обратим внимание на место патча. Soice показывает, что код выполняется в процессе '_ins5576' а точнее в подпрограмме 'KEYCHECKDLL'. В папке 'Setup' находим файл 'KeyCheckDLL.dll', его то мы и должны пропатчить. После дизассемлбирования файла 'KeyCheckDLL.dll' ищем место по адресу 01B91398. Хе-хе. Такого нет. Кусок кода о котором мы говорили выше в файле находится не по адресу 01B91398, а по: :10001398 741D je 100013B7 Запоминаем физический адрес ( 1398h ). Heiw в руки и патчим. And remember: "He's able who thinks he's able." gering / team GANG