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

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


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

Исследование SuperCleaner 2.65

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

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

Автор: SouL <art_a @ bk.ru>


   Программа: SuperCleaner v2.65
      Размер: 454 656 байт
        Язык: Microsoft Visual C++ 6.0
      Защита: рег.код
        Цель: взлом, keygen
 Инструменты: SoftIce 4.0.5, MASM8.0, Qview
 

Вступление

сегодня у нас на повестке дня SuperCleaner. Сегодня мы с вами проделаем большую работу, а именно:
  • найдем рег.код
  • как говорится сделаем кейген от самих разработчиков
  • сами напишем keygen
    Немного о программе: очищает ваш диск от не нужных фалов таких как - *.tmp, *.bak,*.ttt,*.@@@, чистит cookies и др. Теперь поговорим о том что из себя представляет защита. Сначала запустим PeID и посмотрим запакована наша программа или нет. Он нам показал "Microsoft Visual C++ 6.0". Закрываем PeiD и запускаем нашу программу. Сразу выскакивает окошко где мы видим четыре конопки - Current Price, Enter Registration, Purchasing info и Continue Trial + сколько нам осталось использовать программу. Переведем часы на месяц вперед и снова запускаем программу. Теперь нам говорят что "Триал закончился, функции заблокированы". Вот и вся защита. Хотя защита очень интересная :), если зайте в реестр на вкладку HKEY_CURRENT_USER\SOFTWARE\SuperCleaner и удалить параметр "SystemConfig"="xxxxxxxxxxx", то триал снова оживет. Да товорищи програмисты, как говорится "Ну хібаж так можна". На этом можно и закончить со вступлением, переходим к самому главному.

    1. Находим рег.код

    Запускаем программу, жмем кнопку "Enter Registration...", в поле Name и Code вводим: SouL, 123454321. Активируем софтайс(CTRL+D) и ставим брекпоинт на функцию копирования: bpx hmemcpy. Жмем ОК и сразу выскакивает софтайс(далее айс), жмем F5 один раз, а потом F12 - 9 раз и окажимся здесь:

     0167:00419079  FFD7                CALL      EDI
     0167:0041907B  E880EDFFFF          CALL      00417E00
     0167:00419080  85C0                TEST      EAX,EAX
     0167:00419082  5F                  POP       EDI
     0167:00419083  755C                JNZ       004190E1
     0167:00419085  8D442404            LEA       EAX,[ESP+04]
     0167:00419089  8D8C2404010000      LEA       ECX,[ESP+00000104]
     0167:00419090  50                  PUSH      EAX
     0167:00419091  51                  PUSH      ECX
     0167:00419092  E889050000          CALL      00419620           <--генерация правильного кода
     0167:00419097  83C408              ADD       ESP,08
     0167:0041909A  85C0                TEST      EAX,EAX
     0167:0041909C  7443                JZ        004190E1           <---------здесь мы прыгаем
     
    Пройдя Call 00419620 по F10 смотрим регистр edx и видим какой-то подозрительный код. Вводим его в "Code" и получаем зарегестрированую рограмму. На этом первая часть закончена.

    2. Кейген от самих разработчиков

    Что же подрузумевается под предложением "Кейген от самих разработчиков"? Суть вот в чем - надо заменить сообщение, о не верном коде, на сгенерированый(от имени) правильный код. Дальше вы все поймете... После Call 00419620 в edx лежит правлиьный код. После прыжка окажемся вот здесь:

     0167:004190E1  6A00                PUSH      00
     0167:004190E3  68ACD14200          PUSH      0042D1AC
     0167:004190E8  6A0A                PUSH      0A
     0167:004190EA  56                  PUSH      ESI
     0167:004190EB  E8D04BFFFF          CALL      0040DCC0             <------вывод сообщения
     0167:004190F0  83C410              ADD       ESP,10
     0167:004190F3  33C0                XOR       EAX,EAX
     0167:004190F5  5E                  POP       ESI
     0167:004190F6  81C400020000        ADD       ESP,00000200
     0167:004190FC  C21000              RET       0010
    Заходим в CALL 0040DCC0:
     0167:0040DCBF  90                  NOP
     0167:0040DCC0  8B4C2408            MOV       ECX,[ESP+08]
     0167:0040DCC4  81EC00010000        SUB       ESP,00000100
     0167:0040DCCA  8D442400            LEA       EAX,[ESP+00]
     0167:0040DCCE  81E1FFFF0000        AND       ECX,0000FFFF
     0167:0040DCD4  6800010000          PUSH      00000100
     0167:0040DCD9  50                  PUSH      EAX
     0167:0040DCDA  51                  PUSH      ECX
     0167:0040DCDB  B938614300          MOV       ECX,00436138
     0167:0040DCE0  E87B78FFFF          CALL      00405560              <-----затирает рег.код
     0167:0040DCE5  8B942410010000      MOV       EDX,[ESP+00000110]
     0167:0040DCEC  8B84240C010000      MOV       EAX,[ESP+0000010C]
     0167:0040DCF3  52                  PUSH      EDX
     0167:0040DCF4  8B942408010000      MOV       EDX,[ESP+00000108]
     0167:0040DCFB  8D4C2404            LEA       ECX,[ESP+04]
     0167:0040DCFF  50                  PUSH      EAX                   <------заголовок сообщения
     0167:0040DD00  51                  PUSH      ECX                   <------текст сообщения
     0167:0040DD01  52                  PUSH      EDX
     0167:0040DD02  FF1538A44200        CALL      [USER32!MessageBoxA]
     0167:0040DD08  81C400010000        ADD       ESP,00000100
     0167:0040DD0E  C3                  RET
    Подумайте сами, как тут можно будет зделать, чтобы вместо сообщения о неправильном коде, выскакивало сообщения с правильным кодом... Если у вас получилось, тогда пропускайте эту часть и читайте следующюю. Остальным читать дальше. Так как CALL 00405560 затирает наш код то мы его просто перепрыгним. Да, кстати, так как edx затирается и используется в других целях, то мы перепешим наш рег.код в другой регистр, например в ebx. Для этого зделаем следующее: по адрессу 0040DCCE AND ECX,0000FFFF вписываем:

     MOV    EBX,EDX
     EB13   JMP 0040DCE5
     90     NOP
     90     NOP
    А так же по адрессу 0040DD00 вместо push ecx, ставим push ebx. Для всех этих целей я использую QWiev. Открываем в нем нашу программу(предварительно зделав копию), F5 и пишим dcca, а дальше меняем байты... Если все сделали правильно, то при выводе сообщения о не правильном коде будет показан правильный рег.код. Неправда классно.

    3. Кейген

    В этой части мы свами напишем кейген к программе(на асемблере). Заходим в Call 00419620(смотри выше) и по F10 доходим вод до такого места:

     0167:00419757  85F6                TEST      ESI,ESI
     0167:00419759  7E13                JLE       0041976E                (NO JUMP)
     0167:0041975B  8B1560194300        MOV       EDX,[00431960]           <------edx=26
     0167:00419761  0FBE1C38            MOVSX     EBX,BYTE PTR [EDI+EAX]   <--ebx=первая буква имени
     0167:00419765  03DA                ADD       EBX,EDX                  <------ebx=57
     0167:00419767  03CB                ADD       ECX,EBX                  <------ecx=57
     0167:00419769  40                  INC       EAX
     0167:0041976A  3BC6                CMP       EAX,ESI                  <-все ли символы кончились
     0167:0041976C  7CF3                JL        00419761
    Вкратце: в edx заносится число 26, в ebx первый символ имени складывается с 26, потом складываем с ecx и так до тех пор пока не закончатся символы. Смотрим дальше:
     0167:00419775  51                  PUSH      ECX
     0167:00419776  68541E4300          PUSH      00431E54
     0167:0041977B  53                  PUSH      EBX
     0167:0041977C  FF1580A34200        CALL      [USER32!wsprintfA]
    А здесь программа склеивает полученный результат с символом "-". Идем дальше:
     0167:0041978B  7E14                JLE       004197A1                (NO JUMP)
     0167:0041978D  8B1564194300        MOV       EDX,[00431964]           <------edx=34
     0167:00419793  0FBE2C38            MOVSX     EBP,BYTE PTR [EDI+EAX]
     0167:00419797  0FAFEA              IMUL      EBP,EDX                  <умножаем символ на 34
     0167:0041979A  03CD                ADD       ECX,EBP
     0167:0041979C  40                  INC       EAX
     0167:0041979D  3BC6                CMP       EAX,ESI
     0167:0041979F  7CF2                JL        00419793
    Здесь все как видите аналогично, только в edx заносится 34 и теперь не складываем, а перемножаем суммы. Дальше...
     0167:004197A1  51                  PUSH      ECX
     0167:004197A2  8D4C2414            LEA       ECX,[ESP+14]
     0167:004197A6  68541E4300          PUSH      00431E54
     0167:004197AB  51                  PUSH      ECX
     0167:004197AC  FF1580A34200        CALL      [USER32!wsprintfA]
     0167:004197B2  83C40C              ADD       ESP,0C
     0167:004197B5  8D542410            LEA       EDX,[ESP+10]
     0167:004197B9  52                  PUSH      EDX
     0167:004197BA  53                  PUSH      EBX
     0167:004197BB  FF15B4A24200        CALL      [0042A2B4]
    Здесь тоже все анологично. В call [0042A2B4] происходит соединение двух частей. Все, а теперь попробуйте сами... Там все как выше изложеное, только будет менятся edx. Я не стал захломлять статью, поэтому исходники можете взять здесь. На этом разрешите откланятся. Если у вас возникнут вопроссы пишите мне, нестесняйтесь(мыло в верху).

    P.S. Запомните все материалы публикуются только в учебных целях и автор за их использование ответственности не несет!!



    Обсуждение статьи: Исследование SuperCleaner 2.65 >>>


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



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


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