Rel, Рабочая специальность никакого тут значения не имеет. У меня она есть, а у тебя её нет. Без машинки ты не можешь выжить, тк специальности нет никакой. За всё время от тебя небыло никаких моторов никаких решений ничего. По факту ты не кодер а троль, но считаешь себя спецом. > Ну мне патчить процедуру не нужно Я выше и сказал что системныe задачи ты никогда не решал, раз не понимаешь про что речь. Нельзя ими ядерную обработку реализовать, это вывалит в бсод всю систему и отладить такое невозможно, просто системка со скриптами не совместима, там нэйтив. Посмотри катю(kite), там сотни примеров где задачи решаются пересборкой.)
Странная логика, я работаю по специальности и мне норм, выживать без машинки мне и не придется никогда (хотя я и не понял, что такое машинка). Я не считаю себя спецом, тк я не бью себя тапком в грудь за какие-то решения, которых никто не видел, не выдумываю термины и тд. Я обычный магл, но все же выкладывал сюда и на хсс "моторы" для морфинга сишечки и плюсов. Без понятия что это, и главное зачем мне это.
Это довольно распространенное заблуждение, что вершина любой карьерной лестницы - гендир. На самом деле это, конечно же, не так и когда тебя "повышают" с кодера до руководителя отдела, это скорее профессиональная деградация, чем рост
Ну на самом деле я уже мог бы быть выше тимлида, но остаюсь им потому, что эта должность позволяет мне с одной стороны хорошо зарабатывать, а с другой стороны все еще творить в программировании: не только писать код, но и заниматься дизайном архитектуры программных проектов. Я понимаю, что ты и Индий далеки от сферы профессиональной разработки и не шарите в том, чем занимается тимлид, но в чем смысл обсуждать мои должности или мои зарплаты, чтобы меня как то задеть? Я уже добился многого в своей сфере и меряться писюнами не имеет особого смысла.
Это все очень интересно, но причем ваш карьерный рост в теме о морфинге кода? И вы уж определитесь с кем и против кого вы дружите, вы то за авера, то против него, то сретесь с rmn, то на пару с ним троллите инди. И вопрос по существу, в каком именно месте вам необходимо уметь отличать код от данных в бинарнике после компилятора?
Ну не я завел разговор про мою специальность, спроси у Индия этот вопрос или у Рмна. Чего им надо до моей специальности? Я дружу со всеми, и с Индием и с Рмном, как и троллю всех. Просто до этого Рмна не чем было троллить, теперь узнал его поближе и понял, что он тоже спец как и Инде. Я писал тут уже, вот например ты хочешь зашифровать некоторые константные данные (ну строки например) и ты хочешь расшифровывать их на стек непосредственно перед использованием (чтобы они как можно меньше времени провели в расшифрованном виде в памяти). Для этого тебе нужно найти все места в коде, где эти данные использовались и вставить туда код для их дештфровки на стек, затем заменить указателем на стек место использование. Как это сделать стабильно, если вспомнить, что даже "интеллектуальные" дизассемблеры (ида, радаре, гидра и тд) тратят существенное время на анализ бинаря и все равно бывает не находят или неправильно определяют все места, где те или иные данные использовались. Потом тебе надо будет вставить код в бинарь, то есть тебе надо будет после вставки кода пересчитать все возможные переходы, релоки и тд, что тоже не решить без хорошего дизассемблера и анализатора.
Так тут проблема в неявных чтениях, когда указатель на константные данные сохраняется, а потом где-то читается уже не напрямую, такое естественно невозможно предсказать. Для лучших результатов нужно вести статический анализ потока данных, завести символическое представление, чтобы уметь хотя бы определять чтения относительно некой базы. Но отличать код от данных не нужно, т.к. данные спокойно лежат в своей константной неисполняемой секции, а вы упомянув эту проблему призвали в тему специалистов высшего ранга, за которым последовало куча оффтопа.
Если подразумевается какая-либо постобработка бинарей после компиляции, то "стабильно" и "профессионально" - это предоставить разработчику сдк,с помощью которого в ехе будут внедрены дополнительные данные, необходимые для постобработки.
Ну спецы всегда генерят кучу оффтопа, на то они и спецы. Про строки это один утрированный пример, который толком нормально не решить. В общем случае, если у тебя в коде существует какой-то указатель в регистре или в переменной на стеке без каких-то хитрых анализов ты не можешь отличить, на что он будет указывать в рантайме, будут это данные или код или что еще. В этом проблема отличать код от данных, это Индий ввел эту проблему давно, так что называть это так - скорее я шутканул, но все же. О хоспаде, вот я об этом в первом же сообщении в этой теме написал, не важно, что это будет там (мап-файлы, метки какие-то и тд), но ты влез и начал что-то загонять про чудесные дизассемблеры, которые ты смог сделать, а другие не смогли. Какая ко мне претензия то?
А еще ты там добавил, что даже с этой инфой гарантий никаких, а профессиональные программисты, добившиеся всего, решают только общие случаи.
А можно тупой вопрос? Но реально не шарю. Зачем отличать код от даты в контексте РЕ файла? Если в нем есть секции и , по условиям задачи, автор файла к нам дружественно настроен (обычно морфят на заказ, это не реверс же в аверлабе) ? Современные компиляторы мешают код с датой в файле?
Незачем. Если ты только не планируешь дропнуть оригинальную секцию из файла после того, как куда-то заморфил ее содержимое. Но можно просто как вмпрот вести учет регионов, из которых ты вырезал то, что мог и сохранять отморфленные куски исключительно внутри этих регионов. Тогда если и есть какие-то данные, на которые в рантайме будут ссылаться каким-то неизвестным науке недетектируемым способом, то они там и останутся и ничего не сломается. В частных случаях (около 99.9% от общего количества)
Тот же вопрос был у меня, для дружественных бинарников естественно незачем, просто некоторые люди пытаются все склонить к одним и тем же темам. На моей памяти лишь однажды был файл в котором константы шли сразу за функцией прямо в одной секции, но не помню что это за архитектура была, по видимому было важно получить маленькое смещение относительно указателя кода.
В дельфовых бинарях это обычное дело; строки и константы, используемые в функции идут сразу после тела функции.
M0rg0t, > Зачем отличать код от даты в контексте РЕ файла? Эта ключевая задача для всего. Невозможно защиту создать для модуля, не определив что за ссылка - код это или данные https://archivevx.net/exelab/f/pages/action=vthread&forum=6&topic=24488&page=0.html По этой причине пересборка бинаря невозможна. Если конструктор найдёт константу, то не известно что с ней делать. Она совпадает с адресным диапазоном модуля и не маркирована релоком. Далее можно только вероятностно определить что это указатель на код. И чем меньше процедура, тем более вероятна ошибка. Так же не на весь код в образе есть ссылки, некоторые вычисляются через смещения. Поэтому самый продвинутый протектор - vmp покрывает не более 10% бинаря, тк не может определить что по ссылкам данные или код, обеспечить покрытие" - термин КК.
galenkane, Данные вообще криптоваться не могут, в смысле частичная распаковка по ходу исполнения. Это ничем не отличается от загрузки из памяти. При передаче указателя на данные в ядерный сервис будет выборка, размер которой не известен(eg: загрузка картинки из ресурса ядром гуя). Поэтому вся секция должна быть в сыром виде, распакована до исполнения.
Если эти данные сишная строка или паскалевская строка, то размер ее всегда известен. Но в общем случае да, поэтому я и предлагаю в самом начале темы морфить на уровне сорсов или промежуточного представления, там размер данных всегда известен.
Rel, В бинаре размер строки не может быть определён. Раз выше спросили можно ли решить теоретически - да, есть метод https://wasm.in/threads/avanguard-the-win32-anti-intrusion-library.33212/page-3#post-408927 - было реализовано практически https://wasm.in/threads/avanguard-the-win32-anti-intrusion-library.33212/page-4#post-408976, но не до рабочего состояния, тк это очень дикий изврат. Основан на том факте, что ядро вначале выполняет проверку сервисных аргументов и сервис можно перезапускать, тем самым последовательно увеличивать размер выборки. Иначе никак это не решается, любой криптор вирта полностью открывает данные перед началом исполнения бинаря и это видит сканер памяти. Да и вручную так выполняется дамп.
Ну если у тебя есть указатель на строку и ты уверен, что это именно указатель на строку, то сишная строка должна иметь на конце нулевой символ, паскалевская строка имеет байт длины в начале строки. Ты можешь зашифровать ее полностью и вставить код, который будет дешифровать ее на стек непосредственно перед использованием, она появится в памяти на стеке в один короткий момент, вероятность, что она будет детектирована сканером памяти сравнительно небольшая. Я вообще не в курсе, сканеры памяти сканят стеки потоков?