Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Регистрация WinRar 3.22

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Автор: DarkSlider <darkslider@list.ru>

Это моя первая статья поэтому прошу особо не пинать.

Я видел статьи о том как ламать WinRar но там для начинающих к коим и я наверно отношусь, сложновато. Вот вариантик попроще, для меня во всяком случае.


Цель:
WinRar 3.22

Инструменты:
Windasm – дизасеммблер
Hiew – HEX-редактор
Restorator – редактор ресурсов.

У меня WinRar английская версия поэтому текст на инглише, но полностью совпадает с руским вариантом. Итак начнем. Я копал WinRar очень долго, но сразу напишу то что понаходил, не вдаваясь во все тупики в которые я влезал по самое немогу.

Сначала я просмотрел ресурсы WinRara Restoratorom. И нашел очень интересные строки в String ресурсе № 55:


 870   Registration failed
 871   Thank you for support
 872   Correct registration
 873   evaluation copy
 874   only %d days left to buy a license
 

И это натолкнуло меня на мысль что перед вызовом ресурса 872 должно быть какое-то сравнение (не спрашивайте почему просто должно :) ).

Перед дизасемблированием файла WinRar.exe (да и вообще любого экзешника я обычно создаю файлы *.exx *.w32 прочитал об этом в одном туториале на Инглише) WinRar.exx WinRar.w32.

После создания файлов дизасемблим файл WinRar.w32.

Заходим в String References и находим наш ресурс.

String Resource ID=00872: "Correct registration"

Щелкаем по нему и видим:


 * Possible Reference to String Resource ID=00872: "Correct registration"
                                   |
 :0043E2CA B868030000              mov eax, 00000368
 :0043E2CF E84424FDFF              call 00410718
 :0043E2D4 50                                push eax
 
 * Possible Reference to String Resource ID=00871: "Thank you for support"
                                   |
 :0043E2D5 B867030000              mov eax, 00000367
 :0043E2DA E83924FDFF              call 00410718
 :0043E2DF 50                                push eax
 :0043E2E0 FF35FCC44A00            push dword ptr [004AC4FC]
 
 * Reference To: USER32.MessageBoxA, Ord:0000h
                                   |
 :0043E2E6 E8811A0500              call 0048FD6C
 :0043E2EB EB0B                    jmp 0043E2F8
 

Оба ресурса 872 и 871 передаются функции по адресу 00410718. Хорошо, а теперь посмотри что находится чуть выше:


 :0043E2B7 E840ECFCFF              call 0040CEFC
 :0043E2BC 8BD8                    mov ebx, eax
 :0043E2BE 881D3CDD4900            mov byte ptr [0049DD3C], bl
 :0043E2C4 84DB                    test bl, bl
 :0043E2C6 7425                    je 0043E2ED
 :0043E2C8 6A30                    push 00000030
 

А выше находится сравнение регистра bl с нулем. Интересно... Меня тут с неизвесно какого раза посетила мысль посмотреть через поиск а где еще изменяется значение по адресу 0049DD3C.

И я пустил на поиск строку:

mov byte ptr [0049DD3C]

Она встречается аж 6 раз:


 :0043E2B7 E840ECFCFF              call 0040CEFC
 :0043E2BC 8BD8                    mov ebx, eax
 :0043E2BE 881D3CDD4900            mov byte ptr [0049DD3C], bl
 

 :0043E607 E8F0E8FCFF              call 0040CEFC
 :0043E60C A23CDD4900              mov byte ptr [0049DD3C], al
 

 :00447DC8 E82F51FCFF              call 0040CEFC
 :00447DCD A23CDD4900              mov byte ptr [0049DD3C], al
 

 :0044870F E8E847FCFF              call 0040CEFC
 :00448714 8BD8                    mov ebx, eax
 :00448716 881D3CDD4900            mov byte ptr [0049DD3C], bl
 

 :0044B120 C6053CDD490000          mov byte ptr [0049DD3C], 00
 

 :0045C8C3 E83406FBFF              call 0040CEFC
 :0045C8C8 A23CDD4900              mov byte ptr [0049DD3C], al
 

