Нажмите CTRL-D чтобы добавить нас в закладки
HackZone.RU - Снятие регистрационных защит на примере Актуальные базы 2GIS в форматах CSV,Excel,SQL
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Поиск ТОП Добавить публикацию

Снятие регистрационных защит на примере

26.01.2009

Много кто наверное качает разные там кряки, патчи, кейгены и весьма весьма им рад
(если в них нету вирусов, хехе шучу).

И наверное многим интересно как подобное делается, тоесть ломаются программы.
Ну что ж, в этой статье я не только расскажу, но и покажу.

Думаю многие знают, что "обычно" программы пишуться на языках программирования типа Delphi, C/C++, Visual Basic и наверное среди читателей есть и те кто умеет на этих языках писать. Компиляторы переваривают то что вы напишите в машинный код, который уже и выполняется. И многие задают вопрос можно ли сделать обратное?
К сожалению или к счастью (смотря для кого) полностю обратить процесс нельзя практически. Но можно "увидеть машинный код" на языке ассемблера, что во много и много раз облегчает задачу изменения этого самого кода. Ведь если найти защиту и отключить ее, то можно сделать чтобы программа работала и не просила регистрации и/или думала что она уже зарегистрирована.

Для тех кто не знает ассемблер все последующее может оказаться очнеь сложным (хотя таким и не является),
хотя я и буду пытаться пояснять как можно проще, все же рекоммендую почитать http://cracklab.ru/pro/asm/asm.rar
(сразу предупреждаю что будет не легко)

Итак едем дальше, кого же то мы крякать (всмысле ломать) будем? - а вот кого (ссылка на скачку)
Программа для бомбежки смсками (сделана для Украинских операторов). Значит устанавливаем прогу, на рабочем столе ярлык, через него и запускаем. Вываливаеться окно, где есть какой то ID и нужно ввести Key. Ладно вводим в Key 123 и жмем ОК.  Ага, не тут то было :-) Орет "Ви ввели невірний ключ", тоесть "Вы ввели неправильный ключ".
Ну собственно мы и не ожидали, что он будет правильный (или кто-то ожидал? - напрасно:-) )
Итак судя по виду ключ генерируеться на основе этого ID, который на каждом компе должен быть разный :-(

Но хватит лирики, будем продвигаться больше к практике.
Перед тем как приступим нужно иметь необходимые инструменты, без которых ну очень трудно что то сделать.
1. Дизассемблер http://cracklab.ru/download.php?action=get&n=MzA=
2. Шестнадцатеричный редактор http://wasm.ru/baixado.php?mode=tool&id=112

Извлекаем архив дизассемблера в свою папку. Запускаем дизассемблер, а именно его главный файл kWdsm.exe
Стоп, что такое дизассемблер? - Это программа через которую мы и "увидим машинный код" на языке ассемблера
(все просто :-) )

Итак меню Disassembler -> Open file to Disassemble.. Выбираем главный файл нашей подопытной програмки, тоесть смс бомбера:  "...\Program Files\CRAZY\SMS_BOMBER\SMS_BOMBER.EXE"
Ждем, файл загружаеться... есть.

Теперь можно увидеть сколько страниц страшных комманд в нашем пациенте :-) А поскольку их там оочень много, как же найти те, что отвечают за регистрационную защиту? Ответ довольно очевиден: нужно найти нечто специфическое, что отличает защиту от остального кода. И это нечто есть то "ругательство" которое выплевывает защита, а именно когда мы ввели неправильный код она нам сказала: "Ви ввели невірний ключ". Ок значит и будем искать эти слова.

В дизассемблере есть кнопочка "Strn Ref" вот ее и нажимаем. Теперь видим все тесктовые строки что есть в нашей программе. Ищем нужные нам... Когда нашли дважды щелкаем на строке и закрываем переднее окно. В главном видим что вместо нормальных слов какая то абракадабра (ну лично у меня это так).
Выбираем Disassembler -> Font... -> Select Font.  Набор символов ставим Кирилический.
Вот теперь то уже нормально видно типа: * Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
Но что же это? - такие слова не только в одном месте встречаются :-( Ха, не беда, обезвредим везде! Все равно они далеко не расползлись :-)

Итак теперь начинаеться самая главная часть!

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

К примеру у защиты может быть такой метод проверки на С\С++:
var a = isProgramRegistered();
if (a >= 5) YesRegistered();
else NotRigistered();

Нечто схожее есть и в ассемблере:


:004BDD2F E89466F4FF         call 004043C8          - скорее всего процедура проверки :-).
:004BDD34 83F805                 cmp eax, 00000005 - сравнение.
:004BDD37 7D1D                   jge 004BDD56          - условный переход на комманду по адресу 004BDD56, зависящий от результата сравнения.
:004BDD39 6A00                     push 00000000        - не важно
:004BDD3B B9E4DE4B00        mov ecx, 004BDEE4 - не важно

* Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
                                  |
:004BDD40 BAECDE4B00        mov edx, 004BDEEC - наша комманда свзанная с доступом к строке ругательства.


Как видим если перехода не будет то пойдем дальше строчка за строчкой и прийдем на наше сообщение о том что код неправильный.
А первая операция с нашим сообщением находиться по адрессу 004BDD40.
И если мы переврыгнем аж на 004BDD56 то стало быть это вариант противоположный от "неверный код".
Один из способов взлома заключается в следующем: заменить условный переход на безусловный, который бы давал прыжок
на адресс 004BDD56 независимо от результатов сравнения.
итак нужно заменить условный jge 004BDD56 на безусловный jmp 004BDD56 или же в шестнадцатеричном виде
по адрессу 004BDD37 7D заменить на EB

Такие операции будем проводить в шестнадцатеричном редакторе:
Итак извлекаем из архива шестнадцатеричного редактора hiew611.zip а с него еще hiew611.zip с которого уже извлекаем все в папку.
Запускаем hiew.exe, выбираем в нем SMS_BOMBER.EXE
F4   -> Hex - переключаемся в шестнадцатеричный режим
F5   -> .004BDD37 (перешли на адресс) (точку перед адрессом вводить обязательно!!!)
F3   -> включаем режим редактирования и пишем EB
F9   -> сохранили изменения
F10 -> вышли

Пробуем запускаем программу, вводим 12345 ... и все равно ничего непомогло :-(
Не стоит расстраиваться ведь мы не все переходы изменили.

Пролистываем в дизассемблере немного ниже и видим такое:


:004BDD5F E8A01DF9FF              call 0044FB04
:004BDD64 837DF400                  cmp dword ptr [ebp-0C], 00000000
:004BDD68 751D                          jne 004BDD87
:004BDD6A 6A00                           push 00000000
:004BDD6C B9E4DE4B00             mov ecx, 004BDEE4

* Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
                                  |
:004BDD71 BAECDE4B00             mov edx, 004BDEEC


Ну думаю догадались что менять? - именно по адресу 004BDD68 75 на наше родное EB
Проводим аналогичные операции с шестнадцатеричным редактором...
Изменили? - ОК, идем дальше:


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BDE4E(C)
|
:004BDE9C 6A00                           push 00000000
:004BDE9E B9E4DE4B00              mov ecx, 004BDEE4

* Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
                                  |
:004BDEA3 BAECDE4B00              mov edx, 004BDEEC


Хм, но тут что-то другое написано...
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BDE4E(C)
это означает что на наш адресс 004BDE9C после которого мы дойдем до адресса 004BDEA3 операций с ругательством мы попадем из-за прыжка с адресса 004BDE4E
Ок пролистываем немного выше этого прыжка...


:004BDE47 E874ADF4FF              call 00408BC0    - скорее всего процедура проверки.
:004BDE4C 3BD8                          cmp ebx, eax     - сравнение.
:004BDE4E 754C                           jne 004BDE9C     - наш прыжок к ругательству
:004BDE50 8D55E4                      lea edx, dword ptr [ebp-1C] - не важно
:004BDE53 8B86FC020000         mov eax, dword ptr [esi+000002FC]
:004BDE59 E8A61CF9FF              call 0044FB04
:004BDE5E 8B55E4                       mov edx, dword ptr [ebp-1C]
:004BDE61 8B8610030000         mov eax, dword ptr [esi+00000310]
:004BDE67 E8C81CF9FF              call 0044FB34
:004BDE6C 8B8610030000         mov eax, dword ptr [esi+00000310]
:004BDE72 8B8020020000         mov eax, dword ptr [eax+00000220]

* Possible StringData Ref from Code Obj ->"pass.pos"
                                  |
:004BDE78 BA2CDF4B00              mov edx, 004BDF2C
:004BDE7D 8B08                           mov ecx, dword ptr [eax]
:004BDE7F FF5174                        call [ecx+74]
:004BDE82 A164604C00              mov eax, dword ptr [004C6064]
:004BDE87 8B00                            mov eax, dword ptr [eax]
:004BDE89 E8F6E0FAFF                call 0046BF84
:004BDE8E 33D2                            xor edx, edx
:004BDE90 A15C814C00              mov eax, dword ptr [004C815C]
:004BDE95 E8D6ABFAFF               call 00468A70
:004BDE9A EB18                            jmp 004BDEB4                - вот оно! Если по подресу 004BDE4E мы не прыгнем на ругательство, то далее будет все идти подряд и прыжок произойдет далеко за ругательство по адрессу 004BDEA3 на даресс 004BDEB4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BDE4E(C)
|
:004BDE9C 6A00                           push 00000000
:004BDE9E B9E4DE4B00              mov ecx, 004BDEE4

* Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
                                  |
:004BDEA3 BAECDE4B00              mov edx, 004BDEEC


- значит теперь нам надо сделать обратное, а именно чтобы прыжок по адрессу 004BDE4E никогда не выполнялся.
для этого комманду jne 004BDE9C нужно заменить на ничего не делающие комманды nop
или же по адресу 004BDE4E заменить 754C на 9090
Открываем шестнадцатеричный редактор и приступаем...
Справитесь? - а чего там сложного, просто написать 9090 и все :-)

