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

Вниз

Сели тут со знакомым и за два дня ...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.016 c
15-1440711004
Юрий
2015-08-28 00:30
2016.07.24
С днем рождения ! 28 августа 2015 пятница


15-1442179801
Юрий
2015-09-14 00:30
2016.07.24
С днем рождения ! 14 сентября 2015 понедельник


15-1447345068
aka
2015-11-12 19:17
2016.07.24
Логический симулятор


15-1443310614
Drowsy
2015-09-27 02:36
2016.07.24
Что такое с компом?


15-1444580103
DayGaykin
2015-10-11 19:15
2016.07.24
Удивительный QuickSort