Что
такое MDE файл? Это типа обыкновенная Microsoft Jet Database + блок, скомпилированых
в pcode, vb скриптов. Что же нам мешает его декомпилировать? - А ничего не
мешает. VBA pcode практически ничем не отличается от VB. Просто для сама
виртуальная машина лежит в VBA332.DLL. В этой VBA332.DLL точно также как
и в msvbvmXX.dll есть секция Engine. Машина эта точно также юзает ESI как
EIP для псевдокода. И естественно процедуры и методы вызываются соответственно
через ProcCallEngine и MethCallEngine. А проблема заключается в том, что
нужно на что-то зацепиться чтобы найти нужную функцию в этом MDE файле, это
вам не EXE, тут таблицы процедур хз-куда загружаются. Вызовы процедур можно
легко отлавливать по bpx ProcCallEngine. Вот только потом приходится смотреть
байт коды в памяти, потом писать их на бумажку, а потом в Hex редакторе искать,
где же это в файле. Байткоды слава богу уже люди и без нас расписали. Так
нужно бы написать прогу для декомпиляции этих байт кодов в их названия. Все
говорят типа "такую прогу любой дурак написать может", а вот почему-то дураков
за столько лет так и не нашлось. Вот выступлю в роли такого дурачка :)
Лежит она вместе с исходниками на Delphi 6 вот тут
Что она может? Может просто переводить код указаной длины по словарю байткодов с нужной позиции в указаном файле :)
Словарь байткодов лежит в fullexcodes.mdb поэтому каждый по своему желанию
может поправить эту базу. Байткоды VBA и VB отличаются длинами некоторых
байткодов так что не стоит запихивать в прогу VB программы, предварительно
не поправив базу байткодов. Байткоды в базе брались чужие(т.е. это не я их
длины и названия сочинял), поэтому до конца это все не проверено. Я протестил
сколько мог, в принципе нормально "декомпилирует". Названия, правда, у команд
идиотские. Надо будет попереименовывать. В общем это самый не профессиональный
инструмент, который можно себе только представить (зато с исходниками :)).
Но главное то, что он работает. Позволяет находить такие милые сердцу вещи
как условные переходы, тут они называются "branch". Дальше опять же приходится
в айс ломиться и проверять, это оно или нет.
Прога работает медленно из-за того что SQL запросы работают медленно
(ну мне в лом было делать все вручную, вот я и запряг это все в MDB). Писалось
все для себя любимого, так что предложения принимаю, а критику - нет :) Если
б знать структуру всей этой гадости то можно было бы еще и получать имена
импортируемых функций. Еще можно было бы поразбираться как оно к строкам
обращается... Но инфы как обычно нет :(
Еще знать бы структуру Microsoft Jet Database, а то только догадки... догадки... |