Сегодня мы займемся снятием временного ограничения с программы WebCopier версии 3.6.
Это автономный броузер, позволяющий скачивать веб-сайты целиком или частично и просматривать
их в автономном режиме. Очень даже удобный и полезный.
Скачать ее можно здесь: http://download.com.com/3000-2377-10028393.html.
Из дополнительных возможностей нужно также отметить
имеющуюся возможность задания максимального объема загружаемой информации, глубины прохода и фильтрах адресов
страниц и расширений файлов, поддержку прокси-серверов
и указания паролей доступа к сайтам, JavaScript
и закачку сайтов по расписанию. Полный набор,
одним словом. Да вот незадача, работает только 30 дней с момента установки на компьютер.
Попробуем устранить это неприятное ограничение.
Инструменты, которыми мы будем пользоваться:
- дизассемблер Win32Dasw
- hex-редактор hiew
- PEID v. 0.9
Запустим программу... Пока не закончилось время
действия ознакомительного периода, никаких
сообщений и ограничений мы не увидим, за исключением добавочной надписи
"TRIAL version" в заголовке окна, ну и в окне "about"
мы также не увидим своего имени. Хотя, по-моему мнению, исправление "about", при успешной работе программы это
излишне. Ладно, программа работает в штатном
режиме и ничего полезного для нашего дела мы не извлечем. Т.о. закрываем программу, переводим системное время на месяц вперед
и снова запускаем программу. На сей раз сразу после запуска появляется сообщение:
You have reached the end of your 30 day evaluation period. If you want to continiue use this
program, you must REGISTER it. Do you want to register right now?
Значит пробный период подошел к концу и теперь нам предлагают два варианта пути: зарегистрироваться сейчас или не
регистрироваться. Причем при отрицательном варианте ответа программа незамедлительно закрывается.
Таким образом нам надо найти место в программе, где происходит проверка
завершенности пробного периода, а искать будем исходя из полученного
сообщения.
Прежде всего проверим программу на наличие упаковщиком/протекторов с помощью
давно известной программы PEID. Откроем ее, загрузим туда
главный файл программы WebCopier.exe, выберем "hardcore scan" в единственном меню программы и произведем
сканирование. В ходе работы никаких упаковщиков\протекторов
не найдется, о чем свидетельствует сообщение программы-анализатора: "Microsoft Visual C++ 6.0",
но в любом случае теперь нам известно на чем написана программа, это тоже
не бесполезная информация.
Дизассемблировать будем посредством Win32Dasm. Запустим Win32Dasm, выбираем в
нем наш файл "WebCopier.exe" и дизассемблируем, получаем готовый листинг.
Как мы помним, нам надо найти место проверки окончания пробного режима.
Нажимаем "Ctrl+F", поиск текста и ищем строку "You have reached", находим по адресу
453DFE:
* Possible Reference to String Resource ID=65207: "You are running WebCopier Trial version.
You may evaluate i"
|
:00453DDF 68B7FE0000 push 0000FEB7
:00453DE4 E8BF17FBFF call 004055A8
:00453DE9 8B54240C mov edx, dword ptr [esp+0C]
:00453DED 6A1E push 0000001E
:00453DEF 8D4610 lea eax, dword ptr [esi+10]
:00453DF2 52 push edx
:00453DF3 50 push eax
:00453DF4 E805990400 call 0049D6FE
:00453DF9 8D4C2418 lea ecx, dword ptr [esp+18]
:00453DFD 51 push ecx
* Possible Reference to String Resource ID=65208: "You have reached the end of your %d day evaluation period.
I" ; искомая строка
|
:00453DFE 68B8FE0000 push 0000FEB8
:00453E03 E8A017FBFF call 004055A8
:00453E08 8B542420 mov edx, dword ptr [esp+20]
:00453E0C 6A1E push 0000001E
:00453E0E 83C614 add esi, 00000014
:00453E11 52 push edx
:00453E12 56 push esi
:00453E13 E8E6980400 call 0049D6FE
:00453E18 83C428 add esp, 00000028
:00453E1B 8D4C2404 lea ecx, dword ptr [esp+04]
:00453E1F C7442410FFFFFFFF mov [esp+10], FFFFFFFF
:00453E27 E8C9D90400 call 004A17F5
:00453E2C 8B4C2408 mov ecx, dword ptr [esp+08]
:00453E30 5E pop esi
:00453E31 64890D00000000 mov dword ptr fs:[00000000], ecx
:00453E38 83C410 add esp, 00000010
:00453E3B C3 ret
Теперь посмотрим с какого адреса программа попадает в это место.
Для чего поднимемся выше представленного кода и посмотрим на адреса
переходников. В этом случае он оказался единственным.
* Referenced by a CALL at Address:
|:00403CCC ; программа попадает в это место с адреса 00403CCC
|
:00453DB0 6AFF push FFFFFFFF
:00453DB2 6878024D00 push 004D0278
:00453DB7 64A100000000 mov eax, dword ptr fs:[00000000]
:00453DBD 50 push eax
:00453DBE 64892500000000 mov dword ptr fs:[00000000], esp
Перейдем по этому адресу в Win32Dasm:
:00403CB4 895DF0 mov dword ptr [ebp-10], ebx
:00403CB7 8945E8 mov dword ptr [ebp-18], eax
:00403CBA 895DFC mov dword ptr [ebp-04], ebx
:00403CBD 8945EC mov dword ptr [ebp-14], eax
:00403CC0 8DBE94090000 lea edi, dword ptr [esi+00000994]
:00403CC6 C645FC01 mov [ebp-04], 01
:00403CCA 8BCF mov ecx, edi
:00403CCC E8DF000500 call 00453DB0 ; тот самый вызов
:00403CD1 8BCE mov ecx, esi
:00403CD3 E8CC0A0000 call 004047A4
:00403CD8 8BF0 mov esi, eax
:00403CDA 8D45F0 lea eax, dword ptr [ebp-10]
:00403CDD 50 push eax
:00403CDE 8BCF mov ecx, edi
:00403CE0 E85B010500 call 00453E40
:00403CE5 85C0 test eax, eax
:00403CE7 7421 je 00403D0A ; проверка окончания пробного периода, если ТРИАЛ завершен - прыгает на 00403D0A
:00403CE9 395DF0 cmp dword ptr [ebp-10], ebx
:00403CEC 7C1C jl 00403D0A
:00403CEE 750D jne 00403CFD
:00403CF0 3BF3 cmp esi, ebx
:00403CF2 742A je 00403D1E
:00403CF4 53 push ebx
:00403CF5 53 push ebx
:00403CF6 6830810000 push 00008130
:00403CFB EB18 jmp 00403D15
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403CE7(C), :00403CEC(C)
|
:00403D0A 3BF3 cmp esi, ebx ; сюда нам попадать не надо
:00403D0C 7410 je 00403D1E
:00403D0E 53 push ebx
:00403D0F 53 push ebx
:00403D10 6831810000 push 00008131
Т.о. нам достаточно убрать два условных перехода на адрес 00403D0A,
находятся они по адресу 00403CE7 и 00403CEC.
:00403CE7 7421 je 00403D0A
:00403CEC 7C1C jl 00403D0A
Запустим hiew, откроем в нем наш файл, выберем режим дизассемблера,
перейдем по адресу 00403CE7, для чего нажмем F5, и введем .00403CE7,
затем F3 и исправим 7421 на 9090, несколькими командами
ниже находим 7C1C и также исправляем на 9090. Теперь сохраняем произведенные изменения
F9 и выходим из hiew.
Пробуем запустить - сообщения не появляется, программа снова работает исправно.
В принципе основную поставленную задачу мы выполнили, теперь уберем
надпись "TRIAL version" из заголовка окна. Поищем эту строку в Win32Dasm.
Снова нажмем "Ctrl+F", поиск текста и введем "TRIAL version", находим по адресу
42СА28:
* Possible Reference to String Resource ID=65127: "WebCopier TRIAL version" ;
искомая строка
|
:0042CF28 6867FE0000 push 0000FE67
:0042CF2D E87686FDFF call 004055A8
:0042CF32 59 pop ecx
:0042CF33 59 pop ecx
* Possible Reference to Dialog:
|
:0042CF34 689C1E5000 push 00501E9C
:0042CF39 8D4DF0 lea ecx, dword ptr [ebp-10]
:0042CF3C E83D4A0700 call 004A197E
:0042CF41 8BCF mov ecx, edi
:0042CF43 E801EDFFFF call 0042BC49
Посмотрим немного выше этого кода:
:0042CF0B 8945F0 mov dword ptr [ebp-10], eax
:0042CF0E 8365FC00 and dword ptr [ebp-04], 00000000
:0042CF12 8945EC mov dword ptr [ebp-14], eax
:0042CF15 C645FC01 mov [ebp-04], 01
:0042CF19 E8D948FDFF call 004017F7
:0042CF1E 8BF0 mov esi, eax
:0042CF20 85F6 test esi, esi
:0042CF22 747E je 0042CFA2 ; интересный нам условный переход
:0042CF24 8D45F0 lea eax, dword ptr [ebp-10]
:0042CF27 50 push eax
Собственно, чтобы избавится от этой надписи нам потребуется лишь изменить условный
переход по адресу 0042CF22 на безусловный.
Снова запустим hiew, откроем наш файл, переключимся в режим дизассемблера,
перейдем по адресу 0042CF22 и заменим байты 747E на EB7E,
таким образом команда будет выглядеть так:
:0042CF22 EB7E jmps 0042CFA2
Сохраним изменения F9 и выйдем из редактора.
Запустим программу - теперь сообщения о завершении пробного периода по-прежнему
не появляется, а в заголовке главного окна теперь не красуется надпись "TRIAL version".
Теперь, как я уже писал ранее, информация для тех, кто жаждет увидеть свое имя в окне "about"
программы. Запустим программу, войдем в меню "about" и посмотрим на тест сообщения, а именно:
"You may EVALUATE the program for 30 days. After that you must REGISTER it!". Теперь нам достаточно найти
этот текст в ресурсах самого файла и заменить его на свое имя или же просто убрать.
Запустим hiew, откроем в нем наш файл, переключимся в режим hex-редактора и произведем поиск,
по первым символам строки "EVALUATE", нажмем F7 и введем: "45005600", между каждым
символом стоит байт "00", так хранятся ресурсы.
Находим текст по адресу 001344A8:
Теперь заменим текст начиная с "You may...", на предположим, "Registered to: Me". В конце строки
ставим "00". Т.о. приведенный выше участок будет выглядеть
так:
Сохраняем изменения F9 и выходим из hiew. Вновь запускаем программу,
заходим в меню "about" и довольствуемся красующейся надписью "Registered to: Me".
Теперь приведу произведенные в файле изменения, полученные в ходе
сравнения двух файлов, оригинала и пропатченного. И собственно
саму программу-патч, для автоматического пропатчивания сделанную с помощью "Patch Maker".
Differences between WebCopier.exe & WebCopier_patched.exe
WebCopier.exe
00003CE7: 74 90
00003CE8: 21 90
00003CEC: 7C 90
00003CED: 1C 90
0002CF22: 74 EB
0003AC44: 75 EB
001343B0: A0 28
001344A0: 59 52
001344A2: 6F 65
001344A4: 75 67
001344A6: 20 69
001344A8: 6D 73
001344AA: 61 74
001344AC: 79 65
001344AE: 20 72
001344B0: 45 65
001344B2: 56 64
001344B4: 41 20
001344B6: 4C 74
001344B8: 55 6F
001344BA: 41 3A
001344BC: 54 4D
001344BE: 45 65
001344C0: 20 00
Статья предоставлена исключительно в образовательных целях.