Авторские статьи Cracking для новичков...

Discussion in 'Статьи' started by Micr0b, 3 Jul 2006.

  1. Micr0b

    Micr0b Elder - Старейшина

    Joined:
    14 Jan 2006
    Messages:
    223
    Likes Received:
    168
    Reputations:
    26
    !!!CRACKING!!!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    ###Первые шаги для начинаюшего крэкера.###

    Начнем с самого простого. Что вообше нужно для того чтобы взломать програму, обойти или убрать
    защиту, сгенерировать серийный код?Правильно - посмотреь исходный код програмы и при
    необходимости видоизменить его.К сожалению, найим исходнник к коммерческому продукту практичыске невозможнр, поетму приодитса идти по обходимому пути.Как извесно, любая программа представлена на ПК в виде машиных команд.Ти команды понятны микропроцессору, но
    програмировать с их помощю чрезвычайно сложно: открой любой ЕХЕ-файл в
    НЕХ -редакторе, и ты сразу поймешь, что я имею в виду. Чтобы облегчить процес программирования был изобретен специальной танслятор -ассамблер. Если из ассамблерного листинга можно получать машишый код, то вполне возможно и обратная операцыя. Любой файл может быть представлеой в виде ассамблерных команд- етим и занимаютса дизассамблеры.Для дизассамблера IDA(www.idapro.ru ) нужно иметь опыт.Для решения несложных задач вполне достаточно удобного W32Dasm
    ( www.expage.com/page/w32dasm ).А чуть не незабыл нам ищо нужен отладчик (дебаггер).Он такде дизассемблирует исходный код програмы, но при етом когда программа выполнять оприделоные действия, отладчик ищет в исходном коде програмы тот код который выполнилса в даной момент...Лидер среди отладчиков есть OllyDBG (www.OllyDBG.de).

    Начиная займатса крэкингом буддь рассудителен. Мой тебе совет: не спеши брать быка за рога
    и срвзу браться за взлом добротнлй софтины с продуманой защитой. Без соответствующего опыта
    у тебя все равно вряд ли что-то получитса. Скорее всего,ты просто закинешь это неблагородное
    занятие, одновременно с этим потеряв всякий интерес к теме.Начинать, как извесно, надо с
    простого: здесь будет и понимание, и интерес, исамое главное -толк. Можно, например зайти
    на www.downloads.com и накачать пару десятков сомнительных программ, типа СуперКАлькулятор, ГиперБлокнот... - среди них, наверняка, найдутса экземпляры с приметивной защитой. Но я тебе рекомендую начать с так называемых крякмисов(crackme) -специальных заданых для взломщиков. Многите из них написаны специально для новичков... Идеальный вариант для новичков - серия крякмисов от
    FaNt0m'a www.crackmes.de/users/fant0m/fant0mcollection. Ее и расмотрим: для лутшего усвоения рекомендую выполнить действия паралельно со мной.Только в этом случае ты будеш понимать, о чем я говорю :).

    #Немного теории

    Возьмем первый крякмис из колекции - FaNt0m'a CrackMe #1. В задание требуется найти серийник,
    при этом используя исключительно дизассемблер . Используя дебагер по условию запрещено, и не
    требуется. Посмотрим что собой представляет програма: обычное окно с текстовым полем для ввода.
    После ввода случайного значения (например, слова 'античат'), появится всплывающее окно с
    ошыбкой Worng rassword. Keep trying, you'll get it!. От этого, соббственно, мы и будем крутиться. Текстовые строки информационных сообщений зачастую хранятся в самом коде программы.Соотвестено, если найти обращения к строке, то без труда найдется и вызов функции вывода сообщения, а там уже и процедура проверки серийника недалеко. Попробуем разобраться во всем более подробно. В общем случае программа состоит из трех областей памяти(сегментов): сегментов кода (CS), сегментов кода (DS) и сегментов кода (SS).В первом, как ты понял, хранится непосредственно код программы, то есть команды.Второй сегмент предзначен для хранения даных (переменых, констант и т.д) - по идее, выданное програмой сообщения разполагается имено там. Сегмент стека прдставляет собой специальную область памяти, предзначенную для временого хранения даных, например, параметров, представаемых процедур и функциям. Слово 'стек' подразумевает спользования принцина FILO (First In- Last Out, первым пришел- последним вышел).Последнее занисенное в стек (командой PUSH) значение, будет извлечено (комадой РОР) первым, предпоследное- вторым и т.д. Можно нагляднопредставить себе это, вобразив колоду карт.Если ты знаком с программированием под Windows то должен знать, что стандартное окно с сообщением чаще всего выводттся с помощью специальной API-функции MessageBoxA.Сама строка собщения и прочие параметры окна помещаются в стек, откуда поже извлекаются и обрабатываются функцие (это самый разпространеный способ передачи параметров функции в язык ассамблер.)Получается что после ввода неправельного ( ты же не думаешь его угадать??))) ) серийника, програма загружает в стек адрес строки и вызывает функцию MessageBoxA. W32Dams, как и многие дизассамблеры, умеют показывать где имено происходит обращения к етой или иной строке. Это значительно облегшает поиск нужного фрагмента
    кода: достаточно в дизассамблированном листинге произвести поик текста сообщения, и мы сразу найдем нужный вызов функции MessageBoxA. В большынстве случаев гденибудь рядом разпологоеться и процедура
    проверки серийника наша задача- с помощбю дизассамблера просмотреть правильный пароль во впемя сравнения его со введениым.

    #Взлом серийника

    Зпускай W32Dams, далее меню Dissembler->Open Files и выбирай файл CRACKME1.EXE. Ну и чо переднами..? да да ето дизассемблированный код програмы, но и в нем еще нужно разобраться. Наша цель- найти ту
    часть кода, которая каким-то образом использует обозначенную выше строку. Самый банальный способ-
    провести поиск строки (меню Search->Find Next), но есть и другой вариант. Дело в том, что W32Dams
    записывает все найденные обращения к строковым даным в специальный список
    (меню Refs->String Data References). Поетому вместопоиска можно просто выбратьиз списка нужную строку и дражды кликнуть по ней мышью. Так или иначе, W32Dams, автоматически переведет на следующий код:


    * Possible StringData Ref from Data Obj -> "Wrong Rassword Keep trying? you'll get it"!
    004012A2 6845304000 push 00403045


    [​IMG]

    Комментарий указывает на то, чо в следующей команде происходит обращение к нужной строке-
    Wrong Rassword Keep trying? you'll get it!. Разберем эту команду более подробно: 004012A2 ето адрес, где в памяти находится даная команда, 6845304000 - представление команды в шестезначном виде
    (машинные коды). push 00403045 - непосредственно сама ассемблерная команда. Она помещает в стек адрес
    00403045, по которому, судя по комментарию W32Dams'a, хранится наша строка.По нашему предположению после загрузки адреса строки в стек, происходит вызов функции , выводящейсообщения на экран. Так и есть - смотрим ниже:


    * REference To: USER32/MerrageBoxA? ord:01BBh
    :004012A9 E85C00000 Call 0040130A



    W32Dams нам явно указывает , что команды вызова функции Call вызывает имено API- функцию вывода окошка
    (MessageBoxA).теперь смотим, что происходит до вызова этой функции.Сразу бросается в глаза следующий код:


    00401291 Call 00401352
    00401296 cnp eax, 00000000
    004001299 je 004012B0


    На самом деле это довольно стандартная конструкция - запомн ее.В 90% случаев это и есть код проверкисерийника.Сначала вызывается некоторая процедура, которая сравнивает введенный пользователеми правильный код, и по результатам проверки устанавливаетнужное значение регистра ЕАХ. После этого с помощью команды СМР производится сравнение значения регистра с 0.Если они равны (je - jump equal- перейти, если равно), осуществляется переход на адрес 004012В0. Давайте посмотрим, что находится по этому адресу - нажми Shift+F12 и в появившемся окошке введи этот адрес.ОГО! Появившийся фрагмент кода в точности повторяет код вывода сообщения на екран. Разница лишь в том,
    что вместосообщения о неправильном коде, выводится надпись You got it! Your now a cracker!.Отсюда вывод:вызванная ранее процедура действительно осуществляет проверку серийных кодов. Если пользоватнль введет правильный пароль, то значение регистра ЕАХ становится равным 0, и
    управление передаеться процедуре вывода сообщения об успехе. В противном случае в регистре
    ЕАХ записывается 1, и перехода не происходит. Далее по коду расположен вызов MessagrBoxA с сообщением об ощибке, который и выполняется. В нашем случае все еще проще. Функция проверки является стандартной
    функцией сравнения двух строк IstrcompareA, которой через стек передаются два параметра:

    [​IMG]

    :00401287 689С304000 push 0040309C
    * Pssible StringData Ref from Data Obj -> "m0tNaF-EmKCARc"
    :0040128C 6829304000 push 00403029
    * Referece To: KERNEL32.IstrcmpA,Ord:02D5h
    00401291 E8BC000000 Call 00401352


    Первой командой push в тек заносится адрес введеной нами строки, а второй- настоящтй серийник.W32Dams любезно подсказал, что по этому адресу находится строка m0tNaF-EmKCARc. Это и есть серийник :)).

    http://xss-xss.nm.ru/anti/Crackme1.RAR


    Взял из журнала хакер тока не помню какой номер..
    Пока всё..)
    Продолжения скоро будет..)))
     
    #1 Micr0b, 3 Jul 2006
    Last edited: 3 Jul 2006
    6 people like this.
  2. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    1. Адрес сайта оли -
    , а не www.ollsbg.de, как ты написал.
    2. Да и меня смущает то как ты писал =).. Начало абсоютно безграмотно (грамматически), потом всё отлично... Ну это неважно )
    3. Первый крякми фантома может крякнуть любой человек умеющий читать ), ты бы хоть про второй написал )
    4. .
    - 100% что я уже где-то это видел )
    [добавлено позже]

    Вот откуда растут ноги у этой статьи )
    http://www.xakep.ru/magazine/xa/080/070/1.asp
    Как я и предполагал...
     
    #2 tclover, 3 Jul 2006
    Last edited: 4 Jul 2006
    1 person likes this.
  3. Micr0b

    Micr0b Elder - Старейшина

    Joined:
    14 Jan 2006
    Messages:
    223
    Likes Received:
    168
    Reputations:
    26

    Я в это время редагу....)

    А про автора провтыкал..сори..)
     
  4. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Все крякмисы от Fantom'a + тутор от меня(BUG(O)R).
    WxProtect_CrackMe
    TimeCOP
    NoName CrackMe's
    Crackme#13_By_Detten


    Читать тут: http://hunger.ru/debug
     
    1 person likes this.
  5. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    шестезначном - шестнадцатеричном (это ж тебе не аська)
    почему за адресом 00401296 следует адрес 004001299 (по идеи ты должен был скопировать это из дизасемблера)
    cnp eax, 00000000 - cmp eax, 00000000 (нет такой команды cnp)
    Если кодишь на asm'e, эти ошибки сложно незаметить, их даже сложно допустить, не говоря о том, что ты должен был это хотябы проверить, перед списыванием.

    Ну ладно, оформление хорошее, смысл направлен на обучение начинающих крякеров. +
     
  6. Micr0b

    Micr0b Elder - Старейшина

    Joined:
    14 Jan 2006
    Messages:
    223
    Likes Received:
    168
    Reputations:
    26
    Я проверял...=))
     
  7. c411k

    c411k Members of Antichat

    Joined:
    16 Jul 2005
    Messages:
    550
    Likes Received:
    675
    Reputations:
    704
    CodePimps e-zine issue #5 статья 0x05 Введениe в реверс инжиниринг by Zool
    разобраны все crackmes`ы FaNt0m’a..
    смотрим здесь..
    весь номер тут..

    здесь еще один кракми http://ct757.net.ru/misc.html
     
    _________________________
  8. ~Fenix~

    ~Fenix~ Banned

    Joined:
    26 Jul 2005
    Messages:
    190
    Likes Received:
    50
    Reputations:
    6
    кажется я ето читал на краклоб.ру нехорошо ток делать, лови -
     
  9. [Zarakul]

    [Zarakul] Elder - Старейшина

    Joined:
    12 Dec 2005
    Messages:
    153
    Likes Received:
    49
    Reputations:
    6
    Там без скринов. А HakNet хотя бы старался. За это ему +
     
  10. Tikson

    Tikson Elder - Старейшина

    Joined:
    9 Oct 2005
    Messages:
    263
    Likes Received:
    42
    Reputations:
    14
    nerezus проще диск от краклаб купить всего 300р зато там ВСЕ
    -----
    и в журнале хакер это тоже писали =)))
    ---------
    кстати был даже хакер спец в котором ВСЕ про крекинг писали =))
     
    #10 Tikson, 6 Jul 2006
    Last edited: 6 Jul 2006
  11. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    и то, что по моим ссылкам? ;)

    неужели =)))
     
  12. Tikson

    Tikson Elder - Старейшина

    Joined:
    9 Oct 2005
    Messages:
    263
    Likes Received:
    42
    Reputations:
    14
    там крякмисы специально для твоего сайта сделаны? если да, то красавчег )
     
  13. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    Тиксон =)) ... там туторы от Nerezus'a =)
     
    1 person likes this.
  14. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    не от меня, а от соавтора ) наш сайт с ним ;)
     
  15. Micr0b

    Micr0b Elder - Старейшина

    Joined:
    14 Jan 2006
    Messages:
    223
    Likes Received:
    168
    Reputations:
    26
    Начало на ссылка

    Продолжение.

    ###Убираем наги.###

    Наг- это назойливое окошко, которое присуще любой триальной программе.
    Смысл окошка- напомнить пользователю о том, что програмисты тожелюблять кушать,
    поэтому покупка програмы была бы очень кстати. Общий принцип таков.
    Во время запуска приложения , осуществляется простая проверка- заригистрированая
    ли програма или нет. Индикацией того, что приложение зарегистрировано, может быть
    наличие некоторого файла, ключа реестра или, что более вероятно, что прога уже
    зарегистрирована, то никакого наг-окна не выводится, и программа продолжает
    обычную работу. В противном случае управление передается прочедуре, которая выводит
    наг на екран и в большинстве случаев требуетнажать клавиши для продолжения работы.

    Как правило убрать наг-окно не представляет труда, в этом можнолегко убедиться на
    примере FaNt0ms CrackMe #2.После запуска проги пользователя одаривают не один,
    а сразу двумя наг-окошками, но задача от этого практически не усложняеися.
    к сожалению, взможность негистрации не предусмотрена, поэтому единствинное,
    что остается сделать, - это вручную убрать из кода левые фрагменты програмы.
    Или точнее говоря, вызовы процедур, выводящих на экран эти назойливые сообщения.
    В принципе это можно сделать с помощью дизассамблера и НЕХ-редактора, но удобнее и
    уместнее все-такм использовать отладчик (или и то, и другое одновременно) - скоро
    ты в этом убедишся.

    Итак, запускаю OllyDBG, а с помощью меню отрой файл CrackMe2.exe. В принципе, найти
    нужный фрагмент кода, содержащий вызовы левых процедур, можно по описаному ранее
    алгоритму в(часть №1).Для етого нужно кликнуть правой мыши в окне с ассемблерным кодом.
    и в контекстном меню выбрать пункт Search for -> All referenced text string.
    В появившемся списке ты срвзу же увидишь текст сообщения выводимый в окне нага, а
    двойным кликом сможешь перейти туда, где н используется. Но мы пойдем по другоу пити
    и изучим еще один ключевой пример, которой активно используеться во время взлома программ.
    Если ты уж когда-то пробовал ломать програмы, то наверняка, слышал о так называемых
    брейкпоинтах (breakpoints).Брейкпоинт - это место останова програмы, то есть точка,
    в которой программа приостанавливает свое выполнение и указывает адрес текущей команды
    в отладике. Использовать ето черезвычайно полезный прием очень просто. Нам уже извесно
    что, небольшое окошко с сообщением легко может бытьвыведено на экран с помщью функции
    MessageBoxA. Теперь все, что от нас требуется - установить точку останова на вызове этой
    функции, а после остановки программы всего лишь вырезать из кода ее вызов. Попробуем.?)
    Если правильно установил OllyDBG и подключил чрезвычайно полезный плагин CommandBar, то в
    нижней части экрана должно светиться окно для ввода команды. Введем команду для установки
    точки останова на вызове функции MessageBoxA: bpx MessageBoxA. Правильност установки
    брейкпойнта можно проверитьв окне Breakpoints (меню View-> Breakpoints). Там же его можно
    на время деактивизировать, или вовсе удалить.
     
  16. Micr0b

    Micr0b Elder - Старейшина

    Joined:
    14 Jan 2006
    Messages:
    223
    Likes Received:
    168
    Reputations:
    26
    Далее необходимо запустить программу из
    отладчика для этого нажми клавишу F9 или выбери в меню Debug->Run.Программа сразу же
    остановилась на команде с адресом 004010DE:

    004010DE CALL <JMP.USER32.MessageBoxA> ; MessageBoxA

    Мы получили то, что хотели - программа остановилась до вызова функции MessageBoxA. Если ты
    выполняеш действия параллельно сомной то, наверняка приятно удивлен, что OllyDBG приводит
    разшифровкупараметров, которыепередаются этой процедуре. Очень наглядно и удобно.

    ###Нет операции.###

    Тепрь рзберемося, как этот вызов можно убрать. В этом нам поможет специальная инструкция
    ассемблера - нет операции (NOP). Для того, чтобы убрать вызов процедуры (или любой
    другой код), достаточто забыить его машинный код командами NOP. В результате в программе
    образуется своеобразная дырка, но на работоспособность она ни коем образом не повлияет.
    Правда , здесь есть один нюанс. машинный эквивалент команды NOP (в шестнадцатеричном
    представлении - 90) занимает один байт,в то же время машинная командя, вызывающая функцию
    MessageBoxA (E8 C5010000) - целых 5. Несоответствия быть не должно, и чтобы полностью
    перекпытьисходною комануду нужно исползоватьуоманду NOP 5 раз. К счастю, OllyDBG полностью
    избавляет нас от лишнего неорроя.Кликни правой кнопкой мыши на строке, где произашла точка
    останова, и выбери в меню Binary->Fill with NOPs. Отладчик самостоятелно заполнит комануду
    Nopаминужно число раз. Теперь можно продолжыть выполнения программы - нажымаем F9. Сразу
    выясняется две новости: одна хорошая, другая - нет((. Начну с хорошей: первый наг-скрин мы
    убрали. Плохая новостьзаключается в том, что другой наш остался на месте. Почему? Видимо,
    он отображатся с помощю другой АРІ-функцей,на которою брейкпоинт не установле. Не беда.
    Открываетм окно Referencer (view-> Referencer): после установки первого брейкпоинта сюда
    записалася список всех вызываемых програмой функций. С базовымизначениями АРІ (или мануалом
    под рукой) можно предложыть, что наг выводится с помощю функции DialogBoxParamA. Предлагаю
    проверить проверить тебе самому. Все изменения можно вручнуювнести через НЕХ-ркдактор, с
    помощю которого байты по нужным адресам перезаписать числом 90.Или же автоматически записать
    все изменения с помощью самого OllyDBG: первый клик по исправленниму ассемблерному коду, меню
    Copy to Executable-> All modifications.

    Всё..)..
     
    #16 Micr0b, 1 Aug 2006
    Last edited: 6 Aug 2006
    1 person likes this.
  17. Rabid Rabbit

    Rabid Rabbit Elder - Старейшина

    Joined:
    31 Aug 2003
    Messages:
    161
    Likes Received:
    15
    Reputations:
    -9
    Супротив граматнасти ниче протев не емею, но емей совисть, пеши хатябы "ассемблер" правильна. Родной язык машины заслуживает того чтобы его название писали правильно, в отличие от васиков, сей, пырлов, дэбльфей и проч=)
    Без коментариеф.
    .
    ----------------------
    А воще статья довольно примитивная. Реальные защиты далеко не так примитивны.
    1) можно обойтись без мессадж боксов, зарегив класс окна и назначив ему простенькую оконную процедурку на выньапи
    2) можно сделать сплайсинг в АПИ МесаджБоксА
    3) можно замаскировать саму проверку: соотв. CMP будет не так то просто обнаружить если в случ неудачной проверки запустить поток который подождав пару сек вызовет МессаджБоксА (или еще свое окно как наприм. сделано в выньраре).
    4) еще один поток может висеть в это время в памяти и периодически проверять чексум критического участка кода, причем этот поток можно даже внедрить (такое дело токма в хрюхе но всерано) в совершенно левый процесс (напр в эксплорер.ехе). Ессесно вылет произойдет даже тогда когда в этот код просто поставить точку останова (int 3), что обычно и делает дебагер.
    5)Как вариант такую проверку может осуществлять совершенно безобидная на первый взгляд АПИ-функция, которую ессесно перехватили. Трассировка перехваченных АПИ функций геморойное дело. Например если это была инъекция (или первые 6 байт меняются) то поставив туда точку останова мы или вылетим нах из отладчика или уйдем лесом (в зависимости от варианта реализации и самого отладчика).
    6) динамическая шифрация/расшифрация очень затруднит фикс проги, даже если в памяти мы его успешно крякнули.
    7) методов ухода из-под дыбугера (валом) ну и так дальше. просто влом писать все методы постановки палок в колеса кракерам. их очень много.
     
    #17 Rabid Rabbit, 1 Aug 2006
    Last edited: 2 Aug 2006
  18. Micr0b

    Micr0b Elder - Старейшина

    Joined:
    14 Jan 2006
    Messages:
    223
    Likes Received:
    168
    Reputations:
    26
    Чувак..)
    ТеМа: Cracking для новичков...

    я неспорю есть много ищо нюансов...
    но ето для профи..
    а статя разчитана на новичков.)
     
  19. Rabid Rabbit

    Rabid Rabbit Elder - Старейшина

    Joined:
    31 Aug 2003
    Messages:
    161
    Likes Received:
    15
    Reputations:
    -9
    HakNet Слы, а почему все на ачате пишут "для новичков"? Откуда такая забота о новичках=)
    Ламер тот кто считает себя хакером Ага - одно из определений, на мой взгляд довольно удачное (слава богу я считаю себя програмером:) )
     
  20. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    кстать, давно бы пора (в который раз) открыть отдельный раздел низкоуровневого программирования, крякинга и реверсинга...
     
    1 person likes this.