Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.25;
Скачать: CL | DM;

Вниз

Шутка   Найти похожие ветки 

 
Rouse_ ©   (2009-08-20 23:52) [0]

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

В чем смысл шутки - мне интересно посмотреть подходы к решению данной задачи различными категориями программистов.


 
antonn ©   (2009-08-20 23:54) [1]

целостность файла? прочитать в стрим, прогнать crc :)


 
Rouse_ ©   (2009-08-20 23:56) [2]


> прочитать в стрим, прогнать crc :)

Прочитать можно невалидный файл, т.е. при открытии файла может быть подстановка неверного пути с непатченным файлом.


 
Суслик_   (2009-08-20 23:57) [3]

слушай, не парь мозг )
ты еще скажи, что ты умеешь это делать гарантировано.


 
Rouse_ ©   (2009-08-21 00:04) [4]


> Суслик_   (20.08.09 23:57) [3]
>
> слушай, не парь мозг )
> ты еще скажи, что ты умеешь это делать гарантировано.

Умею, загрузчик и ядро то у нас одинаковые, принцип я тебе вроде как обьяснял (или Женьке - не помню). Мне просто не нравится мой подход и я хочу посредством этой ветки сделать некий аналог мозгового штурма :)


 
Anatoly Podgoretsky ©   (2009-08-21 00:09) [5]

> Rouse_  (20.08.2009 23:52:00)  [0]

Контрольную сумму? Без доверенного центра, гарантировано, невозможно.


 
Суслик_   (2009-08-21 00:10) [6]


> Rouse_ ©   (21.08.09 00:04) [4]


ну я тебе тут не помошник - я mov с add путаю.
не мое это.

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

пусть ломают.

ну это, если совсем припрет )))


 
Суслик_   (2009-08-21 00:10) [7]


> Anatoly Podgoretsky ©   (21.08.09 00:09) [5]
>
> > Rouse_  (20.08.2009 23:52:00)  [0]
>
> Контрольную сумму? Без доверенного центра, гарантировано,
>  невозможно.


вот и я про то же (хоть и путаю mov с add"ом).

)))


 
Kostafey ©   (2009-08-21 00:52) [8]

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


Гарантированно апреоре невозможно.
Что вероятность была ровно 1.
Можно лишь довольно близко приближающееся к 1
значение.

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

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

Да, задачка :)))


 
Kostafey ©   (2009-08-21 00:58) [9]

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

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

Неужели задача стоит разработки собственных средств?


 
Кто б сомневался ©   (2009-08-21 01:01) [10]

Если вам нужно только решение (ведь задача шуточная), без практики то, без проблем. сделать это можно гарантированно на 100%.
Просто побайтово сравнить с оригиналом.


 
Суслик_   (2009-08-21 01:01) [11]


> Kostafey ©   (21.08.09 00:58) [9]
> Неужели задача стоит разработки собственных средств?


Ты не представляешь насколько тут все серьезно )

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


 
Германн ©   (2009-08-21 01:04) [12]


> Rouse_ ©   (20.08.09 23:52)
>
> Небольшая шуточная задача.
> Необходимо написать приложение, которое

С помощью внешнего железа можно?
:)


 
Kostafey ©   (2009-08-21 01:11) [13]

> Если вам нужно только решение (ведь задача шуточная), без
> практики то, без проблем. сделать это можно гарантированно
> на 100%.
> Просто побайтово сравнить с оригиналом.


Нет, ибо оригинал как правило расположен удаленно,
а существует ненулевая (хотя, возможно, весьма маляая)
вероятность ошибки передачи по сети.


> [11] Суслик_   (21.08.09 01:01)

Прошу прощения прощения за глупый вопрос.
Что такое обфускация?


 
Кто б сомневался ©   (2009-08-21 01:14) [14]


> Нет, ибо оригинал как правило расположен удаленно,
> а существует ненулевая (хотя, возможно, весьма маляая)
> вероятность ошибки передачи по сети.


В чем проблема, пакуйте в архив rar или 7z, с длинным паролем и делов то..


 
Кто б сомневался ©   (2009-08-21 01:15) [15]


> Нет, ибо оригинал как правило расположен удаленно,
> а существует ненулевая (хотя, возможно, весьма маляая)
> вероятность ошибки передачи по сети.


Кстати, это другая задача уже. На ваш вопрос дан ответ.


 
Суслик_   (2009-08-21 01:16) [16]


> Kostafey ©   (21.08.09 01:11) [13]
>
> > [11] Суслик_   (21.08.09 01:01)
>
> Прошу прощения прощения за глупый вопрос.
> Что такое обфускация?


Послать на гугл иногда считается обидным, но я все же рискну ))
Например так http://www.google.ru/#hl=ru&source=hp&q=%D0%BE%D0%B1%D1%84%D1%83%D1%81%D0%BA%D0%B0%D1%86%D0%B8%D1%8F+wiki&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=f&fp=7c4a300accd1d130

Обычно в вики (либо нашей, либо ихней) есть классные стати.

В данном случае имеется в виду, что есть тулзы, которые потят готовый бинарник до неузнаваемости. Причем это продвинутые тулзы. Это я к тому, что подход серьезный уже. Поэтому Розыч, видимо, ждет чего-то реально неординарного )


 
Kostafey ©   (2009-08-21 01:19) [17]

> Кстати, это другая задача уже. На ваш вопрос дан ответ.


Почему другая? Если локально существует оригинал приложения -
задача теряет смысл. Она имеет значение только если он расположен
удаленно.


 
Kostafey ©   (2009-08-21 01:25) [18]


> [16] Суслик_   (21.08.09 01:16)

> Послать на гугл иногда считается обидным, но я все же рискну
> ))

Не, после часу ночи уже не только не обидно, но и полезно :)))


> есть тулзы, которые потят готовый бинарник до неузнаваемости

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

Или вы, это, ну, мало ли, в ГРУ работаете?

P.S. ежели нельзя - не отвечайте.


 
Германн ©   (2009-08-21 02:01) [19]


> Поэтому Розыч, видимо, ждет чего-то реально неординарного
> )

Ага. Подначка, имхо. :)
И попытался прикрыться словом "шутка".  
Хм. А на исходниках он вроде такой вопрос не задал. И на sql.ru тоже. Или я не заметил? :)


 
antonn ©   (2009-08-21 02:04) [20]

там тайминги на ответы больше :)


 
Германн ©   (2009-08-21 02:25) [21]


> antonn ©   (21.08.09 02:04) [20]
>
> там тайминги на ответы больше :)
>

Это ты мне?
Мне, который живёт(виртуально) в другом часовом поясе. И, посему, слишком часто (наверно чрезмерно часто) задает вопросы, когда все уже спят.
Мне эти тайминги - пофигу. (Да и Розычу, думаю тоже :).
А подначка - она и есть подначка. :)


 
AlexDan ©   (2009-08-21 03:28) [22]

> Rouse_ ©   (20.08.09 23:52)  
мне почему-то вспомнился Станислав Лэм "солярис", там главный герой так проверял свою психику,
> посредством рассчета контрольной суммы.
).


 
TUser ©   (2009-08-21 10:19) [23]

Слово "гарантированно" подразумевает описание условий, для которых требуется гарантия. Скажем, при прямом попадании метеорита - вряд ли можно говорить о гарантии. Есть и более приземленный вариант - вирус испортил первую команду в исполняемом файле. Программа запустилась. И не проверилась.

:)


 
Rouse_ ©   (2009-08-21 10:35) [24]

Ну скажем с гарантированно я наверное вчера погорячился, ибо на каждый гарантированный метод есть гарантированный антиметод :) А от ветки я конечно не жду чего-то неординарного, но надеюсь что я мог что-то пропустить и ктонибудь толкнет интересную мысль.
А так конечно можно и пофлеймить :)


 
Суслик_   (2009-08-21 10:40) [25]

>>А так конечно можно и пофлеймить :)

Пасиб, начальник! ))

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


 
Rouse_ ©   (2009-08-21 10:43) [26]


> Блин, я не пойму, нафига тебе это - пусть правят как хотят

Тут уже чисто спортивный интерес, потому что задачка ни разу не тривиальная :)


 
TUser ©   (2009-08-21 10:51) [27]


> А так конечно можно и пофлеймить :)

Ну тогда пиши "нелокальный архив". От архивирования (aspack etc) по задумке отличается тем, что есть каждый байт разархивированного текста зависит не от одного местечка в архиве, а от многих. И наоборот. Скажем, программа Prog: array of byte; кодируется в "архив" Hidden: array of integer; через систему решаемых линейных уравнений типа Hidden[i] := sum (j:=0..length (Prog)-1;Prog[j]*C[i,j]), где С - матрица. Фокус в том, что при порче даже небольшой части скрытого текста мы получаем совершенно неработоспособную программу.

Примечания:
1. За скорость не пинать. За размер тоже. Если скрывать только небольшую секретную часть алгоритма, то это даже не очень важно.
2. В лицензионное соглашение вписать пункт об ответственности пользователя за любые последствия случайных или преднамеренных изменений бинарника.

:)


 
oxffff ©   (2009-08-21 11:33) [28]

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


 
Rouse_ ©   (2009-08-21 11:35) [29]


> TUser ©   (21.08.09 10:51) [27]

Идея интересная - но такое уже было :) Обходится зацикливанием на OEP и дампированием образа на диск в случае полной распаковки, либо (в случае посекцонной распаковки) дампированием каждого участка и ручной сборки распакованного образа :)


 
Rouse_ ©   (2009-08-21 11:40) [30]


