• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Методы обхода AV в исходниках C++

Если гражданин чего то не видел в природе то это нульдей... Даже если это миксование набора "(Api(x)) - (ERROR_OBJECT_NOT_FOUND - NUM)". И вот навткать таких конструкций вместо NUM это нульдей превад и тайна. У вашего нульдея такая борода что в бинокль не разгядеть.
 
Если гражданин чего то не видел в природе то это нульдей... Даже если это миксование набора "(Api(x)) - (ERROR_OBJECT_NOT_FOUND - NUM)". И вот навткать таких конструкций вместо NUM это нульдей превад и тайна. У вашего нульдея такая борода что в бинокль не разгядеть.
Бездарно троллишь, ты даже не выкупаешь, где тут нульдей, это заметно по тому, на чем ты акцентируешь внимание. Доебался к одному из предикатов, и доказываешь, что он не нульдей, хотя я и не говорил, что он нульдей)))
Твой примерный уровень ответа такой, как если бы я эксплоит выложил, а ты бы пристал, типо "АААА ты тут роп гаджеты юзаешь, такая борода что в бинокль не разглядеть"
 
Последнее редактирование:
Выкупаю, нульдей в ваших фантазиях. Больше в этом топе ни нульдеев ни намеков на нульдеи. Удачи вам и первого приза в конкурсе. Полюбому ведь должен победить нульдей, а кроме вашего нульдеев и не видно...впрочем отдельные инвалиды умственного труда и ваш не разглядели,..ну да бог с ними убогими.
 
Удачи вам и первого приза в конкурсе.
Спасибо
Выкупаю, нульдей в ваших фантазиях
Эхх, вот то я думаю. Как же так? Как только сел алгоритмы пилить и сам обфускатор по ним, ни одной толковой статьи и туториала сцуко в нете нет, везде какой то мусор либо полунаработки, когда в С++ с помощью макросов генерируются функции.. , кроме пары статей всего, ничего комплексного. Никто толком не описал(а перечитал я много чего) о методологии замыкания в обфускаторе и как добиться метаморфизма в сорцах, а как только решил сесть и написать с нуля, руководствуясь только документацией парсеров и собственными соображениями, то повылазили шептуны со словами что все х#йня и вообще паблик, как так скажи?)))
 
Спасибо

Эхх, вот то я думаю. Как же так? Как только сел алгоритмы пилить и сам обфускатор по ним, ни одной толковой статьи и туториала сцуко в нете нет, везде какой то мусор либо полунаработки, когда в С++ с помощью макросов генерируются функции.. , кроме пары статей всего, ничего комплексного. Никто толком не описал(а перечитал я много чего) о методологии замыкания в обфускаторе и как добиться метаморфизма в сорцах, а как только решил сесть и написать с нуля, руководствуясь только документацией парсеров и собственными соображениями, то повылазили шептуны со словами что все х#йня и вообще паблик, как так скажи?)))
ну ты это, не огорчайся, я на с++ проводил эксперементы по обфускации и методологии, просто не шибко в статьях этому описания делал, можешь всегда в лс мне написать
 
Спасибо, для меня как новичка весьма интересная статья, я вот пока читал и тестил пытаясь дописать какие-нибудь плюшки к своему обсуфкатору, котрый давно нашел на гитхабе и он так сильно не палит криптованные скрипты при запуске как делают другие, подобно invoke-obfuscation, я правда особо не шарю в этом, но вроде как скрипт юзает Get-Random -Count в переменную и каждый раз выдает разный код на один и тот же скрипт или команду, поэтому АВ не палят его продукты. И еще прикол поймал, пока изучал и баловался с кодировками, обнаружил какой-то неведомый мне метод, который закриптовал мне батник и что удивительно касперский и панда ничего не палят.
Вот для теста, запустите батник-лоадер от админа:
Код:
ഠ 敀档景⁦਍挠⁤搯∠縥灤∰ഠ 档灣㘠〵㄰㸠畮਍爠浥਍瀠睯牥桳汥渭灯ⴠ潮楮∠愤兰㴠嬠敔瑸䔮据摯湩嵧㨺十䥃⹉敇却牴湩⡧嬨敔瑸䔮据摯湩嵧㨺十䥃⹉敇䉴瑹獥✨婴剗捨搳䱷桭婨摘剈䭯摃䱷娲捶潺獭摵氲慵歹䨽剈㕴摹ㅓ䴵噓䱪㥇敬䤰久婱㕗婘㕗摬䥃桃卙噕呏䨲婴捘䘲扫㔲啳㕗慮刳汹扬䩇扄剮摶八䱰⤧簠匠牯⵴扏敪瑣笠䜠瑥刭湡潤匭瑥敓摥㐠㠲㄰㠷㔲素⤩※唤䍳硪㴠嬠敔瑸䔮据摯湩嵧㨺十䥃⹉敇却牴湩⡧䍛湯敶瑲㩝䘺潲䉭獡㙥匴牴湩⡧愤兰⤩※䕉⁘唤䍳硪•ഠ 敀楸൴
 
Последнее редактирование:
Тема - обфускация исходников С++, содержание - скрипты ява, повершел и прочее "непонятная" инфа. Вопрос - где обфускация исходников С++?
Хоть кто-то кроме меня на это обратил внимание)
 
Тема - обфускация исходников С++, содержание - скрипты ява, повершел и прочее "непонятная" инфа. Вопрос - где обфускация исходников С++?
Так сложилось исторически.
Тема https://xss.pro/threads/34587/. Смотри название этой темы. Человек спросил про c++, я описал методологии, используемые в моих рабочих яп, которые отличные от С++, но которые вполне применимы и к его проблеме для этого ЯП. Я оставил там комментарий. Вот эта моя статья - это комментарий изначально в той теме. Только после написания коммента, попросил админа перенести. Он перенес, с сохранением названия из того топика. Получилась слегка несуразица в этом плане, сам не рад. Если совсем коротко то кастанули с моего коммента в чужой теме, в статью на конкурс, с сохранением названия чужой темы, а контекст "о чем и почему" остался там. По этому когнитивный сбой слегка.
 
Последнее редактирование:
Спасибо, для меня как новичка весьма интересная статья, я вот пока читал и тестил пытаясь дописать какие-нибудь плюшки к своему обсуфкатору, котрый давно нашел на гитхабе и он так сильно не палит криптованные скрипты при запуске как делают другие, подобно invoke-obfuscation, я правда особо не шарю в этом, но вроде как скрипт юзает Get-Random -Count в переменную и каждый раз выдает разный код на один и тот же скрипт или команду, поэтому АВ не палят его продукты. И еще прикол поймал, пока изучал и баловался с кодировками, обнаружил какой-то неведомый мне метод, который закриптовал мне батник и что удивительно касперский и панда ничего не палят.
Вот для теста, запустите батник-лоадер от админа:
Код:
ഠ 敀档景⁦਍挠⁤搯∠縥灤∰ഠ 档灣㘠〵㄰㸠畮਍爠浥਍瀠睯牥桳汥渭灯ⴠ潮楮∠愤兰㴠嬠敔瑸䔮据摯湩嵧㨺十䥃⹉敇却牴湩⡧嬨敔瑸䔮据摯湩嵧㨺十䥃⹉敇䉴瑹獥✨婴剗捨搳䱷桭婨摘剈䭯摃䱷娲捶潺獭摵氲慵歹䨽剈㕴摹ㅓ䴵噓䱪㥇敬䤰久婱㕗婘㕗摬䥃桃卙噕呏䨲婴捘䘲扫㔲啳㕗慮刳汹扬䩇扄剮摶八䱰⤧簠匠牯⵴扏敪瑣笠䜠瑥刭湡潤匭瑥敓摥㐠㠲㄰㠷㔲素⤩※唤䍳硪㴠嬠敔瑸䔮据摯湩嵧㨺十䥃⹉敇却牴湩⡧䍛湯敶瑲㩝䘺潲䉭獡㙥匴牴湩⡧愤兰⤩※䕉⁘唤䍳硪•ഠ 敀楸൴
не работает, в консоль пишет крякозябры и "Слишком длинная входная строка."
 
не работает, в консоль пишет крякозябры и "Слишком длинная входная строка."
Все работает, и на 7,8,10. Просто этот батник надо сохранять в юникоде, а не ютф-8 и анси. ;)
 
Да какие призовые места..) Мне сказали, что по объёму не дотягивает до участия в конкурсе.
Нет так нет, не хочу разводить тут сопли на тему соотношения объемов и полезности и того, что уже есть на конкурсе.
———

Да хорошо, чуть позже залью.

Надеюсь, это комплимент. В любом случае спасибо за фидбек.

———

