Крякинг: Записки дилетанта

Тема в разделе "КРЯКИНГ ДЛЯ НОВИЧКОВ", создана пользователем X-Shar, 12 фев 2015.

↑ ↓
?

Как статья ?

  1. Классно

    13 голосов
    86,7%
  2. Мог-бы и по лучше написать

    0 голосов
    0,0%
  3. Что-то слабовато

    0 голосов
    0,0%
  4. А зачем это ?

    1 голосов
    6,7%
  5. Ндя..., лучше-бы выкладовал ключи

    1 голосов
    6,7%
  1. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Всем привет !

    Что-то стало как-то уныло вообще, особенно на работе, поэтому для поднятия настроения решил продолжить наконец-то свои занятия по крякингу, вообще занимаюсь по мануалу «Введение в крякинг с нуля» [C] Рикардо Нарваха, пер. Aquila !

    Вся проблема правда, что прочитав глав наверное десять что-то забросил месяца на два, но сейчас решил возобновить занятия…

    Вот решил создать тему, что-бы было интересней заниматься, заодно и буду рассказывать о своих успехах на этом поприще (Если они будут эти успехи, Dmeh-Smeh-Smeh!!!) !

    В частности в этой теме расскажу о «Поломанном» своём первом крякми, незнаю правда кому это интересно, но может будут какие-то советы или другие рассказы про крякми, если будет востребовано потом можно даже отдельный раздел создать ! ;)

    Итак автор цикла статей использует дебаггер Oledbg, в описании вроде-даже написано что имеет интуитивно понятный интерфейс, но незнаю на сколько он понятный, я если честно вспотел там разбираться что да как, хотя в мануале всё подробно даже разжёвано, но у меня проблемы с памятью и в этоге всё забыл, так-же нехрена не помню эти команды ассемблера, поэтому основные простенькие выписал, кстати во вложение можно всё скачать, сам мануал + всё необходимое…

    Итак в главе 13-ть, наконец-то дошёл до крякми, хоть и простецкий, автор вроде всё и разжовывал но последнее крякми, что-то нестал, типо задание нужно вытащить пароль из программы самому, кстати ничего сложного вообще не оказалось:

    upload_2015-2-12_18-13-32.

    Рассказываю что я делал, даже этот простецкий крякми можно ломануть кучей способами, я расскажу два способа, третий прочитаете в мануале + наверняка ещё пару найдёте сами, WinkSmile !

    Итак самый первый и простецкий способ даже не запуская программу, открываем его в оледбг и пугаемся, ogo-go:

    upload_2015-2-12_18-14-56.

    В общем-то Олле очень умный дизассемблер, т.е. всё видно регистры, дамп-памяти, но самое-главное видно код ассемблера, видны переменные и параметры (правое окошко после кода).

    А этого нам и хватит для анализа, по крайне-мере такого простенького крякми (В этом способе будем анализировать код + переменные без запуска программы вообще) ! sm582398247

    Итак смотрим код, да-блин какое-то непонятное бла-бла-бла везде там, гы-гы-гы, но потом всё-же видим код двух окошек, т.е. то окошко которое выводится при правильном вводе пароля и то окошко которое выведется при неправильном:

    upload_2015-2-12_18-14-43.

    Смотрим самую правую часть окна на скриншёте, олле всё нам рассказал и сдал крякми с потрахами, видим два окошка (их код я пометил двумя стрелочками на скриншёте), ога значит где-то должно-быть сравнение иначе как программа куда-то там зайдёт и тут олле опять нам всё рассказал, маленький триугольник как-раз показывает переходы (Это там, где ассемблерный код уже, на скриншёте выделен серым и так-же есть стрелочка которую я нарисовал для наглядности)…

    А где-ж пароль-таки спросите все, тут открываем толстенную книгу ассемблера, желательно по толще, что-бы можно-было двинуть кому-нить по башке, и смотрим что-же за команда JNZ, да-блин я опять забыл:

    JNZ переход совершается, если флаг Z неактивен, то есть если результат операции отличен от нуля.

    Какой нахер флаг, мы-же прогу не запустили, далее поднимемся выше на строчку, какой-то OR– Это логическое «или», ТОЖЕ НАМ МАЛО ПОМОЖЕТ…

    Поднимаемся ещё выше на строчку и видем интересный API:

    CALL <JMP.%KERNEL32%.lstrcmspA> я эту команду отметил стрелочкой на скриншоте…

    lstrcmspA – Это АПИ сравнивает строки, ога значит должно-быть две переменные, и если пароль забит в программе строкой и никак не генерируется, можно просмотреть его в олле, даже не запуская программу, ога пароль виден на скриншёте, чуть правее кода:

    Олле мегаумная программа, сама всё показала и крякнула, вот список переменных которые использует lstrcmspA:

    String2 = “cannabis” – Это и есть наш пароль;

    String1=”” – То что мы введём, пусто но в следующем способе мы рассмотрим как это работает более детально…

    КОРОЧЕ ТРЯСУЩИМЕСЯ РУКАМИ, ВВОДИМ «c-a-n-n-a-b-i-s», я аж чуть со стула не упал от радости:

    upload_2015-2-12_18-15-10.

    Способ 2:

    А теперь все наверное скажут (кто дочитал до этого места конечно):

    Ну а где порушенная система, где сгоревший микропроцессор и т.д., ну-так не интересно это не крякинг, поэтому что-бы не было стыдно смотреть в глаза серьёзному пиплу, который завязывает шнурки монтировкой, будем запускать и попробуем стянуть пароль динамически, т.е. предположем пароль как-то генерируется или хитро скрыт в коде, что ну не видем мы его !

    Что-бы не разводить писанину, ибо устал, давайте поставим точку останова, на вызове API lstrcmspA:
    CALL <JMP.%KERNEL32%.lstrcmspA>

    upload_2015-2-12_18-15-21.

    Запустим крякми в олле, далее введём любые символы и нажмём на Check, всё прога должна зависнуть, далее смотрим стек и что-же мы видим:

    upload_2015-2-12_18-15-37.

    String1 = "xcvvzxcvzsdv" – То что мы ввели;

    String2 = "cannabis" – Наш пароль ! ;)

    А вообще если вместо нашей APIсделать прыжок на адрес 00401251, например прям в олле заменить код на: JMP crackme. 00401251

    То программа будет всегда выводить что пароль правильный, т.е. все проверки сняли, смех-смех!!! !


    В общем-то и всё, уж незнаю когда я доберусь до следующего более сложного крякми и доберусь-ли вообще, но вопрос нужно-ли продолжать дальше писать !


    В данном случае оказалось писать гораздо сложнее, чем ломать сам крякми, надеюсь хоть прочитаете и интересно мнение как ?
     

    Вложения:

    Последнее редактирование: 12 фев 2015
    • Мне нравится Мне нравится x 4
    • Информативный пост Информативный пост x 3
  2. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    • Мне нравится Мне нравится x 1
    • Информативный пост Информативный пост x 1
  3. Антоха Администратор
    Антоха
    Ответить в чате

    Администрация

    Регистрация:
    26.12.2012
    Сообщения:
    3.179
    Симпатии:
    11.093
    Пол:
    Мужской
    Репа:
    +11.241 / 47 / -6
    Jabber:
    Skype:
    Тоже начинал читать Нарваху.Согласен,что расписано всё от и до.И в этом "от и до" очень большой объём информации.Чтобы всё это удержалось в памяти и осмыслилось,нужно штудировть этот мануал каждый день.А так недельку если пропустил,то можно всё сначала начинать)В итоге у меня так и получилось....
    Олег за статью-респект!Просто и ясно описаны все моменты.
     
    • Мне нравится Мне нравится x 1
  4. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    • Мне нравится Мне нравится x 2
  5. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Решил ещё один крякми, в этом крякми две части, это жёстко забитый серийник и динамически генерирующийся, я пока парюсь с жёстко забитыми, т.к. кейгены пока писать не умею, но если до этого дойду, то напишу в следующий статьях:

    upload_2015-2-13_14-37-35.

    Решаем первое задание «HardCoded», тут немножко по сложнее, т.к. серийник сравнивается побайтно, т.е. если в прошлом крякми это делала специальная апи, то здесь автор сам написал такую программу, которая сравнивает всё побайтно в цикле…

    Вообще рекомендую скачать версию олле 2.01 эта последняя версия, но там интерфейс малость поменялся, зато не будет ключить на x64, итак что-бы не разводить писанину, сразу приступим к решению:

    upload_2015-2-13_14-37-58.

    Находим АПИ GetWindowTextA и ставим там точку останова, именно в этой апи идёт считывание что мы введём и как следствие что идёт после этой функи будет уже обработка, проверка на правильность и т.д.

    К сожаленю что-бы поставить точку останова на процедуре, в 2.01 поменялось немногу, нужно выделить нужную АПИ далее правой кнопкой и Find refences

    upload_2015-2-13_14-38-17.

    Далее там уже правой кнопкой и можно поставить точку останова:

    upload_2015-2-13_14-38-33.

    Кстати видно что функа фызывается аж три раза, причём два раза с MaxCount =32 и один MaxCount=11, кстати 11 – это и есть длинна нашего пароля… :)

    В общем запускаем крякми в олле, вводим всякую дребедень, нажимаем “CheckHardxoded”, всё программа зависла по точке останова, прям на нужном нам месте, гы-гы:

    upload_2015-2-13_14-45-47.

    В общем-то пароль уже виден в коде, но скучно давайте анализировать дальше код:

    Нажимаем F7, НО после этого незабудим:

    upload_2015-2-13_14-39-2.

    Далее опять F7.

    Иначе олле нетуда залезет, а конкретно залезет в саму функу, нам это не нужно…

    Короче нажимаем F7 и топаем по коду:

    upload_2015-2-13_14-39-18.

    Что-бы не делать куча скринов выделю код, который нас интересует:

    Код:
                                  Comments
    CALL 
    <JMP.&USER32.GetWindowTextA>  ; \USER32.GetWindowTextA
    LEA EAX
    ,[401353]      ; ASCII "HardCoded"
    LEA EBX,[403215]      ; ASCII "aS"

    CMP BYTE PTR DS:[EAX],0
    JE SHORT 0040138C
    MOV CL
    ,BYTE PTR DS:[EAX]
    MOV DL,BYTE PTR DS:[EBX]
    CMP CL,DL
    JNE SHORT 004013D2
    INC EAX
    INC EBX
    JMP SHORT 0040137B
    Это по сути цикл, в начале в регистры заносится EAX и EBX, то-что у нас в памяти по адресам [401353] – это на кстати пароль, гы-гы, и [403215] – это то-что мы ввели, но это я думаю понятно, что происходит далее…

    CMP BYTE PTR DS:[EAX],0 сравниваем, если регистр EAX=0, если да то JE SHORT 0040138C, переход на адрес 0040138C там и будет наша окошко, которое скажет что мы молодцы, гы-гы…

    Если-же EAX не ноль то перехода не будет, а в специальные регистры CL и DL, заносится содержимое регистров EAX и EBX, причём если из описания, то регистр DL– это регистр данных, а CL-это счётчик, но вот заносится будут байты, а не всё значение целиком, это и есть побайтная проверка, в Олле это кстати видно хорошо (Смотреть в самом низу):

    upload_2015-2-13_14-47-26.

    Используется цикл Loopи обращения к индексам, как-то так:

    CMP CL,DL

    JNE SHORT 004013D2

    Если байты CL и DL не равны, то JNE SHORT 004013D2 то переходим по адресу 004013D2, там нас обругают что-мы валенки и несмогли решить крякми…

    Далее если равно, то уменьшаем регистры EAX и EBX: INC EAX, INC EBX и переходим в начало цикла JMP SHORT 0040137B и так делаем пока EAX не станет нулём ! :)
     

    Вложения:

    Последнее редактирование: 13 фев 2015
    • Мне нравится Мне нравится x 4
  6. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Забыл ещё добавить во вложение крякми, которое описано !

    Сам олле можно скачать с офф. сайта:http://www.ollydbg.de/odbg201.zip
     

    Вложения:

    • Splish.rar
      Размер файла
      30,5 КБ
      Просмотров:
      6
    • Мне нравится Мне нравится x 2
  7. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Всем привет !

    В главе 18-ть Рикардо задал упражнение CrueHead’а 2, этот крякми отличается тем-что пароль зашифрован методом XOR, причём сравниваются зашифрованные строки, цель вытащить пароль из программы…

    Да-блин а в следующей главе решения нет, а-я так надеялся на его помощь :(

    Придётся делать самому:

    upload_2015-2-19_18-21-53.


    Итак открываем крякми в Олле и запускаем его, далее делаем точку останова на API: GetDlgItemTextA :

    upload_2015-2-19_18-22-7.


    Далее вводим любой пароль:

    upload_2015-2-19_18-22-23.


    Нажимаем ОК, всё прога зависла по прерыванию…

    Теперь смотрим, что в стеке:

    upload_2015-2-19_18-29-31.


    Посмотрим что в буфере, там должен-быть наш введённый пароль после выхода из API:

    Смотрим дамп:

    upload_2015-2-19_18-22-56.


    Как только выйдем из API так и есть в буфере наш пароль (Три байта): 31 32 33

    upload_2015-2-19_18-23-10.


    Теперь поставим прерывание на обращение программы к этому месту и уже будем дальше смотреть что делается:

    upload_2015-2-19_18-23-24.


    Сделали прерывание, далее нажимаем Run, далее будет пара остановок на каких-то АПИ винды, нам это ненужно поэтому нажимаем Run пока программа незайдёт в наш крякми:

    upload_2015-2-19_18-23-38.


    Воо, и что-же тут происходит ?

    Давайте разбираться… ;)

    Да-ну что-то лень гы-гы, в конце цикла видим команду POP ESI, это помещение нашего введённого пароля (123) из стека в регистр ESI, а потом идёт переход на какую-то процедуру через CALL:


    Кстати обратите внимание, на адрес который помещён в регистр ESI:

    upload_2015-2-19_18-23-59.


    Это адрес памяти, где находится наш введённый пароль, рекомендую записать где-нить, ибо пригодится:0040217E


    Далее переходим в наш CALL:

    Код:
    XOR EBX,EBX
    XOR EDI,EDI
    MOV CL
    ,BYTE PTR DS:[EDI+4021A3]
    MOV BL,BYTE PTR DS:[ESI]
    TEST BL,BL
    JE SHORT CRACKME2.004013B1
    XOR BL,CL
    MOV BYTE PTR DS
    :[ESI],BL
    INC ESIINC EDI
    JMP SHORT CRACKME2.0040139D

    В этой процедуре будет шифроваться наш введённый пароль, интересно два куска кода:

    MOV CL,BYTE PTR DS:[EDI+4021A3]

    MOV BL,BYTEPTRDS:[ESI] – Это помещаем первый байт нашего введённого пароля в BL

    XOR BL,CL – Шифруем BL с ключом CL.


    Особенно, хотел-бы знать что-же такое помещается командой: MOVCL,BYTEPTRDS:[EDI+4021A3]

    А почему-бы не глянуть в дампе памяти !?

    Правой кнопкой на команде, «Follow In Dump»->”Memory adress”, видим 16-ть байт:

    upload_2015-2-19_18-25-17.



    «Messing_in_bytes» , хм интересно, если будем анализировать код, то по логике мы берём первый байт введённого нами кода и командой ксорим с первым байтом этой штуки (XOR BL,CL).

    Причём сделано хитро, байты ксорятся каждый с каждым, т.е.

    “1” ксорится с «М»

    «2» с «е» и т.д.

    Поэтому логично предположить, что наш пароль будет 16-ть байт это во первых, а во вторых «Messing_in_bytes» это наш ключ и если мы найдём зашифрованный пароль в программе, то сможем его расшифровать, т.к. XOR это обратимая функция, осталось найти зашифрованный пароль.


    Ну ладно идём дальше, а дальше после шифрования нашего введённого пароля и после выхода из процедуры шифрования, наш шифрованный пароль помещается в стек, командой PUSH CRACKME2.0040217E, кстати наш пароль пошифровалсятам-же и находился по адресу 0040217E, это видно в дампе:

    upload_2015-2-19_18-25-37.


    Т.е. байты 7С 57 40.

    Эти значения мы будем ложить в стек, далее переход в процедуру, где кстати и вытащим шифрованный пароль, гы-гы, такой там код:

    XOR EDI,EDI

    XOR ECX,ECX

    MOV CL,BYTE PTR DS:[402118]

    MOV ESI,DWORD PTR SS:[ESP+4]

    MOV EDI,CRACKME2.00402150

    REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]

    RETN

    REPECMPSBYTEPTRES:[EDI],BYTEPTRDS:[ESI] – Вот-эта штука сравнивает строки, что у нас в регистрах EDI и ESI, а что у нас в регистрах, до выполнения этой штуки ?

    upload_2015-2-19_18-25-52.


    То-что в адресе 0040217E это пошифрованный пароль который мы ввели, это понятно…

    А что-же в адресе 00402150, кто догадается, тому пирожок с капустой…

    Смотрим дамп по этому адресу…

    upload_2015-2-19_18-26-6.


    СПОРИМ ЧТО ЭТО ЗАШИФРОВАННЫЙ ПАРОЛЬ, ШЕСТНАДЦАТЬ БАЙТ:

    1F 2C 37 36 3B 3D 28 19 3D 26 1A 31 2D 3B 37 3E

    КЛЮЧ У НАС ТАКОЙ

    4D 65 73 73 69 6E 67 5F 69 6E 5F 62 79 74 65 73 (Messing_in_bytes)

    ДЕЛАЕМ XOR КАЖДЫЙ С КАЖДЫМ И ПОЛУЧИМ:

    52 49 44 45 52 53 4F 46 54 48 45 53 54 4F 52 4D

    Каждому байту соответствует свой символ в таблице ASCII, осталось преобразовать и получим наш пароль ! ;)

    upload_2015-2-19_18-26-19.


    Пароль: RIDERSOFTHESTORM

    Можно расслабится и попить кофейку, ещё одна победа ! :)

    upload_2015-2-19_18-26-33.
     
    Последнее редактирование: 19 фев 2015
    • Мне нравится Мне нравится x 4
    • Информативный пост Информативный пост x 1
  8. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Сам крякми, если кому нужно...
     

    Вложения:

    • CRACKME2.rar
      Размер файла
      2,8 КБ
      Просмотров:
      2
    • Мне нравится Мне нравится x 2
  9. ason Уважаемый пользователь
    ason
    Ответить в чате

    Форумчанин

    Регистрация:
    21.01.2015
    Сообщения:
    213
    Симпатии:
    243
    Пол:
    Мужской
    Репа:
    +259 / 1 / -4
    Подскажите где можно скачать этот плагин или чем его можно заменить.
    Это из цикла статей Введение в крякинг используя Olli, 1 глава.
    upload_2015-2-19_16-59-53.
     
    Последнее редактирование: 19 фев 2015
  10. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Это плагин CommandBar для старой версии OleDBG 1.10, для новой можно альтернативу CommandLine...

    Если изучать по мануаллу от Рикардо, рекомендую версию 1.10, т.к. в новой версии слегка изменён интерфейс и может-быть тяжело на первых порах...

    Что-бы установить плагины, достаточно просто поместить длл-ки в папку с программой и перезапустить олле...WinkSmile
     
    Последнее редактирование: 20 фев 2015
    • Мне нравится Мне нравится x 2
Похожие темы:
  1. X-Shar
    Ответов:
    7
    Просмотров:
    1.518
Загрузка...

Поделиться этой страницей