LINUX.ORG.RU
ФорумTalks

Пргораммерско защитная рекрусия


0

0

Задача как в бинарник засунуть кеш самого бинарника (MD5) по которому он будет проверять свою целостность сам ?!

Типа того запускаем file.sh if [ 'md5sum files.sh' != ТутИдёТХешФАйЛА ] echo "Поломали хады"

Думаю что такое не реально тк хеш файла помещённый в сам файл изменит хеш файла. Рекрусия !?

★★★

ЗАЧЕМ тебе такие глупости?

anonymous
()

Такое делается.

Не знаю, как, но делается.

Какой-то виндовый софт, который я видел, так от кряков защищается.

только это было давно и я не помню, что именно

Lockywolf ★★★
()

А тебе зачем? Кстати, можно проверять хеш от всего кроме ТутИдёТХешФАйЛА. А вообще это не надежно, так как для отключения проверки достаточно в данном файлике заменить != на ==, так что лучше проверять извне. :-)

true
()
Ответ на: комментарий от true

> для отключения проверки достаточно в данном файлике заменить != на ==, так что лучше проверять извне. :-)

шелл код был как пример вобще если в двоичном то всё достаточно защищено.

chapay ★★★
() автор топика
Ответ на: комментарий от Shaman007

>>Ггг! Хэш или ЭЦП просто цепляется в конец, а когда его проверяют, то рассчитывают по файлу без него.

Shaman это не смешно. Тогда просто модифицируем файл, считаем хеш и пишем его в конец.

Lockywolf ★★★
()
Ответ на: комментарий от Lockywolf

1. Нужна методика и суперкомпьютер для расчета такого хеша;
2. Это все равно не защитит. Просто поломают в двух местах -- вынесут проверку контрольной суммы к чертям собачьим одним единственным байтом.

Dr_ZLO
()
Ответ на: комментарий от chapay

Код проверки находится в ломаемой программе и ничто не помешает его отключить.

Почему-то мне кажется, что эту программу никому и в голову не придет ломать или покупать :)

Dr_ZLO
()
Ответ на: комментарий от chapay

>шелл код был как пример вобще если в двоичном то всё достаточно защищено.

Дизассемблеры и дебаггеры рулят.

true
()

Прикрутить запрос к серверу конторы на предмет сверки MD5 с каноническим оригинальным и не ипсти людям мозг.

Gharik
()
Ответ на: комментарий от Gharik

>Прикрутить запрос к серверу конторы на предмет сверки MD5 с каноническим оригинальным и не ипсти людям мозг.

А такая проверка думаешь не отключается? :-) Да и не у всех всегда инет есть.

true
()

Хм...
Как-то малореально, т.к.:
- Изменился ХЭШ - меняется файл.
- Меняется файл - меняется хэш.

Вечный цикл!
Хотя, может и сойдется, но тут ... (сложно сказать, кто) нужен =)

ManJak ★★★★★
()

Кстати, тут поговорил с челом, он сказал, - Dr. Web что-то подобное делает.
Может его расковырять попробовать, на предмет ...

ManJak ★★★★★
()
Ответ на: комментарий от true

> А такая проверка думаешь не отключается? :-)

Конечно отключается, пробовал отключить аналогичную хрень в венде в некоей софтине под названием "starforce"?

> Да и не у всех всегда инет есть.

Ну ты знаешь, жители усть-зажопинска, где даже GPRS отсутствует в принципе, в подобном софте вряд ли необходимость испытывают.

Gharik
()
Ответ на: комментарий от Lockywolf

> Тогда просто модифицируем файл, считаем хеш и пишем его в конец.

Вот выдумали проблему... Хэш надо подписать заранее известным ключом. Ну а открытый ключ известен еще до расчета хэша. Таким образом хэш защищает ключ, а подпись на базе ключа защищает хэш.

Только зачем такое извращение?..

anonymous
()
Ответ на: комментарий от anonymous

Тьфу. Disregard that, я дико туплю под вечер, зачем-то хэш придумал еще какой-то. Подпись и так хэш...

-- anonymous (*) (10.07.2007 21:12:29)

anonymous
()

Кеш и рекрусия порадовали ^_^

troorl ★★
()
Ответ на: комментарий от Lockywolf

> Тогда просто модифицируем файл, считаем хеш и пишем его в конец.

Это если мы знаем алгоритм расчета хэша.

Shaman007 ★★★★★
()