Причем самое интересное в том что 5 раз после вызова функции:

call 0040CEFC

И... в 1 и 3 случае из-за команд mov ebx, eax мы получаем не что иное как в 5 случаев из 6-ти перенос значения регистра al в байт по адресу [0049DD3C].


Тогда меня осенило, а что будет если в al будет 1 а не 0 после возврета из функции. Функция имеет такой вид:


 * Referenced by a CALL at Addresses:
 |:0043E2B7   , :0043E607   , :00447DC8   , :0044870F   , :0045C8C3
 |
 :0040CEFC 55                      push ebp
 :0040CEFD 8BEC                    mov ebp, esp
 :0040CEFF 81C404F0FFFF            add esp, FFFFF004
 :0040CF05 50                      push eax
 :0040CF06 81C448FDFFFF            add esp, FFFFFD48
 :0040CF0C 53                      push ebx
 :0040CF0D 56                      push esi
 :0040CF0E 57                      push edi
 :0040CF0F 8885E3FEFFFF            mov byte ptr [ebp+FFFFFEE3], al
 :0040CF15 BE38D74900              mov esi, 0049D738
 :0040CF1A B848174900              mov eax, 00491748
 :0040CF1F E82C5A0700              call 00482950
 :0040CF24 8D95C8FAFFFF            lea edx, dword ptr [ebp+FFFFFAC8]
 
 * Possible StringData Ref from Data Obj ->"rarreg.*"
                                   |
 :0040CF2A B843104900              mov eax, 00491043
 :0040CF2F E839EDFFFF              call 0040BC6D
 :0040CF34 84C0                    test al, al
 :0040CF36 7514                    jne 0040CF4C
 :0040CF38 33C0                    xor eax, eax
 :0040CF3A 8B95E4FEFFFF            mov edx, dword ptr [ebp+FFFFFEE4]
 :0040CF40 64891500000000          mov dword ptr fs:[00000000], edx
 :0040CF47 E9D0050000              jmp 0040D51C
 
 ...
 
 * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
 |:0040CF47(U), :0040CFB7(U), :0040D0DD(U), :0040D12D(U), :0040D2A5(U)
 |:0040D350(U), :0040D3C3(U), :0040D461(U), :0040D4F2(U)
 |
 :0040D51C 5F                      pop edi
 :0040D51D 5E                      pop esi
 :0040D51E 5B                      pop ebx
 :0040D51F 8BE5                    mov esp, ebp
 :0040D521 5D                      pop ebp
 :0040D522 C3                      ret
 

И что же я увидел?

:0040CF38 33C0                    xor eax, eax

Зануление eaxal соответственно) и решил это исправить. Глянул адрес данной строки в WinDasme это C538h.

Открыл файл WinRar.exe при помощи Hiew.

Нажал два раза Enter для перехода в режим ассемблерных кодов. Нажал F5 ввел адрес C538 и переместился на нужную мне команду. Затем нажал F3 для редактирования и F2 для ввода кода на асме. Ввел код mov al,1 или в кодах B001 все сохранил и вышел. При торжественном запуске нет ни НАГа (который меня чуть из себя не вывел ну просто достал уже), ни надписи evaluation copy.



Комментарий Bad_guy'я:
Мне конечно не очень удобно рекламировать свои работы в чужих статья, но разрешу себе сделать исключение. Дело в том, что я создал универсальный патч для WinRAR и он уже проверен на версиях от 3.00 до 3.30 FINAL, причем неважно английский ВинРАР у вас или русский - http://cracklab.narod.ru/dload/wrar3xp.zip Что касается электронной подписи - ее вы не сможете использовать, но она как выяснилось никому не нужна - на форуме мне никто не смог вразумительно обяъснить зачем ему нужна эта электронная подпись, значит она все таки никому не нужна, может только если для понта.

З.Ы. Данная статья написана только в целях обучения. Если вам очень понравился WinRar то лучше его купите. Писал как мог, старался чтоб всем было понятно, потому как сам читаю статьи и не всегда все понимаю.



DarkSlider <darkslider@list.ru>



Обсуждение статьи: Регистрация WinRar 3.22 >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS