Снятие с QIP проверки CRC

Discussion in 'Реверсинг' started by slesh, 17 Feb 2009.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Небольшая заметка по модификации 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
     
    8 people like this.
  2. -c0d3r-

    -c0d3r- New Member

    Joined:
    11 Feb 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Слеш ты как всегда на высоте - спасибо именно это мне и нужно было