Фух, идем дальше, тоесть листаем...


:004BDF77 E84C64F4FF              call 004043C8
:004BDF7C 83F805                      cmp eax, 00000005
:004BDF7F 7D1D                          jge 004BDF9E
:004BDF81 6A00                          push 00000000
:004BDF83 B92CE14B00             mov ecx, 004BE12C

* Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
                                  |
:004BDF88 BA34E14B00              mov edx, 004BE134


Ну подобное уже видели, так что я предоставлю вам возможность самостоятельно подумать и решить что менять.
Если не понимаете, то еще раз перечитайте предыдущии "махинации".
Вот еще ниже:


:004BDFA7 E8581BF9FF              call 0044FB04
:004BDFAC 837DF400                 cmp dword ptr [ebp-0C], 00000000
:004BDFB0 751D                          jne 004BDFCF
:004BDFB2 6A00                          push 00000000
:004BDFB4 B92CE14B00             mov ecx, 004BE12C

* Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
                                  |
:004BDFB9 BA34E14B00              mov edx, 004BE134


Здесь тоже ничего сложного :-)
Еще:


:004BE0DD E88EA9FAFF              call 00468A70
:004BE0E2 EB18                           jmp 004BE0FC

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BE096(C)
|
:004BE0E4 6A00                           push 00000000
:004BE0E6 B92CE14B00              mov ecx, 004BE12C

* Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
                                  |
:004BE0EB BA34E14B00              mov edx, 004BE134


Вот тут тоже видим ситуацию с безусловным jmp, которая уже у нас была.
Посколько на это ругательство мы прыгаем от 004BE096, то и пролистаем чуть выше и посмотрим всю картину:


:004BE08F E82CABF4FF               call 00408BC0
:004BE094 3BD8                           cmp ebx, eax
:004BE096 754C                           jne 004BE0E4     - вот он тот переход, что выполняется если ключ неправильный.
:004BE098 8D55E4                      lea edx, dword ptr [ebp-1C]
:004BE09B 8B86FC020000         mov eax, dword ptr [esi+000002FC]
:004BE0A1 E85E1AF9FF              call 0044FB04
:004BE0A6 8B55E4                      mov edx, dword ptr [ebp-1C]
:004BE0A9 8B8610030000         mov eax, dword ptr [esi+00000310]
:004BE0AF E8801AF9FF              call 0044FB34
:004BE0B4 8B8610030000         mov eax, dword ptr [esi+00000310]
:004BE0BA 8B8020020000         mov eax, dword ptr [eax+00000220]

* Possible StringData Ref from Code Obj ->"pass.pos"
                                  |
:004BE0C0 BA74E14B00              mov edx, 004BE174
:004BE0C5 8B08                           mov ecx, dword ptr [eax]
:004BE0C7 FF5174                       call [ecx+74]
:004BE0CA A164604C00              mov eax, dword ptr [004C6064]
:004BE0CF 8B00                           mov eax, dword ptr [eax]
:004BE0D1 E8AEDEFAFF              call 0046BF84
:004BE0D6 33D2                          xor edx, edx
:004BE0D8 A15C814C00             mov eax, dword ptr [004C815C]
:004BE0DD E88EA9FAFF              call 00468A70
:004BE0E2 EB18                           jmp 004BE0FC     - если на предыдущем переходе не прыгали, то здесь идет перепрыг далеко за ругательственное сообщение, что нам и надо.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BE096(C)
|
:004BE0E4 6A00                           push 00000000
:004BE0E6 B92CE14B00              mov ecx, 004BE12C

* Possible StringData Ref from Code Obj ->"Ви ввели не вірний ключ"
                                  |
:004BE0EB BA34E14B00              mov edx, 004BE134


Итак меняем по адресу 004BE096 754C на 9090 и пробуем запустить программу...

И УРАА!!! то что мы хотели :-) защита сломана!

Ну это у меня, ведь я вводил в поле 12345
А у вас может не получится, если введете число длиной меньше 5, то вылетит окно: "Ви ввели невірний ключ чи ID"
Можете просто ввести как я 12345 и все будет ОК, а можете убрать еще и этот барьер - решать вам.
А как найти и обезвредить подобную защиту вы уже знаете!

Надеюсь статья понравилась, принимаются предложения и замечания.
Статья писалась исключительно в образовательных целях, для абсолютных новичков в этом деле,
для всех кому было интересно узнать о том каким образом ломаются програмные защиты.

Copyright(с) BRe@K специально для портала HackZone.RU

При копировании материалов ссылка на HackZone.RU обязательна

Добавить страницу в закладки

 Детали
Категория: Взлом
Опубликовал: BRe@K
Просмотров: 62705
Проголосовало через SMS: 0
Ключевые слова: взлом программ, (найти похожие документы)
  Разместить у себя на сайте
Прямая ссылка
HTML
BBCode ссылка
BBCode ссылка с текстом

 Комментарии (оставить свой комментарий можно здесь)
Спасибо за статью! Thumbsup
01.02.2009 / Tix
Рад, что понравилась.
03.02.2009 / BRe@K
Thumbsupполезно
07.02.2009 / Dual.id
Прикольно!!! Всё получилось! СПСThumbsup
26.02.2009 / miha-sh
Спасибо за статью!))
27.02.2009 / The_Chosen_One
Bayan Спасибо за статью!
01.03.2009 / KyLiBiN
Спасибо, прикольно!Rolleyes
05.03.2009 / Nomiz
Брик статья супер, а как быть с программами с HASP ключами. Может подскажешь! Заранее спасибо
10.03.2009 / Troyan_from_LAN
ваще супер, а мне как раз нужно знать ассемблер , потому что курсач делать через него
16.03.2009 / ikladi
Пожалуйста задавайте вопросы по статье теперь здесь http://www.hackzone.ru/forum/open/id/6502/
27.03.2009 / BRe@K
Класс, спасибо
14.11.2009 / dimanyci
огромное спасибо! сломал защиту бота он-лайн игры!!! Респект =)
03.12.2009 / ertpol09
Спасибо, все сработало! так можно любую игру ломать???
02.07.2010 / Dmitry-Hunter
Это только пример одного типа простейшей защиты.
02.07.2010 / BRe@K
присоединяюсь к комментам выше, статья супер =)
21.12.2010 / Actor
Автор или знающие люди, пожалуйста, ответьте на вопрос.
 
Можно ли, при снятии регистрационной защиты с программы, пойти не методом перегрыгивания на нужный код, а методом поиска самого ключевого слова? Ведь, вводимое слово должно с чем-то сраниваться при проверке, следовательно, где-то в коде программы это слово должно хранится в каком-либо виде. Как до него добраться?
19.09.2011 / _Vladimir_
хорошая статья!
25.10.2012 / funttik
пойду учить ассемблер
05.02.2014 / 32h35h36h
Только зарегистрированные пользователи могут оставлять комментарии

Зарегистрироваться *** Авторизоваться


 Последние новости и статьи  Последние сообщения с форумов
  • Самозащита от вируса Petya
  • Google Pixel взломали за 60 секунд
  • В CMS Joomla обнаружена критическая 0-day уязвимость
  • ФБР не смогло взломать протокол шифрования переписки террористов ...
  • Полиция обыскала дом предполагаемого создателя платежной системы ...
  • Google: квантовый ПК будет в 100 млн раз быстрее стандартных чипо...
  • "Лаборатория Касперского" констатирует усиление атак кибергруппир...
  • Microsoft Edge откроет исходные коды ChakraCore
  • Anonymous объявили 11 декабря «днём троллинга» ИГИЛ
  • Миллионы телевизоров, смартфонов и маршрутизаторов оказались уязв...

    Все новости... Все статьи... Прислать новость RSS
  • Взлом и безопасность / Новичкам » Re: Взлом Whatsapp.Viber.Instagram. facebook.Узнаем взломаем...
  • Взлом и безопасность / Новичкам » Re: Профессиональные услуги по взлому
  • Взлом и безопасность / Новичкам » Re: Online.help.free.hack@gmail.com - услуги взлома и ddos а...
  • Взлом и безопасность / Новичкам » Профессиональные услуги по взлому
  • Взлом и безопасность / Новичкам » Взлом Whatsapp.Viber.Instagram. facebook.Узнаем взломаем !!!
  • Программирование / Java » стрелочные функции в javascript
  • Разное / Ищу работу » Re: Качественный подбор паролей к почтам. Работаем с 2011 го...
  • Разное / Ищу работу » Re: взлом почты на майле
  • Разное / Ищу работу » Re: Взлом емейлов, вконтакте, одноклассники
  • Разное / Ищу работу » Re: Взлом почты mail.ru, yandex.ru, rambler, gmail

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 2007-2012. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    Ya-Cyt службы мониторинга серверов

    #{title}

    #{text}

    x

    #{title}

    #{text}