Форум: "Прочее";
Текущий архив: 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го байтов публичного ключа. Ну и т.п.
Но кряки относительно безобидны. Изменил пару строк, перекомпилировал программу и кряк скорее всего уже не работает. А вот если кейген появится на просторах сети, то туши свет.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.005 c