Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
ВнизСели тут со знакомым и за два дня ... Найти похожие ветки
← →
Rouse_ © (2015-10-23 20:47) [0]...сделали мутатор на NOR базисе с примитивной обфускацией.
И самое интересное, что так, как мы его сделали, похоже будет просто объяснить остальным.
К примеру, возьмем обычное сложение а = 10 + 20.
При обфускации это выльется вот в такой код: http://rouse.drkb.ru/tmp/vm_add_10_20.zip
Это результат декомпиляци в IDA Pro c использование Hex-Rase. В асм коде это около 83 тысяч инструкций :)
А изначальный исходный код состоял всего из 70-80 строчек.
Заинтересовались?
Ну тогда, кому интересно - ставьте плюс.
Статья будет долгой и тяжелой :)
← →
Palladin © (2015-10-23 20:59) [1]дело было вечером, дело было в пятницу
+
← →
Sha © (2015-10-23 21:56) [2]+ конечно, интересно
← →
Rouse_ © (2015-10-23 23:39) [3]Постараюсь к новому году завершить.
Самое смешное в том что я тестировал VMProtect и решил реализовать аналог, чтоб проще хэндлеры было разбирать, а тут вон оно в что вылезло :)
← →
Германн © (2015-10-24 00:55) [4]
> Rouse_ © (23.10.15 20:47)
> Заинтересовались?
+
← →
Rouse_ © (2015-10-24 11:12) [5]Палладин мне тут в аське намекнул, мол откуда 70-80 строчек, если делаем сложение :)
Так то оно да, но сложение делаем как:
A = vmAdd(10, 20)
А 80 строчек, это реализация этого самого vmAdd :)
← →
ksergey © (2015-10-24 17:14) [6]Rouse_ © (24.10.15 11:12) [5]
> А 80 строчек, это реализация этого самого vmAdd :)
Я извиняюсь, а обсускация в таком случае точно требуется? типа без неё всё слишком понятно?
← →
Rouse_ © (2015-10-24 19:15) [7]А vcl понятен?
А это тоже обфускация :)
← →
Германн © (2015-10-25 01:53) [8]
> Rouse_ © (24.10.15 19:15) [7]
>
> А vcl понятен?
> А это тоже обфускация :)
>
Ну скорее не сама VCL, а Дельфи/Паскаль. Как и все языки высокого уровня.
Последний раз когда я видел декомпиллер способный восстановить исходник из исполняемого файла был в замшелых 60-х. И то это был исполняемый файл от ТП3.
← →
Омлет © (2015-10-25 11:34) [9]+
← →
brother © (2015-11-02 11:15) [10]+ но я не понял
> К примеру, возьмем обычное сложение а = 10 + 20.
> При обфускации это выльется вот в такой код: http://rouse.drkb.ru/tmp/vm_
> add_10_20.zip
это одно и тоже? тогда приче тут
> А изначальный исходный код состоял всего из 70-80 строчек.
?
← →
brother © (2015-11-02 11:16) [11]и еще, а зачем так над процом издеваться? потеря производительности то зачем, вроде всегда оптимальный код хотели...
← →
Rouse_ © (2015-11-02 12:23) [12]
> brother © (02.11.15 11:16) [11]
> и еще, а зачем так над процом издеваться?
Сие называется обфускация алгоритма. Дабы никто не влез и ничего не поменял там где не надо.
← →
brother © (2015-11-02 12:49) [13]> Сие называется обфускация алгоритма.
спс кэп)
> Дабы никто не влез и ничего не поменял там где не надо.
это понятно кэп...
← →
Rouse_ © (2015-11-02 12:53) [14]Тогда я не понял что ты не понял :)
← →
brother © (2015-11-02 13:11) [15]начнем с [10] :)
← →
Rouse_ © (2015-11-02 15:29) [16]Ответ был дан еще в [5] :)
← →
DayGaykin © (2015-11-02 15:59) [17]
> A = vmAdd(10, 20)
> А 80 строчек, это реализация этого самого vmAdd :)
А если я сделаю:
A = vmAdd(10, 20)
B = vmAdd(A, 30)
То итоговый код этих команд будет идти по порядку сначала первой команды, а потом второй или смешается между собой?
← →
Rouse_ © (2015-11-02 16:06) [18]Можно сделать и смешивание, но это уж за гранью получится. Всеж таки это обычная обфукация, причем выполняемая на уровне компилятора без последующей доработки напильником, а не полноценная ВМ.
← →
brother © (2015-11-02 16:50) [19]а чет пропустил... все понятно...
← →
Rouse_ © (2015-11-02 17:53) [20]
> DayGaykin © (02.11.15 15:59) [17]
В сишной реализации мы сейчас поэксперементировали и такое возможно (основной фреймворк мы на С++ пишем) а на дельфи наверное врятли, но я попробую поэксперементировать, мне тут подсказали пару идеек, как заставить компилятор работать так как мне удобно, поэтому ближе к статье отвечу.
← →
DayGaykin © (2015-11-03 15:41) [21]Мне интересна такая техника, когда код сжимается, оптимизируется и смешивается. Смешивается так, что вообще ничего не разобрать: стираются границы функций, точка выполнения прыгает туда-сюда, значения в регистре и стеке тоже непонятные. Еще и кодогенерацию добавить, когда код переписывается на ходу несколько раз по мере выполнения.
Там чтобы исходник нельзя было восстановить даже теоретически. Мне интересно возможно ли такое.
У меня работа с этим не пересекается (и даже не предвидится), поэтому это лишь фантазии.
← →
Rouse_ © (2015-11-03 19:06) [22]
> DayGaykin © (03.11.15 15:41) [21]
> Мне интересна такая техника, когда код сжимается, оптимизируется
> и смешивается
Это не ко мне, у меня наоборот раздувание и деоптимизация.
Смешивается так, что вообще ничего не разобрать
Вот это уже ближе.
> Там чтобы исходник нельзя было восстановить даже теоретически.
> Мне интересно возможно ли такое.
Да, такое возможно, но смысл?
Задача обфускации заключается в затруднении восстановления алгоритма, а не исходника.
А вот запретить восстановить алгоритм - это не возможно.
Вот тебе к примеру моя старая статья: http://habrahabr.ru/post/218887/
- Исходный код восстановлен?
- Да
- Алгоритм из него изначально понятен?
- Нет
- Задача решена?
- Да
← →
DayGaykin © (2015-11-03 19:31) [23]Интересная статья - читал.
Могу поспорить, что смогу написать keygenme, для которого не получится сделать keygen за разумное количество времени (неделю например).
← →
Kerk © (2015-11-03 19:40) [24]Я уже написал keygenme, для которого вообще невозможно сделать keygen :)
← →
DVM © (2015-11-03 21:51) [25]
> Rouse_ © (03.11.15 19:06) [22]
> А вот запретить восстановить алгоритм - это не возможно.
А если часть алгоритма или отдельные его примитивы реализованы аппаратно на USB ключе и алгоритм оттудова неизвлекаем?
← →
Rouse_ © (2015-11-03 22:00) [26]
> DVM © (03.11.15 21:51) [25]
> А если часть алгоритма или отдельные его примитивы реализованы
> аппаратно на USB ключе и алгоритм оттудова неизвлекаем?
Атака на черный ящик, частотная и по графам (долго, муторно, но решаемо).
Хасп и первый Стелс так и ломали.
> Kerk © (03.11.15 19:40) [24]
> Я уже написал keygenme, для которого вообще невозможно сделать
> keygen :)
Я тоже, меня Зотыч научил :)
← →
Kerk © (2015-11-03 22:04) [27]
> Rouse_ © (03.11.15 22:00) [26]
>
> > Kerk © (03.11.15 19:40) [24]
> > Я уже написал keygenme, для которого вообще невозможно сделать
> > keygen :)
>
> Я тоже, меня Зотыч научил :)
Вряд ли Зотыч изобрел RSA и прочие асимметричные алгоритмы :)
Все это запутывание алгоритма, то есть "security through obscurity" - это забавно как головоломка, типа кроссворд. Но на практике написать генератор ключей, для которого невозможно сделать сторонний keygen, слишком просто, чтобы пренебречь такой возможностью.
← →
Rouse_ © (2015-11-03 22:05) [28]
> DayGaykin © (03.11.15 19:31) [23]
> Интересная статья - читал.
>
> Могу поспорить, что смогу написать keygenme, для которого
> не получится сделать keygen за разумное количество времени
> (неделю например).
Даж не сомневаюсь, это делается на любой комбинаторике, к примеру возьмем N-мерный куб, проведите шарик по лабиринту в данных измерениях, где ключ является неким маршрутом (даж обфускации не надо, устанешь решать, если не понимаешь алгоритма).
Я тебе для теста в статье выкачу два кейгенми, один на основе кода идущего к статье, и второй на базе нашего фреймворка, решишь за 3 месяца - с меня коньяк :)
← →
Rouse_ © (2015-11-03 22:06) [29]
> Kerk © (03.11.15 22:04) [27]
> Вряд ли Зотыч изобрел RSA и прочие асимметричные алгоритмы :)
Ромч ты даже не представляешь насколько легко взламывается защита, основанная на RSA :)
← →
Kerk © (2015-11-03 22:21) [30]
> Rouse_ © (03.11.15 22:06) [29]
>
>
> > Kerk © (03.11.15 22:04) [27]
> > Вряд ли Зотыч изобрел RSA и прочие асимметричные алгоритмы
> :)
>
> Ромч ты даже не представляешь насколько легко взламывается
> защита, основанная на RSA :)
Давай проведем эксперимент. Я делаю простенький пример с использованием виндового CryptoAPI. Строчек 50 займет максимум. У тебя месяц на написание кейгена. Не кряка, не патча, а именно кейгена. Чтобы генерировал настоящие валидные ключи, которые эта программа примет.
Уверен, человек, который, не имея приватного ключа, сможет генерировать валидные цифровые подписи, станет всемирно заменит. Дерзай :)
← →
Kerk © (2015-11-03 22:23) [31]Я этот пример вместе с исходниками отдам, чтобы проще анализировать алгоритм было :)
← →
Rouse_ © (2015-11-03 22:26) [32]
> Kerk © (03.11.15 22:21) [30]
Ром не старайся, я просто заменю публичный ключ :)
← →
Rouse_ © (2015-11-03 22:29) [33]Поясню, любой софт с RSA полагает что что-то, что он может расшифровать свои пабликом, считается валидным.
Атака на такую схему защиты заключается в изменении публичного ключа, после чего все это RSA идет в лес :)
← →
Kerk © (2015-11-03 22:29) [34]
> Rouse_ © (03.11.15 22:26) [32]
>
> > Kerk © (03.11.15 22:21) [30]
>
> Ром не старайся, я просто заменю публичный ключ :)
Почему-то я так и думал, что ты сведешь все к крякам да патчам. Хотя речь-то шла о том, что кейген написать невозможно.
Хотя речь шла о (дословно): "Но на практике написать генератор ключей, для которого невозможно сделать сторонний keygen, слишком просто, чтобы пренебречь такой возможностью."
← →
Rouse_ © (2015-11-03 22:30) [35]Кстати я тебе это рассказывал когда консультировал тебя по защите твоего софта и ты тогда сказал что цимес понял :)
← →
Rouse_ © (2015-11-03 22:33) [36]
> Kerk © (03.11.15 22:29) [34]
> Хотя речь-то шла о том, что кейген написать невозможно.
Я такого не говорил, я говорил о затруднении понимания алгоритма генерации ключа, а о невозможности, я говорил только в том ключе, что это невозможно запретить :)
← →
Kerk © (2015-11-03 22:37) [37]
> Rouse_ © (03.11.15 22:33) [36]
>
> > Kerk © (03.11.15 22:29) [34]
> > Хотя речь-то шла о том, что кейген написать невозможно.
>
> Я такого не говорил
А я-то говорил.
Ты читай на что отвечаешь :)))
Судя по названию keygenme, по условиям задачи нужно написать именно кейген, а не патчить да крякать.
Что я имею ввиду.
Автор этого keygenme из статьи очень старался, запутывал алгоритм, не одни сутки наверно потратил на отладку. А нафига? В итоге для этой программы кейген написать все равно можно. Именно поэтому его опыты годятся разве что в качестве кроссворда.
Если все его старания заменить на вызов трех API-функций, то на выходе получится 100% защита от кейгенов.
← →
Rouse_ © (2015-11-03 22:45) [38]
> Судя по названию keygenme, по условиям задачи нужно написать
> именно кейген, а не патчить да крякать.
>
> Что я имею ввиду.
А, ты в этом плане.
Тогда да согласен, конечно за приемлимое время на 1024 ключе разложение не сделаешь.
> Автор этого keygenme из статьи очень старался, запутывал
> алгоритм, не одни сутки наверно потратил на отладку. А нафига?
Ну вообще-то там был сам подход, он публиковал пару наработок (до того как умер в аварии) в качестве коммерческого взлома (не кейгенми) и взломано было только две если не ошибаюсь, но там уже бла полноценная VM с автогенерируемыми хэндлерами и метаморф
← →
Rouse_ © (2015-11-03 22:48) [39]Кстати, вдруг кому будет интересно: эмуляция asm инструкции CMP (результат в виде набора флагов)
http://rouse.drkb.ru/tmp/cmp.zip
ЗЫ: это в качестве понимания, что именно сейчас пишется.
← →
Kerk © (2015-11-03 22:54) [40]Просто, по-моему если доступен надежный инструмент в виде CryptoAPI, надо им пользоваться.
100% простая защита от кейгенов у нас есть, а от кряков к сожалению нет. Запутывания пригодятся, например, чтоб спрятать проверку целостности exe. Или логику программы сделать зависимой от значения 3го и 5го байтов публичного ключа. Ну и т.п.
Но кряки относительно безобидны. Изменил пару строк, перекомпилировал программу и кряк скорее всего уже не работает. А вот если кейген появится на просторах сети, то туши свет.
← →
Rouse_ © (2015-11-03 22:59) [41]
> Kerk © (03.11.15 22:54) [40]
Ром ты рассматриваешь это в некой абстракции, а я на практике.
Так вот утвердительно на 99.9% я смогу ответить только в том случае, если у меня спросят - наступит ли завтра утро.
А на практике я еще не встречал ни одной программы защищенной неким серийником, которая держалась бы долго только на проверке оного. Просто поверь моему опыту :)
← →
DVM © (2015-11-03 23:37) [42]
> Rouse_ © (03.11.15 22:29) [33]
> Поясню, любой софт с RSA полагает что что-то, что он может
> расшифровать свои пабликом, считается валидным.
> Атака на такую схему защиты заключается в изменении публичного
> ключа, после чего все это RSA идет в лес :)
Подробнее можно, а то из этого предложения ничего не понятно. Как можно кого то заставить использовать твой публичный ключ вместо настоящего?
← →
DVM © (2015-11-03 23:40) [43]
> Как можно кого то заставить использовать твой публичный
> ключ вместо настоящего?
Предполагается, что есть доступ к исполняемому файлу процесс которого оперирует ключом, что ли?
← →
Rouse_ © (2015-11-03 23:41) [44]
> VM © (03.11.15 23:40) [43]
> Предполагается, что есть доступ к исполняемому файлу процесс
> которого оперирует ключом, что ли?
Конечно
← →
Kerk © (2015-11-04 00:16) [45]
> Rouse_ © (03.11.15 22:59) [41]
Ты на какой своей волне. Я утверждаю только одно - защититься от гейкенов можно очень легко. Можно патчить, крякать - что угодно, но не написать кейген. Чего не скажешь об мсремовском поделии. Которое очень сложное, но с задачей справляется хуже, чем вызов нескольких стандартных функций.
← →
Rouse_ © (2015-11-04 00:40) [46]Удалено модератором
← →
Германн © (2015-11-04 01:18) [47]Вот только вчера в поисках нужной статьи на королевстве наткнулся на цикл статей Дмитрия Логинова 15-16 летней давности.
Вот вроде почти уже сто лет прошло, а аргументы сторонников защиты путем серийников (любых) всё ещё приводятся.
← →
DayGaykin © (2015-11-04 03:17) [48]Меня ещё позабавил кейген для IDEA. Кейген на яве с исходниками - такая ирония:)
Я сам за веб - хорошо, что там эта проблема не стоит.
Писал ещё софт для терминалов - там тоже не стояла.
← →
Игорь Шевченко © (2015-11-04 10:23) [49]А вот Oracle без всяких кейгенов и серийников, и ничего, процветает.
← →
Юрий Зотов © (2015-11-04 17:56) [50]> Kerk © (03.11.15 22:04) [27]
Зотыч, конечно, RSA не изобретал. Но каждый день с ним работает.
:o)
← →
Eraser © (2015-11-04 22:05) [51]да, триал-стоп и кейген - самые неприятные вещи. ну а кряки - что с них взять )
← →
Германн © (2015-11-05 01:42) [52]Удалено модератором
Примечание: Создание пустых сообщений
← →
Вопрошающий2015 © (2015-11-10 23:57) [53]
> Kerk © (03.11.15 22:21) [30]
> Давай проведем эксперимент. Я делаю простенький пример с
> использованием виндового CryptoAPI. Строчек 50 займет максимум.
> У тебя месяц на написание кейгена. Не кряка, не патча,
> а именно кейгена. Чтобы генерировал настоящие валидные ключи,
> которые эта программа примет.
Вот, кстати, всегда было интересно, как это можно реализовать на RSA? Ведь публичный ключ шифрует данные, секретный расшифровывает, а не наоборот. Так каким образом поможет публичный ключ пригодиться внутри программы для проверки? Им же не расшифруешь.
Подозреваю, что есть какая-то хитрость, любопытно какая, хотя бы намеки.
← →
Kerk © (2015-11-11 00:01) [54]
> Ведь публичный ключ шифрует данные, секретный расшифровывает,
> а не наоборот.
Наоборот тоже можно. Так что программа с помощью публичного ключа расшифровывает то, что было зашифровано секретным ключом.
← →
Вопрошающий2015 © (2015-11-11 00:46) [55]
> Kerk © (11.11.15 00:01) [54]
Спасибо за наводку, посмотрю в этом направлении.
← →
Rouse_ © (2015-11-11 09:45) [56]
> Вопрошающий2015 © (10.11.15 23:57) [53]
Приватный ключ от публичного отличается только тем что о приватном знаешь только ты. а о публичном все остальные.
Шифровать и расшифровывать можно и тем и другим ключом.
Т.о. получается что любое сообщение которое зашифровано публичным ключом, сможешь расшифровать только ты, и любое сообщение зашифрованное приватным, сможет расшифровать любой, но никто не сможет создать такое-же зашифрованное сообщение.
Приватный ключ таким образом уникально идентифицирует тебя как отправителя, а публичный не дает прочитать переписку идущую к тебе снаружи.
← →
Eraser © (2015-11-11 19:09) [57]
> Rouse_ © (11.11.15 09:45) [56]
> любое сообщение зашифрованное приватным, сможет расшифровать
> любой, но никто не сможет создать такое-же зашифрованное
> сообщение.
цифровая подпись? )
← →
Kerk © (2015-11-11 19:10) [58]
> цифровая подпись? )
Ну она так и работает. Обычно шифруют секретным ключом хэш сообщения. Любой желающий может пересчитать хэш, расшифровать твою версию и сравнить.
← →
Rouse_ © (2015-11-11 20:09) [59]
> Eraser © (11.11.15 19:09) [57]
> цифровая подпись? )
Да, если не использовать скомпроментированный SHA1, цифровая подпись работает на этом-же принципе, как Рома выше и сказал :)
← →
Rouse_ © (2015-11-12 18:41) [60]Ну собственно фреймворк (для C++14) готов, на выходных буду часть его переводить под Дельфи и готовится к статье.
Почему часть? Ну потому что есть у меня свои идеи по развитию данного проекта, и не всем готов открыто поделиться. Сори.
Впрочем, кто там говорил что хочет посмотреть кейгенми?
Так у меня есть он: http://rouse.drkb.ru/tmp/keygenme.zip
Файл не запакован, не зашифрован, антиотладки и прочих трюков нет.
Адрес обработчика кнопки: 00401270
В этом же виде он выложен на "crackmes.de", но пока не прошел модерацию, скоро должен открыться по данной ссылке: http://www.crackmes.de/users/rouse/keygenme_1/
Как раз к выходу статьи и посмотрим, насколько хороша технология, о которой собираюсь рассказать :)
ЗЫ в дополнению к вопросу:
> DayGaykin © (02.11.15 15:59) [17]
> А если я сделаю:
> A = vmAdd(10, 20)
> B = vmAdd(A, 30)
> То итоговый код этих команд будет идти по порядку сначала
> первой команды, а потом второй или смешается между собой?
В данном вариации фреймворка, выхлоп представляет из себя эдакий "мегахэндлер", где хэндлеры составляющих инструкций переплетены между собой, скажем, с небольшим захлестом из-за оптимизации, искусственное порождение смешивающего графа, объединяющего логику хэндлеров я не делал - хлопотно для такой простой задачи.
← →
Rouse_ © (2015-11-12 18:52) [61]ЗЫ: забыл особо указать на то, что это результат работы обычного компилятора.
Т.е. файл вот как он был скомпилирован, так и был выложен. Никаких последующих махинаций с ним не производилось.
При этом (даже вот в таком простом случае) IDA Pro, уже отказывается строить граф хэндлера.
В Delphi, конечно, именно такого результата не добиться, но что-то очень сильно приближенное, и практически так-же усложняющее анализ логики, скорее всего получится.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.006 c