Исследование и крэк WinRAR 3.10
Привет, снова я. Когда-то давно я ломанул WinRAR 3.0 beta, потом переустановил его, но снова ломать его уже было лень Хреново конечно видеть каждый раз наг-окошко: "Зарегистрируйтесь пожалуйста!". Пожалуйста, придется ломать. Денег у меня на это нет. Но помните, труд делает человека богатым! Без труда не выловишь и рыбки из пруда.
Объяснять буду, основываясь на листинге IDA. Кто не знает, что это, то это такой мощный дизассемблер. Достаточно сказать: SoftICE всегда может заменить w32dasm, а IDA не заменит никто. Но и весит он порядочно. Кто еще не скачал, забегите к DeMoNiX'у на reversing.kuilichki.ru - там всегда есть рабочая нормальная ссылка. Примерно должно весит мегабайт 30. Я видел архив и на 25 мегов, и на 15. Но это обрезанные версии, так что лучше уж много, но по полной! Ломать IDA не пытайтесь, лучше кряк возьмите(а я так скачал уже версию с ключом).
Кто таки не может укачать огромный IDA Pro, то используйте w32dasm, но оно не очень хорошо, это грозит вам неправильно понять суть.
Когда проходит 40 дней, WinRAR начинает показывать наг-окно с заголовком "Зарегистрируйтесь пожалуйста!". Берем редактор ресурсов(ExeScope, Restorator или еще что), откроем в нем winrar.exe и смотрим в Dialogs наш наг. Нашли. Он называется REMINDER. Запомнили.
Дизассемблируем теперь этот самый winrar.exe. Ждите, пока он раздизассемблирует до конца. Угу, вот. Когда дождались жмем Alt-T(или в меню Search->text). Пишем там слово REMINDER. Опять ждем, пока найдется. Все теперь мы вот в таком месте:
.text:0043BAE2 cmp dword_4A7E48, 0 .text:0043BAE9 jnz short loc_43BB38 .text:0043BAEB cmp byte_48F198, 0 .text:0043BAF2 jnz short loc_43BB38 .text:0043BAF4 cmp byte_4AFE58, 0 .text:0043BAFB jnz short loc_43BB38 .text:0043BAFD cmp byte_49710C, 0 .text:0043BB04 jnz short loc_43BB38 .text:0043BB06 mov eax, dword_4A877C .text:0043BB0B cmp eax, 28h .text:0043BB0E jg short loc_43BB14 .text:0043BB10 test eax, eax .text:0043BB12 jge short loc_43BB38 .text:0043BB14 .text:0043BB14 loc_43BB14: ; CODE XREF: sub_43B4FC+612j .text:0043BB14 mov byte_48F198, 1 .text:0043BB1B push 0 .text:0043BB1D push offset sub_43F424 .text:0043BB22 push dword_4A57E0 .text:0043BB28 push offset aReminder ; "REMINDER" <<== Мы здесь .text:0043BB2D push dword_497110 .text:0043BB33 call DialogBoxParamA .text:0043BB38 .text:0043BB38 loc_43BB38: ; CODE XREF: sub_43B4FC+5EDj .text:0043BB38 ; sub_43B4FC+5F6j ... .text:0043BB38 cmp dword_4A7E48, 0
Вы возможно знакомы с программированием. Я имею ввиду не ТрубоПаскаль, а программирование под Windows(и опять же не Visual Basic и Delphi со своим VCL). Я имею ввиду Windows API. Какая api-функция нужная для создания окна? Я использую DialogBox(...). Здесь используется DialogBoxParamA. Посмотрите в любой api-справочнике, какие параметры передаются этой функции(их пять):
DialogBoxParamA(HANDLE, LPSTR, HWND, LPDATA, DWORD)
Что есть что? Это вы посмотрите в C++Builder'е. Скажу лишь, что LPSTR - это строчка с названием диалога, а в нашем случае это REMINDER.
Вот смотрите:
.text:0043BB1B push 0 .text:0043BB1D push offset sub_43F424 .text:0043BB22 push dword_4A57E0 .text:0043BB28 push offset aReminder ; "REMINDER" <<== Мы здесь .text:0043BB2D push dword_497110 .text:0043BB33 call DialogBoxParamA
Пять PUSH'ов? и один из них имеет значение REMINDER, а после этого вызов DialogBoxParamA, то бишь появление наг-окна. То есть вызов DialogBoxParamA будет такой:
DialogBoxParamA(dword_497110, "REMINDER", dword_4A57E0, offset sub_43F424, 0)
Но однако выше стоит несколько условных переходов. И все они прыгают на .text:0043BB38, избегая PUSH'ы и DialogBoxParamA ! Значит, если один из этих переходов сработает, то наг-окна не будет и наши нервы в порядке. Включаем логическое мышление. Раз показывается наг-окно, то ни один из переходов не срабатывает(а срабатывают они при опр. условиях, когда winrar зарегистрирован). Но если переход будет работать в обратном порядке, то прога станет работать как надо. Следовательно, кликаем на любой переход(например на .text:0043BB04 jnz short loc_43BB38). Смотрим в статус-строке 4-ю секцию(при наведении на нее показывается tip'ун Current Position in the input file). Запоминаем этот адрес и в хекс редакторе на этом месте меняем jnz на jz(там стоит 75, мы ставим 74). Если непонятно, как это проделать, то почитайте любую другую мою статью, там я описал как правильно изменять байты в HIEW. Когда вы поменяли байты, наг-окна быть не должно. Если оно есть, то значит вы что-то неправильно сделали.
Теперь осталось убрать в заголовке окна надпись (незарегистрированная копия). Если у вас русская версия, то именно такая надпись там и светится. В редакторе ресурсов откройте Strings и ищите там "незарегистрированная копия". Замените это на какой-нибудь англицкое слово и.. упс. Придется вам снова дизасмить, так как не знает IDA русских слов. Например, Вы сменили на слово "unreggged". Давайте для быстроты засунем прогу в w32dasm. Прописываем в поиске строку "unreggged". Можно было и не менять это слово на англицкое, если у вас w32dasm новее - он поддерживает кириллицу. Оказались в таком месте:
* Possible StringData Ref from Data Obj ->"%s - WinRAR" | :00445B23 68F2FD4800 push 0048FDF2 :00445B28 8D442408 lea eax, dword ptr [esp+08] :00445B2C 50 push eax :00445B2D E822B00300 call 00480B54 :00445B32 83C40C add esp, 0000000C :00445B35 803D0C71490000 cmp byte ptr [0049710C], 00 :00445B3C 757A jne 00445BB8 <<==условный переход :00445B3E A17C874A00 mov eax, dword ptr [004A877C] :00445B43 83F814 cmp eax, 00000014 :00445B46 7C05 jl 00445B4D :00445B48 83F828 cmp eax, 00000028 :00445B4B 7C1D jl 00445B6A * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00445B46(C) | * Possible Reference to String Resource ID=00873: "unreggged" | :00445B4D B869030000 mov eax, 00000369 :00445B52 E839A0FCFF call 0040FB90 :00445B57 50 push eax :00445B58 8D942404020000 lea edx, dword ptr [esp+00000204] :00445B5F 52 push edx :00445B60 E877740300 call 0047CFDC :00445B65 83C408 add esp, 00000008 :00445B68 EB27 jmp 00445B91 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00445B4B(C) | :00445B6A B928000000 mov ecx, 00000028 * Possible Reference to String Resource ID=00874: "4;O ?>:C?:8 ;8F5=788 >AB0;>AL %d 4=59" | :00445B6F B86A030000 mov eax, 0000036A :00445B74 2B0D7C874A00 sub ecx, dword ptr [004A877C] :00445B7A 51 push ecx :00445B7B E810A0FCFF call 0040FB90 :00445B80 50 push eax :00445B81 8D942408020000 lea edx, dword ptr [esp+00000208] :00445B88 52 push edx :00445B89 E8C6AF0300 call 00480B54 :00445B8E 83C40C add esp, 0000000C * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00445B68(U) | :00445B91 8D8C2400020000 lea ecx, dword ptr [esp+00000200] :00445B98 51 push ecx :00445B99 6897FC4800 push 0048FC97 :00445B9E 8D442408 lea eax, dword ptr [esp+08] :00445BA2 50 push eax :00445BA3 E864740300 call 0047D00C :00445BA8 59 pop ecx :00445BA9 8D542408 lea edx, dword ptr [esp+08] :00445BAD 03C2 add eax, edx :00445BAF 50 push eax :00445BB0 E89FAF0300 call 00480B54 :00445BB5 83C40C add esp, 0000000C * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00445B3C(C) | :00445BB8 54 push esp :00445BB9 FF35E0574A00 push dword ptr [004A57E0] * Reference To: USER32.SetWindowTextA, Ord:0000h | :00445BBF E89E4D0400 Call 0048A962 :00445BC4 81C400040000 add esp, 00000400
Привожу очень подробный листинг, чтобы удобно было понять. Если Вы запустите WinRAR, то будет следующее в заголовке окна:
WinRAR - WinRAR(unreggged)
Вот похожая строка - "%s - WinRAR". Если не сработает один условный переход, то к этой строке присоединится гадкое словечко (unreggged) и произойдет SetWindowTextA, то есть то, что будет в заголовке окна. Что мы с этого получаем, думаю ясно. Так что же это за переход такой, который не дает записать в заголовок окна гадость? Это JNE 00445BB8. Его в хекс-редакторе меняем на JE 00445BB8(байты менять с 75 на 74).
Осталось открыть снова бедный winrar.exe еще раз в редакторе ресурсов и подправить в ABOUTRARDIALOG слово "40-дневная копия" на что-нибудь из "Cracked by bi0w0rM" и т.д.
Ну вот, я все подробно описал, теперь грех не научиться ломать. Главная ошибка многих - ломка вслепую. Ломайте вдумчиво, понимайте, что к чему.
PS: Хоть наг-окно теперь не показывается и не мозолит глаза, в проге есть возможность использовать электронную подпись. Это уже не сломать, поэтому придется обойтись без нее. Но мне она никаким боком не нужна, эта гребанная эелектронная подпись! :pardon: