У меня такая проблема. К примеру, есть EXE файл скомпилированный на VB6 в P-CODE, но нет исходников. Я бы хотел выдрать его код, и вставить в мое приложение написанное на компилирующем языке. Т.е. вставить скомпилированный P-CODE в свой экзешник... Начав исследовать VB экзешники, я обнаружил, что оказывается P-CODE находится прямо в секции .text после "магической" строчки: VB5!6&* До этой строчки, видимо идут какие-то процедуры инициализации, а за ним уже скомпилированный пользовательский P-CODE. При запуске экзешника вызывается единственная функция ThunRTMain, которая его и интерпретирует. Тогда я решил поступить так, "выдрать" из секции .text весь пи код после VB5!6&*, вставить его в свое приложение, а затем, передать указатель на его первый байт в функцию ThunRTMain из MSVBVM60.DLL Написал небольшое тестовое приложение на PBWIN 7.03, оно загружает VB экзешник в переменную, отыскивает в секции .text строчку VB5!6&*, вырезает идущий следом код в другую переменную, и передает указатель на первый байт этой строки в ThunRTMain. Но, при запуске проги, появляется мессанжбокс от виртуальной машины VB: "Unexpectrd critical error: cant start programm!" Пи код не запускается... Если тут есть спецы по VB экзешникам, подскажите, можно ли выдрать P-CODE из чужого EXE, а потом, запустить полученный бинарник из своей проги? p.s. Исходники приложил в архиве, там же и выдранный пи код лежит. 1989957843__vb_loader.zip
Во-первых посмотри в свой p_code.bin, как ты его выдирал, что у тебя вместо нулей (0x0) - пробелы (0x20) Во-вторых с чего ты взял, что "из секции .text весь пи код после VB5!6&*" этого будет достаточно, а ресурсы (vb иконка), а имена кнопок, форм (они же лежат до VB5!6&*)?
В нужном мне экзешнике, находится алгоритм фрактальной компрессии, написанный когда-то местным Кулибиным. К сожалению исходников нет, и координат автора тоже... А я очень хочу использовать его в своей проге. Дело упрощает то, что интерфейса как такового нет. Просто в командной строке передается имя файла который надо обработать. Сначала, я хотел прошить эту прогу в ресурсы, а при запуске копировать во временную папку и от туда запускать, а по завершении удалять. Но это слишком примитивно, грубо и некрасиво. И потом, любой желающий может востановить этот файл из временой папки и использовать его по своему усмотрению. А я не хочу, чтобы алгоритм так просто попал кому-то в руки. Поэтому возникла мысль, запускать эту прогу прямо из памяти. Как мне кажется есть 2 пути: 1. Запускать P-CODE это проги. 2. Запускать сам EXE. Сначала я пытался запускать EXE, копировал его в байтовый массив. Находил AddressOfEntryPoint экзешника и делал JMP по этому адресу. Но он не запускался, видимо процесс загрузки EXE так просто не описать. И тогда я решил запускать сам P-CODE, тем более, что в проге нет интерфейса и ресурсов, и не нужно гемороится с экзешником. Надо лишь только отобразить на адресное пространство процесса MSVBVM60.DLL и вызвать ThunRTMain которая запустит виртуальную машину VB.
Сомневаюсь, что этим кто-то уже занимался, может проще найти реализацию алгоритма и переписать на vb? А нет, так можешь ещё попробывать выдрать сам алго, а потом использовать как ассемблерную вставку, где-то в сети были примеры для vb. В любом случае, тут ollydbg тебе в помощь, к IDA есть vb скрипты, и здесь в утилитах VBReFormer (его не пробывал, что он может не знаю)
alix > К примеру, есть EXE файл скомпилированный на VB6 в P-CODE Хотелось бы видеть этот exe, если он маленький. Как ты хочешь вставить код, как стартовый код или как процедуру, как сделать второе из p-code я понятия не имею %)
to Asterix: EXE более 100 кбайт, там почти чистый код, без форм и ресурсов. Может ты знаешь, как можно запускать EXE из памяти?