Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.56 MB
Время: 0.006 c
15-1442015464
trenkin
2015-09-12 02:51
2016.07.24
Ошибка при открытии файла PDF из вложения


15-1447240616
AndrewAndrey
2015-11-11 14:16
2016.07.24
Права доступа WinServer2012r2


15-1440689471
Gydvin
2015-08-27 18:31
2016.07.24
Ищу рассказ, или сборник небольших рассказов...


15-1443907804
Юрий
2015-10-04 00:30
2016.07.24
С днем рождения ! 4 октября 2015 воскресенье


15-1445092188
Дмитрий Белькевич
2015-10-17 17:29
2016.07.24
Отображение меню





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский