eXeL@B —› Программирование —› Многослойное динамическое шифрование (пример полиморфного кода на C/C++) |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 16 января 2012 18:55 · Личное сообщение · #1 Везде так много говорится о крутости шифрования кода на лету и даже не просто шифрования, а ещё и многослойного, но нигде я что-то не могу найти примера, который бы на пальцах показывал что это такое. Может есть у кого самый минимальный-минимальный пример на си, который показывает суть методики многослойного шифрования кода, чтобы сразу стало понятно что такое многослойное, а что такое однослойное шифрование? В идеале хотелось бы пример, который можно было бы скопировать в файл a.cpp и запустить c:\> g++ a.cpp && a.exe PS. я на этом форуме новенький, мне хочется попросить администрацию добавить к кнопкам style="cursor:pointer" куда с этим вопросом обращаться? |
|
Создано: 18 января 2012 10:56 · Личное сообщение · #2 wowfactor пишет: задача моей защиты страшно рявкнуть Вспомнил, как в далекие 90 годы ломал одну софтинку под DOS - результатом неправильного взлома было сообщение что активирован такой-то вирус, который поразил ваш комп. При подробном разборе проги выяснилось, что если идти по неправильному пути - то действительно распаковывается и активируется вирус, если же путь распаковки правильный, то о вирусе никто ничего и не знает. ----- Everything is relative... |
|
Создано: 18 января 2012 12:28 · Поправил: wowfactor · Личное сообщение · #3 2 HandMill > Надеюсь смешать код на си и ассемблере > для вас проблем не составит составит я не системщик, асма не знаю и опыта смешивания си и асма у меня пока не было скоро мне предстоит процедура, которую я очень боюсь - научиться выдирать код апишных функций и инлайнить их в код своих программ с нарушением структуры инъекции, мешающей поиску по паттерну, но с полным сохранением функциональности вставки мне насколько страшна сама эта мысль, что я даже пока думать о ней не хочу > http://indy-vx.narod.ru/Bin/GCBE.zip я там ничего не понял и вообще я там ни одного сишного файла не нашел 2 Dart Sergius > ну или что-то типо такого мутить а где здесь способ определения длины процедуры? и как в этом способе зашифровать например три функции сразу? Code:
как по вашей методике взять этот блок целиком, скопировать его в кучу, там зашифровать, переместить в новое место, расшифровать, выполнить, опять защифровать и опять переместить в новое место? может тут дефайнами надо какие-то метки вставлять на асме или что-то типа того, а потом адреса этих меток вычитать, чтобы получить длину блока и ещё надо как-то от компилятора защитится чтобы он не раскидал эти функции внутри объектного файла 2 mak > cам не знаешь, что тебе конкретно нужно нужно самый простой пример на си многослойного шифрования исполняемого кода в рантайме > даже не посмотрел похоже я открыл статью, что такое Triple Des, там написано - это такой шифр, я закрыл статью и написал, что шифры не в этой теме. что не так? > определись с терминами какой именно использованный мной термин или фраза вызывает у вас многозначное толкование? эта тема не о стойкости криптоалгоритмов, а о многослойности шифрования исполняемого кода > в многослойном шифровании может использоваться > один и тот же криптоалгоритм, а может > и разные для упрощения понимания многослойности было принято решение использовать только ксор > сюда же входит тема о комбинации криптоалгоритмов нет, не входит конкретно в этой отельной теме - только ксор > Какие примеры конкретно ты хочешь увидеть? С ксором? Code:
я хочу чтобы кто-нибудь добавил в этом примере строчки, которые позволят: 1. скопировать блок из двух функций state() и state_() в кучу и сохранить адрес в pFrom 2. там его зашифровать через crypt() и скопировать полученную шифрованную строку в новое место в куче и адрес сохранить в pTo 3. потом расшифровать из pTo с помощью decrypt() и выполнить этот блок из двух фукнций через exeblock() > тебе таким образом сколько примеров > не показывай, мало будет. одного примера вполне хватит если вы под примером понимаете какой-нибудь проект на 80000 LOC в котором где-то на 32500 строке содержится пример горячего дешифрования куска кода с последующим шифрованием, то я не этот пример имел ввиду, когда просил пример мне кажется, что пример, который я прошу, должен как-то уместиться в 20-25 строчек, то есть что-то такое, что профессионал может написать по памяти прямо на ходу > c простым ксором многослойное шифрование > можно найти в крипторах, там и будет > нужный полиморф по условию темы мне может не хватить квалификации вычлинить пример горячего шифрования кода среди алгоритма самого шифра, поэтому я и прошу детский пример, изолированно демонстрирующий горячее шифрование |
|
Создано: 18 января 2012 12:31 · Личное сообщение · #4 |
|
Создано: 18 января 2012 12:44 · Личное сообщение · #5 |
|
Создано: 18 января 2012 13:54 · Личное сообщение · #6 wowfactor я б для начала тебе посоветовал, прежде чем лезьт в такие дебри почитать о способах создания само модифицируемого кода. я сделал, правда на Делфе движочек. Правда недоделал обработку некоторых комманд. Так вот этот движок, берет код, по 1ой комманде уносит его в спец. отведенную область и там ее выполняет, а а движок контролирует выполнение этой комманды (типа что на входе что на выходе). Своеобразная виртуальная машина. Не статическая не димначеская, а чтото среднее. Я это к чему веду. Я написал его на делфе. с 1ой лиш вставкой асма. Типа реально все, ток высокоуровневые языки от таких эксперементов с ума сходят. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 18 января 2012 13:59 · Личное сообщение · #7 >научиться выдирать код апишных функций и инлайнить их в код своих программ > с нарушением структуры инъекции, мешающей поиску по паттерну, но с полным > сохранением функциональности вставки Эх, опять фигней страдаете. Такого добра в современных протекторах полным полно. И обходится так же элементарно. Как правило каждая АПИ вызвает еще АПИ, которые в свое время все равно могут быть переловлены. К примеру если вы полностью выдерите апи функцию CreateFileA и сделаете ее невидимой для взломщика, то ему не составит труда переловить ZwCreateFile, которая вызывается из CreateFileA и которую уже никак не проэмулируешь, потому что это низкоуровненвая процедура, не используемая в языках высокого уровня. ----- StarForce и Themida ацтой! | Сообщение посчитали полезным: vden |
|
Создано: 18 января 2012 14:12 · Поправил: OKOB · Личное сообщение · #8 wowfactor пишет: я хочу чтобы кто-нибудь добавил в этомпримере строчки, которые позволят strlen работать не будет, т.к. в коде как криптованом так и нет могут быть нули (признак конца С строки) 430a_18.01.2012_EXELAB.rU.tgz - zzz.RAR ----- 127.0.0.1, sweet 127.0.0.1 | Сообщение посчитали полезным: wowfactor |
|
Создано: 18 января 2012 14:17 · Личное сообщение · #9 wowfactor пишет: мне кажется, что пример, который я прошу, должен как-то уместиться в 20-25 строчек, то есть что-то такое, что профессионал может написать по памяти прямо на ходу Нужно размапить PE файл, а это не 25 строчек, говорю же основ не знаешь. Скачай с офсайта ASProtect, у него прямо с EP начинается многослойное дешифрование загрузчика, слоев 6-8. Если не понимаешь в дизасме и отладке машинных команд, то пример на Си тоже тебе ничего не даст, т.к. результаты можно будет увидеть только в дизасме/отладчике. ----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: ClockMan |
Ранг: 281.8 (наставник), 272thx Активность: 0.25↘0.01 Статус: Участник Destroyer of protectors |
Создано: 18 января 2012 14:18 · Личное сообщение · #10 wowfactor пишет: 1. скопировать блок из двух функций state() и state_() в кучу и сохранить адрес в pFrom ну бери и копируй, в чём сложность? Code:
ну а дальше например с помощью memcpy копируй куда надо. либо функу на асме написать. узнать размер функи можно заюзав какие-нибудь маркеры, либо дисасм прикрутить. либо ручками посчитать на крайняк, но это не кошерно. wowfactor пишет: 2. там его зашифровать через crypt() и скопировать полученную шифрованную строку в новое место в куче и адрес сохранить в pTo тоже самое, копируешь, я бы выделил память VirtualAlloc (либо malloc) и копировал уже туда. С расшифровкой тоже самое. Может я чёт не так понял, но причём тут шифрование я хз, закриптовать ты и сам знаешь как...асм учи. |
|
Создано: 18 января 2012 14:49 · Поправил: vden · Личное сообщение · #11 wowfactor пишет: чувак, я ни хрена не понял, что ты сказал, ну подразумевалось закинуть exe в IDA и потрейсить с адреса 510754. имхо, если проблемы с асмом и дизасмом, то пока рановато защиты делать. все же если интересно, то вот мой примитивный сорс (на Delphi) 7c31_18.01.2012_EXELAB.rU.tgz - example.dpr |
|
Создано: 18 января 2012 14:49 · Поправил: OKOB · Личное сообщение · #12 CodeBreakers Magazine Vol.1, No 2, 2006, автор Giovanni Tropeano статья Self Modifying Code http://www.scribd.com/doc/47681501/65-276-1-PB или книга C/C++ Secure Programming автор Gene Spafford глава 12. Anti-Tampering раздел 12.17 ----- 127.0.0.1, sweet 127.0.0.1 | Сообщение посчитали полезным: VodoleY |
|
Создано: 18 января 2012 17:14 · Личное сообщение · #13 2 VodoleY > почитать о способах создания само модифицируемого кода так, блин, в этом-то и вопрос! где можно прочитать про самомодифицирующийся исполняемый код с изложением на си (а не на дельфи) начиная с самых-самых простых примеров мне ниже советуют скачать сорсы боевого проектора и там найти способы; выше соверуют скачать сорсы боевого шифра и там найти; а я сдохну, пока в них найду пример выскусывания кода с последующими манипуляциями > я сделал, правда на Делфе движочек передо мной не стоит цели создавать ни виртуальную машину, ни peloader, а лишь хочу управлять подачей инструкций в уже действующий конвеер внутри исполняемой программы 2 Maximus > все равно могут быть переловлены 1. я осознаю риски о которых вы пишите 2. я вижу суть инъекций не в том, что отловить нельзя, а в том, чтобы свести вызовы с редкими сигнатурами к вызовам с частыми сигнатурами. важно сделать так, чтобы из 1000 вызовов пришлось бы искать лишь одну верную дорогу плюс задача-то у меня простая: поставить защиту, которую нельзя снять с помощью туториала, а можно снять только с помощью своей головы знаете есть в америке такие цикады, которые вылупляются на свет только раз в 17 лет и они свободно покрывают собой весь город, потому что никто из птиц их не ест, хотя для птиц они очень вкусные. птицы их даже пугаются! новизна и необычность подзадоривает профессионалов, а для ламмеров она наоборот стимулирует пугающую фантазию я не собирался фейковать createfile, потому что этот вызов отлично смешивается с "нормальными" созданиями файлов, а вот getfiletime - это слишком явный редкий вызов, который хотелось бы свести к набору каких-нибудь других вызовов, которых в обычной программе дофига getsystemtime всем хорош, но он отлючается слишком уж просто: достаточно часы отмотать > никак не проэмулируешь, потому что это > низкоуровненвая процедура, не используемая > в языках высокого уровня я не знаю пока как решается эта задача может можно как-то через ассемблерную вставку получать дату последного обращения к файлу. важно найти только такой способ, чтобы он не был уникальным по отношению к обычной работе прикладной программы я в эту тему пока даже не вникаю - это надо отдельное время и отдельные нервы 2 OKOB > 430a_18.01.2012_EXELAB.rU.tgz - zzz.RAR Аллилуя, господи!!! Аллилуя!!! не понятно только зачем двойную память выделяем, а так - Аллилуя!!! > если не понимаешь в дизасме и отладке > машинных команд, то пример на Си тоже > тебе ничего не даст, т.к. результаты можно > будет увидеть только в дизасме/отладчике. ну отчего же? я же смог понять пример OKOB'а оказалось, что кастинг сигнатуры функции дает адрес начала блока, а для вызова любого raw-куска достаточно скастить void* указатель к указателю на функцию - вот и вся кухня с полиморфным шифрованием в рантайме > _asm mov eax, offset state зачем? оказалось все проще (int*)state > я чёт не так понял, но причём тут шифрование как причем? с момента вывода кода в кучу мы можем им управлять в рантайме, а значит код, который у нас в самой программе и код который реально выполняется - это не одно и то же, а это и есть шифрование по определению 2 vden > вот мой примитивный сорс (на Delphi) спасибо, но я на нем не шарю как-то не сложилось у меня с ним 2 OKOB > http://www.scribd.com/doc/47681501/65-276-1-PB the length of the body of a function is equal to thedifference between the pointer to the function and thepointer to the function following it. Easy! ну почему такие статьи хрен найдешь через гугл, а только через общение, блин! ==== короче, какие у меня были вопросы о принципе многослойности шифрования я их получил через пример OKOB'а и статью этого Джованни спасибо всем, кто помогал мне при записи этого альбома |
|
Создано: 18 января 2012 19:03 · Поправил: VodoleY · Личное сообщение · #14 wowfactor На самом деле все просто. код можно сделать модифицируемым не так многими спосабами. 1. выполнять в стеке (там секция с досупом на чтения и запись) 2. выделять область памяти и VirtualProtectom изменять доступ 3. с помью MapedFile (им я и пользуюсь обычно) И ПРОЧИТАЙ ТО ЧТО ТЕБЕ ОКОВ подогнал. З.Ы. есть еще более извращенные способы. но и этого с головой З.Ы.Ы, про 7ку точно не знаю, в ней вроде запретили код в стеке выполнять. про модификацию кода у Касперского Криса пару неплохих и легеньких статей. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 19 января 2012 00:58 · Личное сообщение · #15 2 VodoleY я прочитал и статью, и главу которую он дал, и про ваши три метода прочитал и не понимаю нафиг они все нужны? ведь благодаря примеру ОКОВ'а мы видим, что какое угодно рантайм манипулирование, в т.ч. шифрование можно мутить с помощью самого банального маллока, а адреса брать тупо кастингом сигнатур функций, а любой raw-блок памяти можно вызвать через кастинг указателя на этот блок к указателю на функцию не знаю кому как, а мне маллока хватит с головой спасибо ОКОВу ещё раз |
|
Создано: 19 января 2012 01:49 · Личное сообщение · #16 wowfactor пишет: задача текущей темы не peloader'ы изучать,а многослойность, то есть не сложностьстроковых декрипторов, а полифорфизмисполняемого кода в рантайме средствами си То есть какой-то сферический конь в вакууме. Реальную проблему удержания кода в рабочем виде - кому оно надо ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 19 января 2012 06:00 · Личное сообщение · #17 wowfactor пишет: так, блин, в этом-то и вопрос! где можно прочитать про самомодифицирующийся исполняемый код с изложением на си (а не на дельфи) начиная с самых-самых простых примеров ехх нет у вас полёта мысли зачем вам asm? пишите свою VM на сях или плюсах которая будет уметь работать только с вашими абстрактными данными где данные и будет ваша программа на тех же опять сях или плюсах ну итд асбтракция над абстракцией всего то... |
|
Создано: 19 января 2012 10:12 · Личное сообщение · #18 Забавный тред. Знаний у ТС ноль в нужном направлении, платить кому то - не хочется, а самому разбираться и писать - лениво. И активное обсуждение при этом. | Сообщение посчитали полезным: HandMill |
|
Создано: 19 января 2012 10:39 · Личное сообщение · #19 С самого начала топик мне не нравился, пора его уже закрыть, пожалуй. И так самплы уже дали. И вообще здесь форум не защиты софта, если что, поэтому не стоит сюда с такими вопросами ходить. | Сообщение посчитали полезным: Maximus, [-alex-], DimitarSerg, SReg, HandMill, _ruzmaz_, Dart Sergius, hlmadip |
<< . 1 . 2 . |
eXeL@B —› Программирование —› Многослойное динамическое шифрование (пример полиморфного кода на C/C++) |
Эта тема закрыта. Ответы больше не принимаются. |