По поводу методов, добавлю ещё один к статье выше.
Разделяй и властвуй.
Принцип его прост, но может быть достаточно сложен в реализации в вашей автоматике. Вот какой принцип:
1) После разбития мат выражения на составные части, с помощью COM, мы можем обращаться к другим интерпретирующим движкам, которые уже есть в системе и у которых совершенно другой контекст выполнения и трекинг с точки зрения анализатора ав!
Например
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible = $false
Обращается к COM интерфейсу Internet Explorer
И вот пример, как в контексте ie запустить javascript сценарий и вернуть результат исполнения в пш.
То есть мы 1 задачу можем разбить на N экзекьюторов в системе и обмениваться состоянием.
Гуглите
«Adding VBScript and JScript support in your C++ applications»
То есть как минимум уже 3-4 экзекьютора, на которые можем разбить и вынести функционал.

Даже если не в контексте обфускатора это использовать, а к примеру типичная задача, скачать и запустить. Вы можете подтянуть зашифрованный base64 вашего файла с удаленного сервера с помощью посещения страницы и выгрузки контента ie com обьектом. Расшифровать с помощью jscript wsh, положить ну диск с помощью vbscript, а запустить с помощью своего нативного лодыря. Все 3 экзекьютора можно проэмулировать, но суть в том что у каждого экзекьютора свои методы эмуляции, если у нейтива там какой нибудь x86 cpu emulator, то у jscript/vbs основа это amsi и аверская автоматика должна быть настолько умной, чтобы связать эти 3 экзекьютора и дать детект, понимая что все работает на одну цель. Но это очень сложно, поскольку только jscript/vbs это две разные VM, со своими правилами, а код, выполняемый там, происходит «не совсем» в контексте твоей нативной апки.

———
Можете задавать вопросы, если эта тема интересна, я на обфускаторах и работе с AST уже собаку сьел, работал с AST таких яп как JavaScript/Powershell. И писал под эти яп обфускаторы. Будет свободная минутка - отвечу на самые интересные вопросы.
———
Так же интересны ваши случаи, примеры, истории и алгоритмы по этой теме. Буду рад услышать.
Интересно было бы услышать на счет морфинг в C#. Т.к. примитивные операции по разбиению чисел оптимизируются, приходится, как вариант использовать строки, разбитие, парсинг из строки в число.
Так же вопрос, можешь объяснить как правильно составить программу, которая бы изменяла по алгоритмам исходный код.И что можешь посоветовать почитать по AST или шаблонизации.
Заранее спасибо)
 
Последнее редактирование:
Спасибо за интересное изложение идеи и методики..
Но вы не первый кто это использует и пропогандирует :)

Еще в далеком 13г ребята делали вот такие штуки (threads/23817/), кстати пример на си ;).
Похожим, легонько модифицированным способом люди хранили шеллкод пе загрузчика,
а инициализация магической константы для всей остальной арифметики бралась из результата ответа ошибки от не топовых winapi функций :)

Да, тогда это был по сути нульдей, потому как аверы умели хэндлить ограниченное количество ошибок апишек и эмуль не раскручивал всё остальное...
Потом появились более глубокие идеи, такие как проверка результатов выполнения в регистрах, и как кульминация методы - движки инди..
 
Спасибо за интересное изложение идеи и методики..
Но вы не первый кто это использует и пропогандирует :)

Еще в далеком 13г ребята делали вот такие штуки (threads/23817/), кстати пример на си ;).
Похожим, легонько модифицированным способом люди хранили шеллкод пе загрузчика,
а инициализация магической константы для всей остальной арифметики бралась из результата ответа ошибки от не топовых winapi функций :)

Да, тогда это был по сути нульдей, потому как аверы умели хэндлить ограниченное количество ошибок апишек и эмуль не раскручивал всё остальное...
Потом появились более глубокие идеи, такие как проверка результатов выполнения в регистрах, и как кульминация методы - движки инди..
Ну суть статьи не только в этом. Я понимаю что в общем может не одей. Однако не видел описаний в сети как и что делать, чтобы прийти к нужным результатам. Именно алгоритмически. Для меня огромный смысл, помимо того, что ты описал - это возможность раздувать из константы код, получающий эту константу, при чем этот код имеет полиморфную основу и морфит не только существующие инструкции, а ещё между ними. И внутри них. То есть это, как попытка трешгенить с привязкой к контексту, чтобы сам трешген при этом был антиэмулем и чтобы треш был полиморфным. + пытался показать, почему именно AST морфером можно истинной красоты добиться, а не парсить как некоторые, построчно.
 
Поделюсь своим видением проблемы. По мне обфускациия и антиэмуляция это разные задачи и их нужно разделять, программисты мы или где?)

Задача АЭ не дать АВ добраться до полезной нагрузки, а желательно и до кода дешифровки оной.
Код АЭ должен быть очень простым, чем он проще, тем меньше там возможных сигнатур, тем проще его морфить.
У меня 30 строк кода на ассме весь АЭ, до морфа и трешагена, без АПИ (АПИ в трешгене добавляются) и без каких то трюков. Сам код простейший и подобный ему есть в любом ЕХЕ.

С обфускацией (удалением устойчивых сигнатур) всё сложнее, выражения морфить легко, а как быть с ветвлениями и циклами?
АВ умеют ставить "поведенческие" сигнатуры, то есть появление ветвлений и циклов в определенном порядке (палятся условия и счётчики циклов). Каспер и некоторые другие АВ не любят "бессмысленные циклы")
Уточню, я пишу на ассме, насколько это справедливо для ВСУ ЯП, не знаю. Ещё из интересного у меня было, детект обнуления регистра (нужен был для дельта смещения),
детект варианта команды (из за системы адресации микрокоманду можно записать 2 способами, компиляторы выбирают всегда один вариант, АВ умеют отмечать эти моменты),
вызов определенной функции кода более одного раза (есть некая внутренняя служебная функция программы, вызов более одного раза давал детект).
 
По мне обфускациия и антиэмуляция это разные задачи и их нужно разделять, программисты мы или где
До 2015г согласен, но сейччас УВЫ нет. Задачи может быть и разные, но с тех пор, как аверы начали использовать мл в своих движах, пришло время заморачиваться и смешивать методы.
Морфер морфит код, в то время как трешген разбаваляет заморфленый код, а логика морфленого кода в свою очередь вяжется на инициализированные МАГИЧЕСКИЕ переменные, которые ЗАРАНЕЕ на стадии морфа просчитываются и средняя стоимость вычисления (в количестве процессорных тактов) заранее известна.

АВ умеют ставить "поведенческие" сигнатуры, то есть появление ветвлений и циклов в определенном порядке (палятся условия и счётчики циклов)
С собственным кодом, к тому же ограниченного размера всё достаточно просто, например цикл можно разбирать на несколько более мелких или вложенность использовать с рекурсией, да в случае asm там куча способов:)
НО
Есть такая штука как статистика, она беспощадна, и аверы её давно используют в своих эвристиках.
По-этому нужно брать статистические методы на вооружение, и в своих генераторах (тем-более если это асм) использовать вероятностные алгоритмы частотной генерации определенных опкод и регистров.
В в случае ВСУ используются немного другая логика, но опять же после компиляции дизасм парсить и вести подсчет полученных опкод и регистров, попутно меняя частоты генерации определенных мат. и др операций никто не запрещал.

AST хорош своей глубиной возможностей для ВСУ ЯП. Возможности и правда безграничны..

ЗЫ: как я сказал в другом топике - чтобы адекватно рубить ав на отрезке в год++, нужно брать на вооружение reinforcement learning + статистические методы. И да, это не так сложно как кажется :)
 
Морфер морфит код, в то время как трешген разбаваляет заморфленый код
Это само собой, чем сильнее закручен код, тем тяжелее его анализировать.
Не знаю, что вы там крутите в качестве АЭ, у меня это 30 строк кода. До тех пор пока АВ используют программную эмуляцию, это задача вообще не требует особых усилий.
АЭ можно и на ассме накидать, морфер и трешген на ВСУ ЯП разумеется. Заострю внимание, что независимо от языка, вектор атаки для реализации АЭ лежит именно в
отсутствии аппаратной эмуляции.
Разделение задач по функциональности это всегда оправдано, и для чистки и для модификации алгоритмической части. Отдельно утки, отдельно курицы так сказать.

Есть такая штука как статистика, она беспощадна, и аверы её давно используют в своих эвристиках.
По-этому нужно брать статистические методы на вооружение, и в своих генераторах (тем-более если это асм) использовать вероятностные алгоритмы частотной генерации определенных опкод и регистров.
Позвольте не согласиться. Да, статистика ведётся, но не думаю что по конкретным опкодам и регистрам. Скорее по функциональным группам:
1) математические операции
2) работа с памятью
3) вызовы API
Почему я так думаю? Потому что система команда процессора достаточно сложная: префиксы + 1-3 байта опкод + ModRM + SiB + displacement + immediate.
Да и такая статистика довольна неинформативна, тогда как функциональная статистика даёт представление о поведении программы, чем эвристика и занимается.
По сути, ей не так важно с помощью каких команд вы достигаете результата, а сам конечный результат и методики работы кода (допустим стековая машина).

Вся информация получена лично мной, опытным путём. Рублю ав гораздо больше года)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх