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

Тема в разделе "WASM.RESEARCH", создана пользователем alix, 19 окт 2004.

  1. alix

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    У меня такая проблема. К примеру, есть 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. Исходники приложил в архиве, там же и выдранный пи код лежит.







    [​IMG] 1989957843__vb_loader.zip
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Во-первых посмотри в свой p_code.bin, как ты его выдирал, что у тебя вместо нулей (0x0) - пробелы (0x20) :)

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

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    В нужном мне экзешнике, находится алгоритм фрактальной компрессии, написанный когда-то местным Кулибиным.

    К сожалению исходников нет, и координат автора тоже... А я очень хочу использовать его в своей проге.

    Дело упрощает то, что интерфейса как такового нет. Просто в командной строке передается имя файла

    который надо обработать.

    Сначала, я хотел прошить эту прогу в ресурсы, а при запуске копировать во временную папку и от туда

    запускать, а по завершении удалять. Но это слишком примитивно, грубо и некрасиво. И потом,

    любой желающий может востановить этот файл из временой папки и использовать его по своему

    усмотрению. А я не хочу, чтобы алгоритм так просто попал кому-то в руки.

    Поэтому возникла мысль, запускать эту прогу прямо из памяти. Как мне кажется есть 2 пути:

    1. Запускать P-CODE это проги.

    2. Запускать сам EXE.

    Сначала я пытался запускать EXE, копировал его в байтовый массив. Находил AddressOfEntryPoint

    экзешника и делал JMP по этому адресу. Но он не запускался, видимо процесс загрузки EXE так

    просто не описать. И тогда я решил запускать сам P-CODE, тем более, что в проге нет интерфейса

    и ресурсов, и не нужно гемороится с экзешником. Надо лишь только отобразить на адресное

    пространство процесса MSVBVM60.DLL и вызвать ThunRTMain которая запустит виртуальную

    машину VB.
     
  4. bogrus

    bogrus Active Member

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

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    alix

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



    Хотелось бы видеть этот exe, если он маленький.

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

    alix New Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    16
    Адрес:
    Russia
    to Asterix:



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



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

    nice New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    42
    Адрес:
    Russia
    alix

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