Ну возьмем какую-нить строку в секции константных данных, мне хочется ее зашифровать и рассшифровывать на стек перед непосредственным использованием, как ты найдешь все места в коде, где есть ссылки на эту строку, если даже "интеллектуальные" дизассемблеры (ида, радаре и гидра) сравнительно долго анализируют бинарник и бывает не всегда угадывают все места, где те или иные данные использовались. Не, все маглы сидят и ждут, а все спецы бьют себя тапком в грудь на васме за деяния, которых никто не видел. Ну полиморф в дешифраторе и в стабе, который будет пихать оригинальный код в софтварный анклав, можно относительно легко снять (так как и дешифратор и индеклав это всетки не так много кода), мое мнение, что если морфить, то нужно морфить весь защищаемый бинарь (да еще так, чтобы всякими алгоритмами деобфусации например через оптимизацию, сложно было снять в автоматике).
Так же, как любой реверсер находит ссылки на строку "Invalid license key". Твои "интеллектуальные" дизассемблеры анализируют бинарник долго вовсе не потому, что это задача такой вычислительной сложности. Чтение ехе с диска, парсинг заголовков, создание образа программы, поиск и анализ rtti-структур, трассировка функций эмулятором (без data-flow) с точек входов из pe-заголовков и rtti-структур с формированием карты памяти, описывающей принадлежность каждого байта программы, занимает 2-3 секунды для ехе в несколько десятков метров. Конечно, чтобы достичь подобной производительности, надо забыть про яву и петон и поизобретать велосипедов.
rtti ? уверен что они будут? pe-заголовок? уверен что реальная entry point совпадает с той, что в заголовке?
Ида и Радаре на плюсах написаны. Ну смысл в том, что решения конкретно этой проблемы у тебя нет, но пофлудить у тебя есть, так?
q2e74, О чем ты? Я привел пример с реального решения, заточенного под задачу. Конечно я уверен, что когда дело дойдет до анализа, на вход анализатору поступит не рандомный буфер. Я же это решение завелосипедил с нуля, а не собрал солянку из сорцов с гитхаба Просто сам факт, что оно написано на плюсах, никаких гарантий не дает. Чем больше абстракций от железного набора инструкций и логики, тем тормознее будет решение. И анализ бинарей х86 - это не тот класс задач, где такой уровень абстрагирования необходим.
rmn, т.е. реально существует некоторый морфер бинарника? И что он морфит , зачем ? (строки, вызовы апи , етц) ? Просто я такого не встречал, только морферы сорцев (очень мало и очень плохие), либо всевозможные крипторы-упаковщики готового ехе. Там без извратов, обычный РЕ лоадер, с нюансами. Хотя, о приват тулзах..чето вспомнилось. Когда-то на дамаге был чел с клаба, который юзал какой-то свой декомпилятор (как рельсы, но круче) и предоставлял желающим сорцы любой малвари. Причем сорцы такие, что сразу вступаешь и компелируешь. Более того, можно было бинарник на дельфи получить сорц на плюсах и т.д. К сожалению, его больше нет, а больше таких решений не видел.
Ну, пара-тройка точно существует, только не у меня Я о том вещаю, что из ехе вполне можно собрать всю необходимую для морфера инфу. Раз уж этой инфы достаточно для создания сорцов из ехе, то и для морфа хватит. Рел же затирает, что пока на гитхабе не появятся библиотека на расте для этого, пока ее не похвалят на хабре и пока за нее не заплатит дерматолог, решения не существует (твердо и четко). Оно и понятно: он уже больше менеджер, чем кодер
Ну это как визор, он есть но его нет. Братан, во-первых, Рел может и побольше тебя кодит, не смотря на то, что Рел тим лидом работает. Во-вторых, решения нет, пока оно не публично и никто не может его посмотреть и использовать. Для современного мира (я знаю, что ты живешь в мире там 90ых, я имею ввиду вот именно для современного мира), если решения нет на гитхабе, то в оупенсорсе его нет. О всяких приватах можно рассуждать сколько угодно, это спецы любят делать, но пока решение не публично, его считай и нет.
Определенно нужно анализировать бинарник, как это делает ида или гидра например. Но вряд ли возможно всегда безошибочно разобрать произвольный файл. Нужен дизассемблер, затем начинать анализ от точки входа (затем экспорты), строить глобальный граф потока кода, допустим можно вести список базовых блоков которые описывают диапазон адресов инструкций, если есть прыжок внутрь блока, то разбивать его на два. Точно придется хардкодить под компиляторы, потому что например реализация switch может отличаться, так же можно подцепить мап файл чтобы упростить анализ или например на x64 есть таблица всех функций. Естественно могут встретиться неразрешаемые прыжки, для этого возможно придется делать статический анализ потока данных. В общем любой файл точно нет, но с некоторыми условиями возможно (чтобы не читал код, не было инструкций накладывающихся друг на друга, не было модификации кода, и т.п.). Но опять же, это все касается только кода, данные останутся как есть, по ним тоже может быть детект. Шифровать константы конечно можно, при условии что точно известны все места где они читаются и это можно узнать во время анализа кода.
Rel, code vs data эта проблема не новая ей много лет, во первых не позволяет полноценную защиту для модуля создать, тут и темы есть. Допустим есть указатель, как узнать на что ссылка, это обратный вызов те ссылка на код либо это ссылка на данные. Это невозможно в общем решить, в частном как то можно анализить код по ссылке, но может быть что там к примеру C3 и анализ процедуры закончится, а в реале это будут данные в кодовой секции. На счёт входов - их по той же причине не определить. Была попытка https://archivevx.net/exelab/f/pages/action=vthread&forum=6&topic=24488&page=0.html Ребята конечно молодцы, подняв дамп кл есть куда ссылаться.
Конечно ~.lst MASM 0000479A 0F B6 05 000047A1 R .......... MovZx eAx,B_[c03] 000047A1 ..................................... c03: 000047A1 03 C2 ................................ Add eAx,eDx
Ну вон у rmn нет с этим проблем, выходит, что он смог, что мы не смогли. У него есть чудо дизассемблер, который решает главную проблему человечества, но который никто в живую не видел. Что-то мне это напоминает... Хммм... А понял, то есть выходит, что он тоже спец. У нас теперь два спеца на форуме, ура!
Rel, Проблема не только в дизе. Если нет релока на константе, то как узнать что это, указатель или загрузка данных.
Инде, да я понимаю все эти проблемы, важно другое, что rmn все уже давное решил, а мы не смогли. Очень жалко, что он нам не даст свой чудо дизасм, который все эти проблемы решает, очень жаль. Я уже там в первом сообщении же в этой теме писал, что это все куда проще и практичнее делать на уровне сорсов или какого-то промежуточного представления. Возможно хотя бы на уровне объектных файлов, то есть до того, как линкер все сведет.
Rel, Он не решил, никто не решил тк единственно возможное решение - эвристическое, а значит что какой то процент 3% бинарей будет рабочих, остальные будут сломаны. Это не приемлемо для малварки. Да и пересборка бинарей выполнялась в виксах есчо до крипторов, просто как инженерная задача - vx, цели не имеющая практической.
Не знаю, он бьет себя тапком в грудь за то, что решил. Мы канеш решения не увидим, тк это спецовое решение, не для маглов. Но тебе то мы верим, что у тебя есть чудо-визор, который никто не видел, чего бы нам rmn не верить, что у него есть чудо-дизасм. Ты не понимаешь, у rmn это называется "Общие случаи - это удел теоретиков. Для практики достаточно частных случаев".
Rel, > у тебя есть чудо-визор, который никто не видел Я его тут где то аттачил пару недель назад. Ты если и видишь, всё равно скажешь что его никто не видел. Тк ты реализовать не смог и не хочешь что бы это кто то сделал, школьная психология > Для практики достаточно частных случаев Частных не достаточно, если каждое апп будет падать на машинке, то его сразу же выпилят из сети. Впрочем зачем что либо пересобирать, если есть простое решение - крипторы(загрузчики). Морф кода это спец задача, она для системки нужна и весьма редко, выделить код в буфер. Это элементарно решается и безошибочно, тк не нужны входы, используется определённый, создаётся граф и собирается. Это делал безошибочно мой двиг kite.
Ну так то я и не пытался это реализовать, мне тысячи семплов гонять не надо, аверская психология). С буффера, созданного криптором, можно сдампить и анализировать себе спокойно, для этого есть готовые тулзы, типа pesieve или как там он назывался, я скидывал в тему про то, что визоры больше не нужны. Тут канеш можно вспомнить про индеклав, но эту технологию маглы тоже не способны осилить, так что она бесполезна по сути. Наш удел - это морфить сорсы или промежуточное представление типа LLVM IR или GIMPLE.
Rel, Какой же не понятливый, просто ты не кодер никогда системные задачи не решал. К примеру ты какую то процедуру пропатчил, для обработки её нужно целиком в буфер пересобрать. Для этого необходим конструктор который строит граф и билдер который граф собирает.
Странный вброс, я был и остаюсь профессиональным программистом уже лет 15, в отличии от тебя (электрика или авера или кого там). Ну мне патчить процедуру не нужно, я же все на уровне абстрактного синтаксического дерева могу сделать или через ллвм.