Небольшая заметка по модификации QIP Бывает такое, что необходимо чтото подправить в интерфейсе QIP. И вот вы берете какой нибудь редактор ресурсов типа ResHack, подправляете то, что вам нужно, сохраняете и.... при запуске qip орет Sorry, qip.exe file is corrupted Для того чтобы снять проверку CRC нам потребуются 2 вещи: 1) Cам qip.exe 2) Отладчик OllyDbg Для теста был взят QIP 8080 Шаг 1: Открываем qip.exe в OllyDbg. Ждем, пока пройдет анализ кода и нас не кинет на точку входа в программу. Шаг 2: Необходимо найти часть, где располагается сообщение об ошибке в памяти. Для этого в окне CPU нажимаем комбинацию клавиш Ctrl+B (поиск бинарных данных). В открывшемся окне в поле ASCII вписываем текст Sorry, qip.exe file is corrupted и нажимаем OK. Результатом выполнения будет код на экране примерно таков: Code: 00604FEC . 53 6F 72 72 79 2>ascii "Sorry, qip.exe f" 00604FFC . 69 6C 65 20 69 7>ascii "ile is corrupted" 0060500C . 2E 00 ascii ".",0 0060500E 00 db 00 Как мы видим, по адресу 00604FEC располагается начало нашей строки. Шаг 3: Теперь нам нужно найти команду, в которой используется этот адрес. Для этого выделяем адрес начала строки (00604FEC) и нажимаем Ctrl+R (поиск ссылки для этого адреса). В результате откроется окно с командами, где используется этот адрес и их адрес в памяти. Мы видим следующую картину: References in qip:CODE to 00604FEC Address Disassembly Comment 00604F1F mov edx, 604FEC ASCII "Sorry, qip.exe file is corrupted." 00604FEC ascii "Sorry, qip.exe f" (Initial CPU selection) Теперь мы знаем, что наш текст был записан в регистр командой mov edx, 604FEC находящейся по адресу 00604F1F. Делаем двойной клик на этой строке, чтобы переместиться на тот участок кода. Теперь в окне CPU мы можем наблюдать часть кода: Code: $-1C >|. 55 push ebp $-1B >|. 68 CA4F6000 push 604FCA $-16 >|. 64:FF30 push dword ptr fs:[eax] $-13 >|. 64:8920 mov dword ptr fs:[eax], esp $-10 >|. E8 70FFFFFF call 00604E84 ; qip.00604E84 $-B >|. 84C0 test al, al $-9 > 75 1D jnz short 00604F35 ; qip.00604F35 $-7 >|. 6A 00 push 0 $-5 >|. B9 D84F6000 mov ecx, 604FD8 ; ASCII "Bad qip.exe file" $ ==> >|. BA EC4F6000 mov edx, 604FEC ; ASCII "Sorry, qip.exe file is corrupted." $+5 >|. A1 A0BD6900 mov eax, dword ptr ds:[69BDA0] $+A >|. 8B00 mov eax, dword ptr ds:[eax] $+C >|. E8 342EE8FF call 00487D64 ; qip.00487D64 $+11 >|. E8 EFFCDFFF call 00404C24 ; qip.00404C24 $+16 >|> 8D55 F4 lea edx, dword ptr ss:[ebp-C] $+19 >|. A1 A0BD6900 mov eax, dword ptr ds:[69BDA0] $+1E >|. 8B00 mov eax, dword ptr ds:[eax] Шаг 4: Теперь необходимо найти условие, по которому данный код выполняется или не выполняет. Для этого перемещаемся выше по коду в поисках инструкций условного перехода j** Сразу замечаем, что выше есть инструкция: $-9 > 75 1D jnz short 00604F35 ; qip.00604F35 Которая, как бы перепрыгивает код вывода сообщения. Шаг 5: Изменяем логику проверки инструкции на противоположную. jnz(если не равно нулю) мы должны заменить её на jz(равно нулю) Для этого двойным щелчком открываем окно редактирования, где изменяем jnz на jz и нажимаем на кнопку Assemble, а потом Cancel(Отмена). Шаг 6: Вроде всё хорошо, но изменения, которые мы сделали, находятся пока что только в оперативной памяти. Для сохранения изменений в файле необходимо в контекстном меню выбрать пункт Copy to executable file. В открывшемся окне , в контекстном меню выбираем пункт Save File, и сохраняем с именем qip1.exe. Теперь появится файл qip1.exe в, котором будет отключена проверка CRC. Теперь можно закрыть отладчик. Вот и всё ) (С) SLESH