Исследование Ultra Edit 32 v7.10a.


Итак, имеем программный продукт от IDM Computer Solutions. Это неплохой редактор, поддерживающий редактирование в режимах текста, Hex-редактора, включена поддержка нескольких языков программирования, поддержка макросов, и много еще других прибамбасов. Взять это чудо можно отсюда


Установив данную программу на компьютер и запустив ее, видим интересное окошко, в котором нам предлагают зарегистрироваться, причем кнопок закрывающих это окно нет, окно это висит секунд 6. Настало самое время почитать хелп, не весь конечно, только раздел посвященный регистрации. Из него мы узнали, что программа ограничена только временем испытательного срока (45 суток),больше никаких ограничений нет. Ну что-же, это просто замечательно. Приступим к исследованию. Данное "исследование" расписано детально и расчитано на начинающих "исследователей".


Исспользованные инструменты :

1.Soft-Ice v4.05

2.Любой Hex-редактор

3.Turbo Pascal v7.0


Определим цели :

1) Убрать окно появляющееся при запуске программы.

2) Сделать триальный период вечным.


Цели и инструменты определены, приступим непосредственно к исследованию. Я не случайно выбрал сайс для данного исследования, а не WinDasm, в WinDasm в меню SDR вы найдете много интересной информации, но исследовать ее удобней и быстрей при помощи сайса, можете проверить на досуге. Теперь нам необходимо определить на какую точку прерывания ловить то самое окно, я сначала поставил бряк на DestroyWindow, но этот путь оказался не очень результативным, то есть функцию котораю генирирует это окно я не нашел, а генирироваться это окно должно самой программой, почему ?, потому что окно, если вы заметили, нестандартное, Windows такие окна не создает.Но вернемся к нашему исследованию, все же результат от установки на вышеуказанную функцию я получил : мы оказались в коде исследуемой программы, для тех кто до сих пор там не оказался,краткий инструктаж:) вам необходимо в сайсе набрать bpx DestroyWindow , выйти в код нашей программы по F12. Теперь подумаем каким образом можно поимать функцию генерирующую это окно, я не стал долго ломать голову над этим вопросом, а набрал в сайсе следующее: s 0 l ffffffff "This is an unregistered copy of ",то-есть задал поиск начального текста из окошка, нашли по адресу 801F5B8F, у вас он может быть совершенно иным, что вполне естесственно. Ставим бряк на этот адрес: bpmb 801f5b8f rw. Кстати, бряк на DestroyWindow надо выключить, он нам больше не нужен. Перезапускаем программу и оказываемся в сайсе, но не в нашей программе а в системном модуле из которого нам надо выйти, а так как нужная нам функция окажется вложенной, то из вложений тоже надо выйти, поэтому потопчем F12 (много, около 20 раз) и мы окажемся вот в таком месте (листинг взят из Виндасма) :

рис.1

Выше той команды, где мы остановились, стоит call 004099AD, вот он то и вызывает ненужное нам окно, чтобы проверить наши предположения давайте посмотрим выше и поищем команду условного перехода, которая либо совершает прыжок на данный код, либо "перепрыгивает" его. Прокручивая выше окно кода в сайсе находим вот такое место

рис.2

Видите команду перехода по адресу 0046e64a, поставим на нее бряк, снимем бряк с адреса в памяти и вновь перезапустим объект нашего исследования. Вывалились в сайс и видим что команда перехода будет выполнена, давайте поменяем значение флага z на противоположное и переход не выполнится, жмем F5 и посмотрим что произойдет. Опа, прога запустилась без всяких нагов и все работает. Теперь надо опредилиться как будем патчить, команда 6-тибайтная, можно забить ее nop-ами, можно сделать безусловный переход на следующий адрес с коррекцией числа байт, либо без таковой. Ну давайте попробуем первый способ, откройте Uedit32.exe в вашем любимом HEX-редакторе и испрвьте байты по адресу offset 6e64a: 90 90 90 90 90 90.Проверяем, работает, переводим дату на 2 месяца вперед, работает. Теперь о втором методе он тоже работает,но по истечении 45 дней появляется то самое окно, и программа не хочет работать,но это исправимо,тем же способом, каким мы искали окно появляющееся при запуске, попробуйте сами. Для совсем новичков вот адреса:0046E7BF: 7F 0C меняем на 90 90 , 0046E744: 75 19 меняем на EB 19. Ну вообщем по-эксперементируйте и поймете в чем там дело.


Теперь настала очередь написать патч на Паскале.

-----------------------------------------------cut-------------------------------------------------------------

Uses Crt;

 Const A: Array[1..6] of Record {патчим 6 байт}

                          A : Longint;
                          B : Byte;
                         End =
((A:$6e64a;B:$eb), {offset "6e64a" меняем байт на "90'}
(A:$6e64b;B:$90),
(A:$6e64c;B:$90),
(A:$6e64d;B:$90),
(A:$6e64e;B:$90),
(A:$6e64f;B:$90));

Var Ch:Char;
    I:Byte;
    F:File;
    FN:file of byte;

    Size:longint;


Begin
 Writeln('Patch');writeln('Patch for UltraEdit32 v7.10a by UOFG ''2000');
 Assign(F,'Uedit32.exe'); {имя файла который патчим}
 {$I-} Reset(F,1); {$I+}                                 // проверяем наличие
 If IOResult <> 0 then                                  // файла который надо
    begin                                                          // патчить, если не находим,
    writeln('He-He!File not found!');             // то на выход с соответствующим
    halt(1);                                                      // сообщением
    end;                                                           //
 For I:=1 to 6 do {будем патчить 6 байт}
 Begin
  Seek(F,A[I].A);
  Ch:=Char(A[I].B);
  Blockwrite(F,Ch,1);
 End;
 Writeln('File successfully patched!');
 Writeln('Reversing by GoKs.')
End. 

Ну вот и все на сегодня. Если что-то не поняли или нашли ошибки можете написать мне .


<= Вернуться к статьям

Rambler's Top100