Пластырь для WinRar Максим Федотов aka bl1n Хакер, номер #082, стр. 082-062-2 Однако я еще не закончил свой рассказ. Сам понимаешь, что делать всю эту фигню руками не очень-то клево. Поэтому у меня возникло резонное желание изготовить полноценный патч для удобства. [ваяем патч] Я воспользовался крутым (для меня:)) патчером codefusion. Этот патчер работает довольно просто. Ему передается два файла: оригинальный и пропатченный. Он вычисляет разницу между ними и автоматически генерирует код патча. Использовать codefusion проще простого. Выбираем заголовок и текст в окне патча, жмем next, после этого выбираем файл для патча, а в окне data to patch жмем правую кнопку мыши и выбираем file compare. Здесь указываем оригинальный и поломанный файлы, патчер их побайтово сравнивает, после чего автоматически генерирует exe-патч, который можно релизить на крэкерских форумах :). [второй способ] Понравилось? Сейчас понравится еще больше. Я опишу еще 2 способа, как крэкнуть этот несчастный архиватор. Как ты, наверное, уже успел заметить, наг появляется только после 40 дней. А что же тогда происходит до этого? Не знаешь? Да ладно тебе, все ты знаешь. Происходит отсчет времени. Десятичное число 40 в шестнадцатеричном представлении - это 28, значит, где-то в программе что-то сравнивается с 28h. Чтобы понять, где именно и что сравнивается, мы воспользуемся w32dasm. Сравнение осуществляется оператором cmp, поэтому жмем в дизасме search=>gt;find text и набираем там getlocaltime, так как именно эта функция отвечает за нахождение времени на компе, следовательно, после нее идет расчет оставшихся дней. Поэтому после того, как мы отыскали вызов этой функции, следует просмотреть код в поисках числа 00000028. И в самом деле, несложно заметить следующий код: 00440F46 . 83F8 28 CMP EAX,28 00440F49 . 7F 04 JG SHORT WinRAR.00440F4F 00440F4B . 85C0 TEST EAX,EAX 00440F4D . 7D 24 JGE SHORT WinRAR.00440F73 Здесь число из регистра eax сравнивается с 28h (это те самые 40 дней). Если содержимое EAX больше или равно 28, происходит скачек на 00440F4F, если же нет, то осуществляется сравнение с 0 и прыжок по jge, пролетая мимо процедуры, вызывающей наг. Для того чтобы WinRar перепрыгнул эту процедуру, надо, чтобы eax был меньше 28h, поэтому я просто обнулил его строкой xor eax,eax и занопил последующие 3 байта в hiew, нажав edit=>gt;asm. Все, нагов нет, а как быть со строкой в названии окна? Можно, конечно, опять исправить ее редактором ресурсов, но мы для разнообразия поступим по- другому. Наберем часть этой строки в поиске дизасма и исправим ее руками. Правда вот незадача - все русские буквы винрара выглядят, как крякозябры, но зато мы знаем, что в названии есть слово из латинских букв: WinRAR. Если поискать его, можно найти следующий код: |