> oxffff ©   (21.08.09 11:33) [28]

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


 
oxffff ©   (2009-08-21 11:55) [31]


> Rouse_ ©   (21.08.09 11:40) [30]


Проследить единственно правильный возможно. Однако я в задумался над еще одним способом. Например пусть есть код А, который вызывает код Б.

Соответственно если есть цепочка вызовов А->B->-C->D возможно каскадно обернуть D описанным в [28] cпособом.
Например если есть вызов А->E->D.
Но код D в этом случае дублируется поскльку зависит от пути А-E-D, а не А-B-C-D.

Поскольку программа это в общем дерево. То следует программировать так чтобы оно было как можно глубже.  Я в этом направлении думаю.
Можно отследить все пути, но это очень очень сложно в таком случае. IMHO.
Идея пока зрееет.


 
oxffff ©   (2009-08-21 11:58) [32]


> oxffff ©   (21.08.09 11:55) [31]


Как бысть в зывами if case. Cоответственно нужно отслеживать достижимость пути в коде. Вообщем для [31] нужна поддержка со стороны компилятора.


 
Rouse_ ©   (2009-08-21 12:02) [33]

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


 
GEN++ ©   (2009-08-21 12:24) [34]


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

На 100% не реально, поскольку:
1 - не гарантирована работоспособность самой программы проверки.
2 - не гарантирова сохранение самого результата подсчета CRC
Вообще подобный способ используют в микроконтроллерах при старте
по включению питания. Иногда это помогает.


 
Медвежонок Пятачок ©   (2009-08-21 12:38) [35]

вот еще одна подпорочная методика

подписываем программу своим приватным ключем и получаем детачед ЭЦП вместе с со своим сертификатом.
при старте проверяем екзешник и значение эцп.

чтобы злоумышленник не имел возможности подписать программу своим ключом, после проверки валидности сравниваем атрибуты сертификата с данными в программе.
код проверки и сами данные шифруем например на отпечатке своего сертификата.

пс: обойти и это конечно можно


 
Rouse_ ©   (2009-08-21 12:41) [36]


> Медвежонок Пятачок ©   (21.08.09 12:38) [35]

В корень смотришь, как раз сейчас вожусь с сертификатами :)


 
Пит   (2009-08-21 13:19) [37]

Ха, ну Саша, ну гад )))

Шуточная блин задачка. Совсем недавно ставил за это литр коньяку хорошего )))


 
Anatoly Podgoretsky ©   (2009-08-21 13:22) [38]

> Rouse_  (21.08.2009 12:41:36)  [36]

А говорил про CRC


 
Rouse_ ©   (2009-08-21 13:40) [39]


> Совсем недавно ставил за это литр коньяку хорошего )))

Ну на коньяк никто не повелся, а задачу хочется же решить :)))


 
pasha_golub ©   (2009-08-21 13:48) [40]

Я тоже хочу таких грибоф. И тогда я гарантировано смогу сказать фсьо! :)


 
Дуб ©   (2009-08-21 13:52) [41]

> Ну на коньяк никто не повелся, а задачу хочется же решить
> :)))

А есть ли решение? Если сформулировать абстрактно? А то как и в шифроваии все сведется только к сложности. Формулировку бы.


 
Германн ©   (2009-08-22 02:00) [42]


> Rouse_ ©   (21.08.09 10:35) [24]
>
> А от ветки я конечно не жду чего-то неординарного,
>  но надеюсь что я мог что-то пропустить и ктонибудь толкнет
> интересную мысль.
> А так конечно можно и пофлеймить :)
>

Ну не только "так конечно" флеймим.
Но и помним твои обещания по поводу "электронной версии". Так где она?:)


 
blackman ©   (2009-08-22 10:34) [43]

Полную гарантию дает только страховой полис.


 
Кто б сомневался ©   (2009-08-22 13:28) [44]

Написали же что полная гарантия возможна если сравнивать с оригиналом.
Как вы это будете делать, это уже другой вопрос, и другая задача.
Если у вас задача, в которой коллизии CRC недопустимы вообще, то это тот самый вариант.



Страницы: 1 2 вся ветка

Текущий архив: 2009.10.25;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.023 c
4-1219924369
=BuckLr=
2008-08-28 15:52
2009.10.25
Обновление ресурса версии


2-1250066321
kostyl_kostyl
2009-08-12 12:38
2009.10.25
TspClient и TspServever


4-1219732438
KygECHuK
2008-08-26 10:33
2009.10.25
Выгрузка WinApi перехватчика


15-1250873376
TUser
2009-08-21 20:49
2009.10.25
Прогноз цен


15-1251061714
syte_ser78
2009-08-24 01:08
2009.10.25
что является шлюзом?