То есть это код, который на некотором этапе интерпретируется как данные. Является ли он кодом - вопрос скорее для размышления долгими вечерами у камина.
Да. Эти данные используются для динамического построения кода, там 0x11111111 заменяется на нужный адрес. По логике rmn - это код, т.к. содержит корректный cfg; по сути это и есть код, но его нельзя представлять как код (для дальнейшего криптования к примеру), т.к. он используется в качестве данных (к примеру там по определенным смещениям будут записаны актуальные адреса и т.п.).
Почему нельзя? В каком контексте нельзя? То, что эти данные являются кодом - самая точная их характеристика. Если не заниматься теоретическими размышлениями о том, как найти ОЕР накрытой протектором программы статическим анализом, а действовать в контексте любой практической задачи, то можно смело определиться с тем, считать это кодом или нет.
Критерий первый отличия кода от данных - валид инструкции и их не наложение, тоесть не может быть ветвления не на начало инструкции, уже описанной в cf. Чем меньше размер данных, тем больше вероятность ошибки при статик анализе. IDA довольно кривой анализер куда глючней той же олли, тупит на любом бинаре даже при наличии дебаг символов. Но смысл то не в этом, а в покрытии - если собрать все указатели и ошибки анализа по ним, то пересобрать образ рабочим не получится со 100% вероятностью. Помимо проблемы отличия кода есть вторая по размеру данных. Так что увы критерий распаковки по AI сработает на всём. Где слон кстати, в депресняк впал ?
Нет. По моей логике, если указатель на эту кашу получен из rtti, то ты точно знаешь, что это. А анализировать cfg надо в тех случаях, когда в коде есть что-то типа mov eax, offset dword_12345678, и нет никакой дополнительной инфы, как интерпретировать этот указатель.
Нельзя потому что программа использует эти данные и считает их данными, а не кодом. Этот указатель получен не из rtti, а как раз из случая который ты описал: LEA ESI, [ECX + 0FA9B470] - как интерпретировать этот указатель? Анализируя cfg приходим к выводу что это код, но это данные.
Без контекста все это философские размышления над дилеммой Папы Карло: был он музыкантом или мускульным приводом для шарманки? С одной стороны он только ручку крутил, с другой - ритм, гармония и мелодия - все формальные признаки на месте.
Ну если ты собрался к примеру морфить код, то ты не можешь морфить этот код не отличив данные от кода. Ну и по факту это данные, а не код. Как минимум на эти данные никогда не будет передано управление.
Вот в этом контексте нежелательно считать это кодом. А если твоя задача реверсить саму прогу, в которой такое творится, лучше это понимать как код.
Не совсем согласен, есть декомпиляторы вполне приличные для VB6, если P - код то и вообще отлаживать обычными средствами нет смысла, увязните, но декомпили норм справляются, причем тут Ида и Оля, если для этого есть вполне конкретные инструменты, например тот же VB Decompiler? Да и вообще рантайм msvbvm6 давно расковыряли - ему 23 года уже, хоть и не документирован
Нет, это ты получил его не из ртти, а тыкая в рандомные инструкции в оллидебагере. Продолжайте заниматься статик анализом в том же духе, лол Еще раз: в вб и дельфи прогах столько метаинфы, что исходник восстановить можно, не то, что назначение какого-то адреса установить.
Не знаю, я не использовал VB Decompiler, какой у него выхлоп - понятия не имею. Видел пару раз люди пробовали, но там мрак был. Нативный код отлично отлаживается под Олькой. Где расковыряли? МБ какие-то приватные тулзы, я не в курсе. Но то что в паблике полно неточных/частичных описаний структур, почти нет инфы о недокументированных функциях - вот с этим я знаком. Ты читал что я тебе писал? Прочитай еще раз. При чем тут вб/дельфи проги? --- Сообщение объединено, 28 фев 2021 --- Да нормально отлаживается, даже есть таблица опкодов в паблике (правда кривая и неполная).
Ну как бы не приватные совсем, но там и ковырять по идее нечего. За 23 года по любому всё есть, сам когда то углублялся в вирт машинку VB6, но наработок не сохранилось, думаю найти за 23 года существования можно где нить. Я сам в 98г начинал на нем высокоуровневые софты писать с гуями, имхо там нет проблем с зависимостями, если ocх сторонние не юзать и можно просто на коленке гуй набросать. Но предпочитал делать exe на нём, а функционал на сях в виде длл. К сожалению VB6 не держит многопоточность совсем, не считая сабклассинга, который тоже не то. Но я умудрялся линкер к нему приворачивать от сишки и даже длл на нем писал, но это изврат.
Ну это только догадки. По факту толком ничего нет. А по какому-нибудь VBA6.dll вообще инфы нет. Я недавно делал патч для парсера кода, инфы - 0, все реверсил с нуля сам. А в чем проблема с зависимостями? Любой нормальный софт юзает зависимости, в этом нет ничего плохого. DLL для этого и создавали, для многократно используемого кода. Держит. Если ты про GWL_WNDPROC то при чем тут многопоточность? Линкер там и так от студии стоит по дефолту. DLL пишутся также по дефолту.
- докажите, что VB6 держит многопоточность дайте семпл с CreateThread )))))) - там линкер можно ставить любой, который поддерживает соответствующие объектники угу, ну - ну, потом рантаймы с собой возить? если виртушка VB6 между прочим во всех виндах в комплекте идёт, и кстати причем тут вот это? ->> Вы видимо попутали с msvbvm60.dll
Не переживай, просто добавь его в игнор, с ним бесполезно спорить, он как Инде, только унылый: не шарить и спорить - его основная задача на форуме. Хз, я видел какой-то платный декомпиль, но он не справлялся нормально ни с одной малварью на вб6, семплы которой у меня были. Кстати аверы тоже не очень умеют с вб6 п-кодом работать, судя по всему.
Rel, я ему в лику не собирался писать. 1. Аверы раскручивают пи -код 2. декомпили которые Вы Rel видели небось паблик, а не платные версии отнюдь P.S: да длоя школоло VB6 - самое то, и всякие .NET поделки тем более, кудаж Вам до асма и действительно низкоуровневого кодинга (тем более системного, со знанием именно того к чему так все стремяться, но мозгов не хватает). P.P.S: С Инде сравнение - спасибо, польщён. Но мы с разных позиций с ним работаем. У меня опыта больше в реальных релизах, у него теорий, идей и знаний.
ActiveX EXE - это стандартный путь, без всяких заморочек. Создал объект - он живет в своем потоке. Можно сделать и с CreateThread, но тут будут ограничения, т.к. необходимо инициализировать правильно все. Также есть специальные модули которые позволяют создавать потоки произвольно, которые сами инициализируют все что нужно. Более того я писал такой код который копируется в память другого процесса и там работает. В общем на нем можно делать довольно низкоуровневые вещи и многопоточность уже давно не проблема. Ну да, т.к. родной линкер (от 6 студии) неправильно работает в некоторых нестандартных сценариях. Да не, я не про рантаймы которые по дефолту, а про OCX. OCX/DLL - одно и тоже по сути. Я писал о зависимостях на пост >>имхо там нет проблем с зависимостями, если ocх сторонние не юзать и можно просто на коленке гуй набросать Не. vba6/msvbvm60 скомпилированы из одних и тех же исходников, только VBA6 используется при написании кода под IDE (там есть к примеру парсер кода). По сути там много кода дублировано. Я писал проект который патчит VBA6 рантайм и позволяет юзать CDECL функции из VB. В общем если интересно. --- Сообщение объединено, 28 фев 2021 --- Я сужу вот по этому выхлопу. Я из exe в ольке код сделал почти один в один. Да ладно, есть пара инлайн асмов для VB6.
Я не о тебе говорил, а об rmn вообще-то. Всю жизнь стремился розетки ставить, да-да. Хз, я не могу посмотреть тамошние скриншоты без регистрации.