Разборка с Python - никакое легкое решение?

Я пытаюсь создать сценарий Python, который демонтирует двоичный файл (Windows exe, чтобы быть точным) и проанализирует его код. Мне нужна способность взять определенный буфер и извлечь своего рода структуру, содержащую информацию об инструкциях в нем.

Я работал с libdisasm в C прежде, и я нашел, что это - интерфейс, довольно интуитивный и удобный. Проблема, ее интерфейс Python доступен только через БОЛЬШОЙ ГЛОТОК, и я не могу заставить это компилировать правильно в соответствии с Windows.

В аспекте доступности diStorm обеспечивает хороший интерфейс out-of-the-box, но он обеспечивает только Мнемосхему каждой инструкции и не двоичную структуру с перечислениями, определяющими тип инструкции и что нет. Это довольно неудобно для моей цели и потребует большого количества из того, что я рассматриваю как проведенное время, перенося интерфейс, чтобы заставить ее соответствовать моим потребностям.

Я также посмотрел на BeaEngine, который действительно на самом деле обеспечивает вывод, в котором я нуждаюсь, структура с двоичной информацией относительно каждой инструкции, но ее интерфейс действительно нечетен и парадоксален, и он отказывает в значительной степени немедленно при предоставлении неправильные аргументы. Вид CTypes катастрофических отказов ultimate-death-to-your-python.

Так, я был бы рад услышать о других решениях, которые являются немного менее трудоемкими, чем бездельничание с djgcc или mingw для создания ПОТЯНУТОГО libdisasm или записи обертки ООП для diStorm. Если у кого-либо есть некоторое руководство относительно того, как скомпилировать ПОТЯНУТЫЙ libdisasm, или еще лучше, скомпилированный двоичный файл (pyd или dll+py), я хотел бы слышать / его.:)

Спасибо вперед.

7
задан Abc4599 7 February 2010 в 13:02
поделиться

3 ответа

Что ж, после долгого вмешательства мне удалось скомпилировать SWIGed libdisasm! К сожалению, кажется, что при неправильном (а иногда и правильном) использовании python дает сбой. Как я это сделал:

  1. Я скомпилировал libdisasm.lib с помощью Visual Studio 6, единственное, что вам для этого понадобится, - это исходный код той версии libdisasm, которую вы используете, а также stdint.h и inttypes.h ( Версия, совместимая с Visual C ++, погуглите).
  2. Я подключил данный файл libdisasm_oop.i с помощью следующей командной строки

    swig -python -shadow -o x86disasm_wrap.c -outdir. libdisasm_oop.i

  3. Используется Cygwin для запуска ./configure в корневом каталоге libdisasm. Единственное, что вы получите из этого, это config.h

  4. . Затем я создал новый проект DLL, добавил к нему x86disasm_wrap.c, добавил папки c: \ PythonXX \ libs и c: \ PythonXX \ Include к соответствующим переменным. , установите значение Release configuration (важно, либо это, либо #undef _DEBUG перед включением python.h). Кроме того, есть вероятность, что вам потребуется исправить путь к config.h.

  5. Скомпилировал проект DLL и назвал выходной файл _x86disasm.dll. Поместите его в ту же папку, что и созданный SWIG файл x86disasm.py, и все готово.

Есть предложения по поводу других, менее аварийных библиотек disasm для Python?

2
ответ дан 7 December 2019 в 07:45
поделиться

Вы можете попробовать использовать ctypes для непосредственного взаимодействия с libdisasm вместо прохождения через уровень SWIG. Это может занять больше времени на разработку, но, AFAIK, вы должны иметь доступ к базовым функциям с помощью ctypes.

2
ответ дан 7 December 2019 в 07:45
поделиться

Я рекомендую вам посмотреть на библиотеку дизассемблирования Pym, которая также является бэкендом для онлайн дизассемблера Pym.

2
ответ дан 7 December 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: