|
|
|
| Я имею ввиду сам ПРИНЦИП создания "лекарства"? | |
|
|
|
|
|
|
|
для: coloboc66
(17.03.2006 в 14:38)
| | так называемый, реверс девелопмент (если не напутал). То есть готовый код программы анализаруется и ищется фрагмент(ы) отвечающие за защиту. Задача разработчика как можно лучше эти фрагменты спрятать, а задача хакера найти их и обезвредить (в идеале, просто обойти). Наверное, вы неоднократно видели что оригинальный исполняемый файл весит пару мегабайт, а взломанная версия - в несколько раз меньше, но бывает и наоборот. В общем, абсолютно тоже самое что и в ВЕБ, но в случае софта у хакера в распоряжении несколько больший инструментарий, но и требует от него большей квалификации. | |
|
|
|
|
|
|
|
для: Loki
(17.03.2006 в 15:33)
| | А что-исходный код можно добыть из скомпилированного экзешного файла? А каким образом? | |
|
|
|
|
|
|
|
для: coloboc66
(17.03.2006 в 15:35)
| | Добыть нельзя. Можно только понять как он работает. Так же можно запускать программу из под отладчика и анализировать ее действия и данные находящиеся в памяти.
Это примерно как какой-нибудь бытовой прибор: на этапе произвоства есть чертежи, оборудование, описание к этому оборудованию, поставщики материалов, инженеры и пр. Потребитель же имеет в своем распоряжении, предположим, телевизор. Полностью восстановить тех процесс у вас не получится, а вот кропотливо изучая его потроха можно понять как он работает (если ищите что-то конкретное). Работа очень трудная и кропотливая. | |
|
|
|
|
|
|
|
для: coloboc66
(17.03.2006 в 15:35)
| | Нет, его можно дезассемблировать - т.е. получить не набор нулей и единиц, а команды ассемблера - если вы в нём разбираетесь или примерно представляете как должны выглядеть блоки защиты - при помощи хорошего дезассемблера можно достаточно быстро создать рабочий вариант исполняемого модуля. Затем специальная программа сравнивает невзломанный вариант и взломанный и автоматически генерирует крак. | |
|
|
|
|
|
|
|
для: cheops
(17.03.2006 в 15:47)
| | То есть, имея под рукой программу-дизассемблер, можно разобрать скомпилированный файл на команды, потом выбросить из него команды, отвечающие за защиту, потом сравнить исходный файл с новым и в спец. проге сгенерировать кряк, правильно? А что понимается под командами ассемблера? Я думал, что код ассемблера состоит из 0 и 1. Блин, от ассемблера я совсем далек... | |
|
|
|
|
|
|
|
для: coloboc66
(17.03.2006 в 16:09)
| | Ссылки на информацию об ассемблерном языке можно найти тут: http://softtime.ru/forum/read.php?id_forum=2&id_theme=10178. А код, состоящий из нулей и единиц - это машинный язык. | |
|
|
|
|
|
|
|
для: Саня
(17.03.2006 в 16:57)
| | Давно хотел спросить: почему программы крекаются, а скрипты нуллятся? | |
|
|
|
|
|
|
|
для: coloboc66
(17.03.2006 в 16:09)
| | Из нашей новой книги (пока не будут сообщать чему она посвящена):
Изначально программы создавались при помощи машинных кодов, т.е. номеров инструкций процессора. Инструкции в свою очередь осуществляли различные операции вроде перемещения значения из одного регистра в другой. Путём размещения в регистрах значений и осуществления над ними операций (вызова операции по её номеру), за несколько вызовов (тактов) можно было осуществить определённое действие — например, сложить два числа. Из простейших арифметических операций можно было построить небольшую программу, например, деления числа (в те далёкие времена ещё не было сопроцессоров, где операции с плавающей точкой реализованы на аппаратном уровне). Система номеров команд мягко говоря неудобна для повседневного использования, так для копирования содержимого регистра в другой регистр необходимо было использовать один номер, для копирования в третий регистр предназначена второй номер, для копирования содержимого в ячейку оперативной памяти третий, причём номера команд и адреса ячеек необходимо было писать в двоичной форме (листинг I.1.1), что значительно затрудняло отладку. Программисты со стажем вспоминают, что приходилось помнить до 400 основных кодов команд. Самое страшное начиналось, когда необходимо было переходить на процессор новой архитектуры — необходимо было, как-то забыть старые команды и изучать новые, при этом не путать их. Это было достаточно сложно так как и там и там были цифры.
Листинг I.1.1. Машинный код (шестнадцатеричный формат)
4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00
B8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...
0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68
...
73 63 72 69 62 65 64 20 69 6E 20 52 46 43 20 31
33 32 31 2E 20 20 57 68 65 6E 20 53 68 65 63 6B
В связи с этим практически повсеместно стал вводится язык Assembler — команды обозначались буквенными сокращениями и назывались мнемониками. Одна мнемоника обозначает сразу несколько машинных кодов, например перемещение значения в регистры, ячейку в Assembler можно при помощи мнемоники MOV (от англ. move — перемещать). С введением Assembler жизнь программистов значительно облегчилась, даже при смене процессора, неизбежно приводившему к изменению Assembler основной набор команд оставался прежним. Однако архитектура процессора значительно влияла на программы, программист был вынужден помнить, в какие регистры следует поместить данные, чтобы осуществить сложение, а в какие лучше не следует. Кроме того, процессоры не сопровождались математическим сопроцессором и алгоритмы численного вычисления синуса угла (реализованные в любом языке высокого уровня в виде стандартной функции) составляли предмет многочисленных диссертаций. Главным же недостатком ассемблера оставалась значительная привязка к архитектуре процессора. | |
|
|
|
|
|
|
|
для: coloboc66
(17.03.2006 в 14:38)
| | Взламывают программы обычно так:
Нужно запустить IDE и ломаемую прогу. А потом нужно узнать кусок кода, проверяющий регистрационный ключ. На это место в IDE ставится бряк (breakpoint), а дальше я не помню. Но делается что-то в этом роде, пока не удасться обойти процесс регистрации ))
Также обшино используется программа SoftIce. Не буду объяснять что это, так как в сети про эту прогу очень много написано
Для того, чтобы научиться ломать проги, нужно знать ассемблер, как свои пять пальцев )) | |
|
|
|