· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Вопрос по "ThunRTMain" из MSVBVM60.DLL или пересадка кода между экзешниками.

Посл.отвђт Сообщенiе


Дата: Окт 19, 2004 16:22:38

У меня такая проблема. К примеру, есть 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


Дата: Окт 19, 2004 17:34:32

Во-первых посмотри в свой p_code.bin, как ты его выдирал, что у тебя вместо нулей (0x0) - пробелы (0x20) :)
Во-вторых с чего ты взял, что "из секции .text весь пи код после VB5!6&*" этого будет достаточно, а ресурсы (vb иконка), а имена кнопок, форм (они же лежат до VB5!6&*)?


Дата: Окт 20, 2004 10:16:23

В нужном мне экзешнике, находится алгоритм фрактальной компрессии, написанный когда-то местным Кулибиным.
К сожалению исходников нет, и координат автора тоже... А я очень хочу использовать его в своей проге.
Дело упрощает то, что интерфейса как такового нет. Просто в командной строке передается имя файла
который надо обработать.
Сначала, я хотел прошить эту прогу в ресурсы, а при запуске копировать во временную папку и от туда
запускать, а по завершении удалять. Но это слишком примитивно, грубо и некрасиво. И потом,
любой желающий может востановить этот файл из временой папки и использовать его по своему
усмотрению. А я не хочу, чтобы алгоритм так просто попал кому-то в руки.
Поэтому возникла мысль, запускать эту прогу прямо из памяти. Как мне кажется есть 2 пути:
1. Запускать P-CODE это проги.
2. Запускать сам EXE.
Сначала я пытался запускать EXE, копировал его в байтовый массив. Находил AddressOfEntryPoint
экзешника и делал JMP по этому адресу. Но он не запускался, видимо процесс загрузки EXE так
просто не описать. И тогда я решил запускать сам P-CODE, тем более, что в проге нет интерфейса
и ресурсов, и не нужно гемороится с экзешником. Надо лишь только отобразить на адресное
пространство процесса MSVBVM60.DLL и вызвать ThunRTMain которая запустит виртуальную
машину VB.


Дата: Окт 20, 2004 11:57:18

Сомневаюсь, что этим кто-то уже занимался, может проще найти реализацию алгоритма и переписать на vb? А нет, так можешь ещё попробывать выдрать сам алго, а потом использовать как ассемблерную вставку, где-то в сети были примеры для vb. В любом случае, тут ollydbg тебе в помощь, к IDA есть vb скрипты, и здесь в утилитах VBReFormer (его не пробывал, что он может не знаю)


Дата: Окт 20, 2004 12:51:43

alix
> К примеру, есть EXE файл скомпилированный на VB6 в P-CODE

Хотелось бы видеть этот exe, если он маленький.
Как ты хочешь вставить код, как стартовый код или как процедуру, как сделать второе из p-code я понятия не имею %)


Дата: Окт 20, 2004 13:04:32

to Asterix:

EXE более 100 кбайт, там почти чистый код, без форм и ресурсов.

Может ты знаешь, как можно запускать EXE из памяти?


Дата: Окт 21, 2004 08:00:18

alix
Попробуй обратиться к DrGolova, возможно он тебе и востановит алгоритм...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.122