1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Морфинг x86 и x64

Тема в разделе "WASM.BEGINNERS", создана пользователем gato.negro, 28 янв 2021.

  1. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.602
    Rel,

    Рабочая специальность никакого тут значения не имеет. У меня она есть, а у тебя её нет. Без машинки ты не можешь выжить, тк специальности нет никакой.

    За всё время от тебя небыло никаких моторов никаких решений ничего. По факту ты не кодер а троль, но считаешь себя спецом.

    > Ну мне патчить процедуру не нужно

    Я выше и сказал что системныe задачи ты никогда не решал, раз не понимаешь про что речь. Нельзя ими ядерную обработку реализовать, это вывалит в бсод всю систему и отладить такое невозможно, просто системка со скриптами не совместима, там нэйтив.

    Посмотри катю(kite), там сотни примеров где задачи решаются пересборкой.)
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Странная логика, я работаю по специальности и мне норм, выживать без машинки мне и не придется никогда (хотя я и не понял, что такое машинка).

    Я не считаю себя спецом, тк я не бью себя тапком в грудь за какие-то решения, которых никто не видел, не выдумываю термины и тд. Я обычный магл, но все же выкладывал сюда и на хсс "моторы" для морфинга сишечки и плюсов.

    Без понятия что это, и главное зачем мне это.
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.115
    Это довольно распространенное заблуждение, что вершина любой карьерной лестницы - гендир. На самом деле это, конечно же, не так и когда тебя "повышают" с кодера до руководителя отдела, это скорее профессиональная деградация, чем рост :)
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Ну на самом деле я уже мог бы быть выше тимлида, но остаюсь им потому, что эта должность позволяет мне с одной стороны хорошо зарабатывать, а с другой стороны все еще творить в программировании: не только писать код, но и заниматься дизайном архитектуры программных проектов. Я понимаю, что ты и Индий далеки от сферы профессиональной разработки и не шарите в том, чем занимается тимлид, но в чем смысл обсуждать мои должности или мои зарплаты, чтобы меня как то задеть? Я уже добился многого в своей сфере и меряться писюнами не имеет особого смысла.
     
  5. Carnival

    Carnival New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2020
    Сообщения:
    26
    Адрес:
    ::1/128
    Это все очень интересно, но причем ваш карьерный рост в теме о морфинге кода?
    И вы уж определитесь с кем и против кого вы дружите, вы то за авера, то против него, то сретесь с rmn, то на пару с ним троллите инди.
    И вопрос по существу, в каком именно месте вам необходимо уметь отличать код от данных в бинарнике после компилятора?
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Ну не я завел разговор про мою специальность, спроси у Индия этот вопрос или у Рмна. Чего им надо до моей специальности?

    Я дружу со всеми, и с Индием и с Рмном, как и троллю всех. Просто до этого Рмна не чем было троллить, теперь узнал его поближе и понял, что он тоже спец как и Инде.

    Я писал тут уже, вот например ты хочешь зашифровать некоторые константные данные (ну строки например) и ты хочешь расшифровывать их на стек непосредственно перед использованием (чтобы они как можно меньше времени провели в расшифрованном виде в памяти). Для этого тебе нужно найти все места в коде, где эти данные использовались и вставить туда код для их дештфровки на стек, затем заменить указателем на стек место использование. Как это сделать стабильно, если вспомнить, что даже "интеллектуальные" дизассемблеры (ида, радаре, гидра и тд) тратят существенное время на анализ бинаря и все равно бывает не находят или неправильно определяют все места, где те или иные данные использовались. Потом тебе надо будет вставить код в бинарь, то есть тебе надо будет после вставки кода пересчитать все возможные переходы, релоки и тд, что тоже не решить без хорошего дизассемблера и анализатора.
     
  7. Carnival

    Carnival New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2020
    Сообщения:
    26
    Адрес:
    ::1/128
    Так тут проблема в неявных чтениях, когда указатель на константные данные сохраняется, а потом где-то читается уже не напрямую, такое естественно невозможно предсказать. Для лучших результатов нужно вести статический анализ потока данных, завести символическое представление, чтобы уметь хотя бы определять чтения относительно некой базы. Но отличать код от данных не нужно, т.к. данные спокойно лежат в своей константной неисполняемой секции, а вы упомянув эту проблему призвали в тему специалистов высшего ранга, за которым последовало куча оффтопа.
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.115
    Если подразумевается какая-либо постобработка бинарей после компиляции, то "стабильно" и "профессионально" - это предоставить разработчику сдк,с помощью которого в ехе будут внедрены дополнительные данные, необходимые для постобработки.
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Ну спецы всегда генерят кучу оффтопа, на то они и спецы. Про строки это один утрированный пример, который толком нормально не решить. В общем случае, если у тебя в коде существует какой-то указатель в регистре или в переменной на стеке без каких-то хитрых анализов ты не можешь отличить, на что он будет указывать в рантайме, будут это данные или код или что еще. В этом проблема отличать код от данных, это Индий ввел эту проблему давно, так что называть это так - скорее я шутканул, но все же.

    О хоспаде, вот я об этом в первом же сообщении в этой теме написал, не важно, что это будет там (мап-файлы, метки какие-то и тд), но ты влез и начал что-то загонять про чудесные дизассемблеры, которые ты смог сделать, а другие не смогли. Какая ко мне претензия то?
     
  10. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.115
    А еще ты там добавил, что даже с этой инфой гарантий никаких, а профессиональные программисты, добившиеся всего, решают только общие случаи.
     
  11. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.355
    А можно тупой вопрос? Но реально не шарю.
    Зачем отличать код от даты в контексте РЕ файла? Если в нем есть секции и , по условиям задачи, автор файла к нам дружественно настроен (обычно морфят на заказ, это не реверс же в аверлабе) ?
    Современные компиляторы мешают код с датой в файле?
     
  12. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.115
    Незачем. Если ты только не планируешь дропнуть оригинальную секцию из файла после того, как куда-то заморфил ее содержимое. Но можно просто как вмпрот вести учет регионов, из которых ты вырезал то, что мог и сохранять отморфленные куски исключительно внутри этих регионов. Тогда если и есть какие-то данные, на которые в рантайме будут ссылаться каким-то неизвестным науке недетектируемым способом, то они там и останутся и ничего не сломается. В частных случаях (около 99.9% от общего количества) :)
     
    M0rg0t нравится это.
  13. Carnival

    Carnival New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2020
    Сообщения:
    26
    Адрес:
    ::1/128
    Тот же вопрос был у меня, для дружественных бинарников естественно незачем, просто некоторые люди пытаются все склонить к одним и тем же темам.
    На моей памяти лишь однажды был файл в котором константы шли сразу за функцией прямо в одной секции, но не помню что это за архитектура была, по видимому было важно получить маленькое смещение относительно указателя кода.
     
    M0rg0t нравится это.
  14. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.115
    В дельфовых бинарях это обычное дело; строки и константы, используемые в функции идут сразу после тела функции.
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.602
    M0rg0t,

    > Зачем отличать код от даты в контексте РЕ файла?

    Эта ключевая задача для всего. Невозможно защиту создать для модуля, не определив что за ссылка - код это или данные https://archivevx.net/exelab/f/pages/action=vthread&forum=6&topic=24488&page=0.html

    По этой причине пересборка бинаря невозможна. Если конструктор найдёт константу, то не известно что с ней делать. Она совпадает с адресным диапазоном модуля и не маркирована релоком. Далее можно только вероятностно определить что это указатель на код. И чем меньше процедура, тем более вероятна ошибка. Так же не на весь код в образе есть ссылки, некоторые вычисляются через смещения. Поэтому самый продвинутый протектор - vmp покрывает не более 10% бинаря, тк не может определить что по ссылкам данные или код, обеспечить покрытие" - термин КК.
     
  16. galenkane

    galenkane Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    218
    в теории грамотно закидывать все данные в одну секцию для vmp?
     
  17. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.602
    galenkane,

    Данные вообще криптоваться не могут, в смысле частичная распаковка по ходу исполнения. Это ничем не отличается от загрузки из памяти. При передаче указателя на данные в ядерный сервис будет выборка, размер которой не известен(eg: загрузка картинки из ресурса ядром гуя). Поэтому вся секция должна быть в сыром виде, распакована до исполнения.
     
  18. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Если эти данные сишная строка или паскалевская строка, то размер ее всегда известен. Но в общем случае да, поэтому я и предлагаю в самом начале темы морфить на уровне сорсов или промежуточного представления, там размер данных всегда известен.
     
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.602
    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, но не до рабочего состояния, тк это очень дикий изврат. Основан на том факте, что ядро вначале выполняет проверку сервисных аргументов и сервис можно перезапускать, тем самым последовательно увеличивать размер выборки.

    Иначе никак это не решается, любой криптор вирта полностью открывает данные перед началом исполнения бинаря и это видит сканер памяти. Да и вручную так выполняется дамп.
     
  20. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Ну если у тебя есть указатель на строку и ты уверен, что это именно указатель на строку, то сишная строка должна иметь на конце нулевой символ, паскалевская строка имеет байт длины в начале строки. Ты можешь зашифровать ее полностью и вставить код, который будет дешифровать ее на стек непосредственно перед использованием, она появится в памяти на стеке в один короткий момент, вероятность, что она будет детектирована сканером памяти сравнительно небольшая. Я вообще не в курсе, сканеры памяти сканят стеки потоков?