Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.049 c
2-1251370302
Ak47
2009-08-27 14:51
2009.10.25
Оптимищация


1-1221818257
Jolik
2008-09-19 13:57
2009.10.25
Как передать форму по сети :)


1-1222031699
Д С
2008-09-22 01:14
2009.10.25
Событие показа формы.


2-1251196735
D1987
2009-08-25 14:38
2009.10.25
TListView


2-1251440566
kiki
2009-08-28 10:22
2009.10.25
Как сделать рандом значения от -20 до +20?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский