Есть проблема следующего характера. Написал программу на VC++ делающую некоторый набор вычислений. Консольное приложение, на входе текстовый файл с данными, на выходе текстовый файл с результатами. Самое ценное в программе — это алгоритм(относительно простой, не космос), который я очень хотел бы сохранить в тайне (надеюсь до паяльника дело не дойдет). Программа не слишком сложная, откомпилирована в VS 2005. Насколько человек, имеющий .exe файл сможет добраться до алгоритма расчета, декомпилировав экзешник с помощью различных программ?
Здравствуйте, Аноним, Вы писали:
А> Насколько человек, имеющий .exe файл сможет добраться до алгоритма расчета, декомпилировав экзешник с помощью различных программ?
Насколько захочет.
А> Есть проблема следующего характера. Написал программу на VC++ делающую некоторый набор вычислений. Консольное приложение, на входе текстовый файл с данными, на выходе текстовый файл с результатами. Самое ценное в программе — это алгоритм(относительно простой, не космос), который я очень хотел бы сохранить в тайне (надеюсь до паяльника дело не дойдет). Программа не слишком сложная, откомпилирована в VS 2005. Насколько человек, имеющий .exe файл сможет добраться до алгоритма расчета, декомпилировав экзешник с помощью различных программ?
Зависит от человека.
Чтобы локализовать место — от 30 минут проффесионалу типа Криса К., до нескольких дней неопытного, но упорного человека.
Здравствуйте, <Аноним>, Вы писали:
А> Насколько человек, имеющий .exe файл сможет добраться до алгоритма расчета, декомпилировав экзешник с помощью различных программ?
C IDA и HexRays и опытом сего дела — сравнительно быстро.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, <Аноним>, Вы писали:
А>Самое ценное в программе — это алгоритм(относительно простой, не космос)
Есть один нюанс — знания реверсера в предметной области исследуемого софта. Если они 0, то, вполне вероятно, в алгоритм попадёт ошибка, которую можно будет долго потом искать. Если же наоборот, то может даже не понадобиться дизассемблер. Стоит активнее использовать ключ /GL, (нестандартные) классы и виртуальные функции, или (лучше) обфускаторы\виртуализаторы кода.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Аноним, Вы писали:
А> Есть проблема следующего характера.
Это скорей всего выдуманная проблема.
Не трать слишком много сил на защиту.
Смысла нету. Смысл есть работать над алгоритмом
и продуктом, в котором используется алгоритм.
Ну еще можно активно искать тех, кто за алгоритм даст кучу денег
или предложит хорошую работу.
Здравствуйте, Аноним, Вы писали про секретный алгоритм
Как тут уже правильно сказали, лучше "активно искать тех, кто за алгоритм даст кучу денег
или предложит хорошую работу." Разу уж алгоритм стоящий, то заинтересованные компании могут оплатить его развитие, новые ваши идеи ну и т.п.
С технической точки зрения есть вариант спрятать алгоритм во внешних ключах, смарт картах — устройствах со своим процессором, которое подключится через USB, например, и на поток входных данных отвечает другим, обработанным мегаалгоритмом. Но 1. это медленно, 2. это не спасет он кулибиных с ответкой (что бы расковырять корпус) и осциллографом.
Даже реализовав алгоритм на кристалле, в тайне его сохранить не удасться. Насколько я знаю, "наши" спокойно реверсили западные МС методом разрезанием на слои и буквально воспроизводя рисунок, в результате получались 133, 155 серии, которые полностью совпадали по параметрам и глюкам с аналогами. Размеры конечно были не те, что сейчас, но и технологии тоже
А еще проще — социльными методами добыть этот алгоритм В случае заинтересованности вашей программой и нау-хау, за день-другой кто-нить вскроет алгоритм и он будет уже по всем форумам лежать
Единственное ваше преимущество перед конкурентами: пока только вы не разбазарили новое эффективное решение, можно быстрено стартануть отличным проектом.
Здравствуйте, oziro, Вы писали:
O>Здравствуйте, Аноним, Вы писали про секретный алгоритм
O>С технической точки зрения есть вариант спрятать алгоритм во внешних ключах, смарт картах — устройствах со своим процессором, которое подключится через USB, например, и на поток входных данных отвечает другим, обработанным мегаалгоритмом. Но 1. это медленно, 2. это не спасет он кулибиных с ответкой (что бы расковырять корпус) и осциллографом. O>Даже реализовав алгоритм на кристалле, в тайне его сохранить не удасться. Насколько я знаю, "наши" спокойно реверсили западные МС методом разрезанием на слои и буквально воспроизводя рисунок, в результате получались 133, 155 серии, которые полностью совпадали по параметрам и глюкам с аналогами. Размеры конечно были не те, что сейчас, но и технологии тоже
senselock.ru например продают защищенные от таких вещей донглы.
можно алгоритм загнать в их донгл (если алгоритм не критичен по скорости и для реализации хватит урезанной стандартной библиотеки C)
p.s.в любом случае послойная шлифовка микросхем это немного другой(в смысле цены в первую очередь) уровень взлома чем IDA+HexRays. А тем более если микросхема специально сделана чтобы таким вещам противостоять.
p.p.s.А алгоритм точно нельзя вскрыть просто построив таблицу соответствия всех возможных входных значений, выходным?
_>p.p.s.А алгоритм точно нельзя вскрыть просто построив таблицу соответствия всех возможных входных значений, выходным?
Хе-хе
Представь себе алгоритм, который на вход принимает два 32-битных числа и даёт на выходе одно 32-битное. Слабо проанализировать такую таблицу? Ладно, чёрт с ним проанализировать — попробуй прикинуть сколько времени (и памяти) займёт её построение?
Здравствуйте, Left2, Вы писали:
_>>p.p.s.А алгоритм точно нельзя вскрыть просто построив таблицу соответствия всех возможных входных значений, выходным? L>Хе-хе L>Представь себе алгоритм, который на вход принимает два 32-битных числа и даёт на выходе одно 32-битное. Слабо проанализировать такую таблицу? Ладно, чёрт с ним проанализировать — попробуй прикинуть сколько времени (и памяти) займёт её построение?
А мне надо ее _всю_ анализировать? -
Зависит от того что делает алгоритм. Нам обязательно нужна 100% копия? Возможно для 'хакера' допустимо апроксимировать функцию f(x,y) (возможно применив всякие изощренные методы апроксимации вроде использования генетических алгоритмов, если обычные не подходят/о виде f(x,y) совсем ничего не известно)
L>>Представь себе алгоритм, который на вход принимает два 32-битных числа и даёт на выходе одно 32-битное. Слабо проанализировать такую таблицу? Ладно, чёрт с ним проанализировать — попробуй прикинуть сколько времени (и памяти) займёт её построение? _>А мне надо ее _всю_ анализировать? -
В общем случае — надо всю.
_>Зависит от того что делает алгоритм. Нам обязательно нужна 100% копия? Возможно для 'хакера' допустимо апроксимировать функцию f(x,y) (возможно применив всякие изощренные методы апроксимации вроде использования генетических алгоритмов, если обычные не подходят/о виде f(x,y) совсем ничего не известно)
Я всё к тому что для более-менее сложных алгоритмов реверс инжениринг по входным данным невозможен. То есть, не проблема получить что-то очень похожее на исходный алгоритм (грубо говоря — это представление многомерной функции в виде суммы ряда), но только на определённом куске входных данных, и чем шире этот кусок — тем более затратным становится реверс инжениринг, причём затраты растут экспоненциально. К примеру, представь себе реверс инжениринг задачи распознавания текста из битмапа. Ну а в самом общем случае, насколько я понимаю, задача сводится к решению задачи останова машины тьюринга и принципиально неразрешима.
Здравствуйте, Left2, Вы писали:
L>Я всё к тому что для более-менее сложных алгоритмов реверс инжениринг по входным данным невозможен. То есть, не проблема получить что-то очень похожее на исходный алгоритм (грубо говоря — это представление многомерной функции в виде суммы ряда), но только на определённом куске входных данных, и чем шире этот кусок — тем более затратным становится реверс инжениринг, причём затраты растут экспоненциально. К примеру, представь себе реверс инжениринг задачи распознавания текста из битмапа.
Методы решения тоже меняются. Если затраты на взлом 'построением таблицы'(например) превысят цену IDA+HexRays(или даже просто IDA)+стоимость работы хакера то будут использоватся они.Если код хорошо защищен аппаратно (senselock'овские донглы например) то варианты взлома тоже есть (социальный инжинеринг во всех его видах). Вопрос сводится к тому сколько стоит исходный алгоритм и сколько стоит его сломать?
L>Ну а в самом общем случае, насколько я понимаю, задача сводится к решению задачи останова машины тьюринга и принципиально неразрешима.
А никто (реально) не будет ее решать в самом общем случаe.
Здравствуйте, dmitriy_k, Вы писали:
_>Если код хорошо защищен аппаратно (senselock'овские донглы например) то варианты взлома тоже есть (социальный инжинеринг во всех его видах). Вопрос сводится к тому сколько стоит исходный алгоритм и сколько стоит его сломать?
Спасибо за инфу про senselock.
Подумал тут: а покупка Аноним'a 885 вместе с его алгоритмом — будет являться социальным инжинирингом? (Товарищ, без обид )
Re: Декомпиляция VC++ исходника
От:
Аноним
Дата:
21.12.07 01:48
Оценка:
Здравствуйте, Аноним, Вы писали:
А>...Самое ценное в программе — это алгоритм(относительно простой, не космос), который я очень хотел бы сохранить в тайне...
Нет тебе прощения. Злобный вирусо-писатель! Хочеш ядро вируса схавать! Или бабло приворовывать?
А вообще сделай интерпритатор который будет выполнять твой алгоритм, и тогда даже с ida-ой забодаются разбираться что он делает, т.к. придётся сначала понять как уcтроен интерпритатор А если один интерпритатор будет выполнять другой интерпретатор то ваще писец, ноги сломать можно будет. Причем каждый интерпретатор может данные хранить в избыточном и шифрованном виде, что веселее было. В идеале интерпритатор должен иметь степени свободы чтобы можно было варьировать исполняемый код от версии к версии. Чтоб никакая зараза не смогла выявить сигнатуру кода. И будет у тебя страшный вирус который даже в лаборатории касперского поставит всех раком
ps: помимо интерпретаторов понадобятся еще и компиляторы к ним, короче возни много, зато потом хрен кто поймет что присходит
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>...Самое ценное в программе — это алгоритм(относительно простой, не космос), который я очень хотел бы сохранить в тайне...
А>Нет тебе прощения. Злобный вирусо-писатель! Хочеш ядро вируса схавать! Или бабло приворовывать? А>А вообще сделай интерпритатор который будет выполнять твой алгоритм, и тогда даже с ida-ой забодаются разбираться что он делает, т.к. придётся сначала понять как уcтроен интерпритатор А если один интерпритатор будет выполнять другой интерпретатор то ваще писец, ноги сломать можно будет. Причем каждый интерпретатор может данные хранить в избыточном и шифрованном виде, что веселее было. В идеале интерпритатор должен иметь степени свободы чтобы можно было варьировать исполняемый код от версии к версии. Чтоб никакая зараза не смогла выявить сигнатуру кода. И будет у тебя страшный вирус который даже в лаборатории касперского поставит всех раком
Есть некоторые данные что похожим образом (создание VM) работают некоторые протекторы(вроде EXECryptor'а)
Но ломается. Доказательством чему являются взломанные демы само EXECryptor'а
Мутация-тоже давно придумана(те же полиморфные вирусы,или например тот факт что у VMProtect'а по заявлением автора VM генериться индивидуально).
Вложенные друг в друга интерпретаторы=огромная потеря быстродействия
А>ps: помимо интерпретаторов понадобятся еще и компиляторы к ним, короче возни много, зато потом хрен кто поймет что присходит
Есть еще такой фокус-если по каким то причинам надо предоставить компилябильные исходники программы а это делать очень не хочется на помощь придет Comeau C++ либо LLVM с -march="C".На выходе компилятора будет исходник на C в котором не очень просто разобраться. Конечно защита не идеальная. Но если нужно "открывать" исходники то неплохая.
Здравствуйте, oziro, Вы писали:
O>Здравствуйте, dmitriy_k, Вы писали:
_>>Если код хорошо защищен аппаратно (senselock'овские донглы например) то варианты взлома тоже есть (социальный инжинеринг во всех его видах). Вопрос сводится к тому сколько стоит исходный алгоритм и сколько стоит его сломать? O>Спасибо за инфу про senselock.
Фича senselock в том что они не запрос-ответ дают как другие ключи а могут исполнять код на ключе(пусть и не особо быстро),причем этот код оттуда не так просто достать. O>Подумал тут: а покупка Аноним'a 885 вместе с его алгоритмом — будет являться социальным инжинирингом? (Товарищ, без обид )
Естественно. Это один из вариантов. Только мне кажется что автор бы и сам не против продать алгоритм если ему предложат устраивающую его цену.
Здравствуйте, dmitriy_k, Вы писали:
_>Есть некоторые данные что похожим образом (создание VM) работают некоторые протекторы(вроде EXECryptor'а) _>Но ломается.
Сломать то можно вообще не понимая как это работает. А восстановить исходный алгоритм — не уверен.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Аноним, Вы писали:
А> Есть проблема следующего характера. Написал программу на VC++ делающую некоторый набор вычислений. Консольное приложение, на входе текстовый файл с данными, на выходе текстовый файл с результатами. Самое ценное в программе — это алгоритм(относительно простой, не космос), который я очень хотел бы сохранить в тайне (надеюсь до паяльника дело не дойдет). Программа не слишком сложная, откомпилирована в VS 2005. Насколько человек, имеющий .exe файл сможет добраться до алгоритма расчета, декомпилировав экзешник с помощью различных программ?
Представь, что было бы, если все, кто придумывал бы алгоритмы, хранили бы их в тайне, начиная с Евклида и Эратосфена, а Пифагор запатентовал бы теорему имени себя.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Представь, что было бы, если все, кто придумывал бы алгоритмы, хранили бы их в тайне, начиная с Евклида и Эратосфена, а Пифагор запатентовал бы теорему имени себя.
Новость на LOR:
Дело SCO Group vs Пифагора: новый виток
SCO предоставила новые доказательства использования своего кода в теореме Пифагора. Однако суд отказался рассматривать дело за давностью преступления. Но SCO не собирается отступать, подготавливая материалы для тяжбы с Евклидом и Эратосфеном.