старо. в код вставляется вычисление по какой-либо функции по файлу (например, как тут предложили, CRC32), и проверка полученного значения с константой. к финальному файлу дописывается левый байт (или меняется какйо-либо некритичный байт файла), чтобы подогнать результат под константу. т.е. заход немного с другой стороны.

только фигня это всё, смотреть xbox. пока есть доступ внутрь ОС и/или каким-либо образом доступен нешифрованный код программы, её (по крайней мере, теоретически) можно заломать -- напрямую похакать бинарник, подсунуть левые системные/библиотечные функции, запустить в подкорректированном эмуляторе целевой системы/железа.

berrywizard ★★★★★
()
Ответ на: комментарий от anonymoos

>угу, дизасемблить J# сплошное удовольствие

А алгоритм расчёта никому и не нужен. Как уже сказали, достаточно заменить проверку проверку подлинности этого хеша или подписи != на ==. Всё :)

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

Sherak ★☆
()

Посмотрите защиту бинарника скайпа, одна из применяемых там защит как раз подсчет контрольных сумм. Там высчитывается больше сотни контрольных сумм для разных частей бинарника.

anonymous
()

ВСЕ ВЫ МОНСТРЫ, АДНАЗНАЧНА!!!

Все это делается, в два счета: делаем файл, в котором вместо хеша забиваем буковки, например Z:

const char *md5hash = "ZZZ..Z";

считаем MD5 сумму файла, и найдя в файле N букв Z, заменяем их на md5.

Далия, алгаритхм ов верификейшн:

открываем файл, читаем его в память, имеем char *file_contents; Ищем в нем строчку md5hash (которая уже хранит в себе ничто не иное, а md5 сумму, т.к. мы бинарник модифицировали после компиляции), и заменяем на буковки "ZZ..Z". Получаем образ оригинального файла, считаем его md5 сумму и сравниваем с md5hash.

ВОПРОСЫ?

fmjs
()
Ответ на: комментарий от fmjs

И что? Модифицируется файл. Ставится брекпоинт после функции расчёта, прогоняется. Новое значение хэша вписывается в файл. Если известен алгоритм расчёта хэша, то даже дебагер не нужен.

Lumi ★★★★★
()
Ответ на: комментарий от Lumi

А если символы хеша размазать по всему фалу !?

chapay ★★★
() автор топика
Ответ на: комментарий от Lumi

> И что? Модифицируется файл. Ставится брекпоинт после функции расчёта, прогоняется. Новое значение хэша вписывается в файл. Если известен алгоритм расчёта хэша, то даже дебагер не нужен.

Данный метод защиты в любом случае крайне примитивен, так что крути не крути, а получим лажу.

P.S. Еще можно использовать простые чексуммы, которыми проверяется целостностью IP/TCP пакетов/заголовков: они обладают тем свойством, что если поле суммы забить нулями, посчитать сумму от всего хедера, включая поле суммы, записать поле суммы, то подсчет суммы от хедера с заполненной своей чексуммой даст 0, при корректном пакете.

fmjs
()
Ответ на: комментарий от Dr_ZLO

> непосильно

Видел описание подобной программы на "Obfuscated C Contest".

acheron ★★★★
()
Ответ на: комментарий от fmjs

Браво. Самое простое и изящное решение. Защита, конечно, фигня, но не забывайте, что стоимость защиты не должна превышать 10% интегральной стоимости разработки. То есть для поделки ценой в 5 баксов отлично подойдёт.

Я знаю под оффтопик комплекс программ, который весь проверяет свою легальность через одну отдельную DLL (типа вызов функции dllexport BOOL IsMeRegistered(int id);). И ничего не ломают. Знаете почему? Это называется "защита через административный ресурс". К взломавшему приходит отдел "К" и он с радостью отдаёт всё, что у него есть, а за одно и зарекается что-либо ломать вообще :)

voronaam ★★
()
Ответ на: комментарий от voronaam

Совершенно не согласен на счёт == поменять на !=.

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

fdn
()
Ответ на: комментарий от fdn

>Нужно делать ещё 100-200 случайных проверок в самой программе, тогда их будет трудно отловить и нет гарантии что программа сломана до конца. Если всё грамотно сделать то дебагером это всё отлавливать вы з....сь.

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

true
()
Ответ на: комментарий от true

> Чем больше в программе таких костылей, тем она медленнее и нестабильнее работает. Кстати, какой смысл в защите от модификации - жалко что ли, если кто-то что-то поменяет?

Типа что-бы не поменяли jz на jnz ;)

fmjs
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.