Как я могу разбить два бинарных файла x86 на уровне кода сборки?


43

Я ищу инструмент, такой как Beyond Compare, meld, kdiff и т. Д., Который можно использовать для сравнения двух дизассемблированных двоичных файлов. Я знаю, что есть двоичное (шестнадцатеричное) сравнение, которое показывает разницу по шестнадцатеричным значениям, но я ищу что-то, что показывает op-коды и аргументы.

Кто-нибудь знает что-то, что может помочь?

  0

хорошо, Вы всегда можете получить список операционных кодов \ аргументы из дизассемблера и сравнить их как два текстовых списков?Или даже построить скрипт python для Immunity Debugger :) 21 апр. 132013-04-21 14:27:55

  0

Почему diff/meld/kdiff/... при разборке не является удовлетворительным? 21 апр. 132013-04-21 14:27:57

+1

@ Mellowcandle +1 для упоминания kdiff. Это отличный инструмент для быстрого разграничения. 22 апр. 132013-04-22 02:24:47

+2

@ Gilles: см. [Мои вопросы и ответы здесь] (http://reverseengineering.stackexchange.com/questions/1902). 23 апр. 132013-04-23 00:12:06

26

Если я ошибаюсь, похоже, что вы ищете бинарный инструмент. Ниже приведены некоторые хорошие варианты. Для этого требуется IDA Pro.

  1. DarunGrim (с открытым исходным кодом) DarunGrim

  2. BinDiff (коммерческий) BinDiff

  3. eEye Binary Diffing Suite (использование archive.org загрузить установщик)

  0

Отлично. Именно то, что я искал 21 апр. 132013-04-21 16:04:56

+2

eEye Binary Diffing Suite является открытым исходным кодом, а часть его - DarunGrim, в соответствии с предоставленной вами ссылкой 21 апр. 132013-04-21 17:16:28

+1

, возможно, стоит упомянуть, что все они работают поверх IDA, а не автономно. 22 апр. 132013-04-22 09:06:24

+3

Также важно: [как работает BinDiff] (http://reverseengineering.stackexchange.com/questions/1475/how-does-bindiff-work/1511#1511) 22 апр. 132013-04-22 17:58:46


10

Также есть Turbodiff, это плагин IDA pro. Еще не использовали его, хотя я ничего не могу сказать о качестве инструмента.

  0

Знаете ли вы, что это работает с IDA 6.x ? Они перечисляют только поддержку IDA 4.9 и 5.x. 21 апр. 132013-04-21 20:04:08

+2

Turbodiff заброшен и не работает с новейшим IDA. 22 апр. 132013-04-22 07:52:19

  0

Пожалуйста, добавьте краткое описание плагина. Ответы только по ссылкам не считаются ответами. 07 май. 132013-05-07 14:35:22

  0

Это бинарный плагин для IDA Pro. Я не думаю, что в этом ответе отсутствует что-то актуальное, нет? 07 май. 132013-05-07 14:51:48

  0

@newgre: это в конечном итоге то же самое, что и PatchDiff2? 08 авг. 132013-08-08 23:40:17


9

Я бы порекомендовал PatchDiff2, если вы используете IDA Pro.

Вот описание:

PatchDiff2 плагин для dissassembler IDA, который может проанализировать два МБР файлы и найти различия между обоими. PatchDiff2 является бесплатным и полностью интегрируется с последней версией IDA (6.1) в Windows и Linux. Плагин может выполнять следующие задачи:

  • Отобразите список идентичных функций
  • Отображение списка соответствующих функций
  • Показать список несогласованных функций (с CRC)
  • отображения графика потока для идентичных и согласованных функций

Основная цель этого плагина - быть быстрым и давать точные результаты при работе с исправлением безопасности или исправлением. Поэтому этот инструмент не предназначен для поиска похожих функций между двумя различными программами. Patchdiff2 поддерживает все процессоры, с которыми может работать IDA, и доступен в двух версиях: 32-битном и 64-битном.

Чтобы использовать все, что вам нужно сделать, это:

Распакуйте два patch2diff молнии и в нем будет две папки, проведение двух файлов для Linux и Windows, просто скопируйте patchdiff2.p64 и patchdiff2.plw к вашему плагины каталог находится в C: \ Program Files \ IDA Pro Directory \ Plugins \

  • Откройте исполняемые файлы, которые вы хотите быть и сравнить при сохранить их как .idb (по умолчанию).
  • Открыть.idb файла (я заметил, что он не сработает, когда он просто отличает exe), а на вкладке IDA View-A перейдите в Edit down to plugins, и вы увидите PatchDiff2, просто нажмите на него и выберите вторичный .idb, который хотите сравнить.

Предупреждение. Требуется некоторое время, и МАР станет невосприимчивым. В итоге у вас будет несколько вкладок, совпадающие функции, непревзойденные функции, идентичные функции.

+3

Пожалуйста, добавьте краткое описание плагина. Ответы только по ссылкам не считаются ответами. 07 май. 132013-05-07 14:34:57


18

Вы также можете попробовать radiff2 (который не требует IDA;)), который является инструментом из инструментария radare. Он поддерживает delta diffing (-d), graphdiff (-g) и множество связанных положительных эффектов.


6

Я большой поклонник маршрута kdiff, потому что он быстрый и чистый. Примечание. Я использую diffing для написания подписи на вредоносных программах. В большинстве случаев мне нужно просто визуализировать различные инструкции. Если вам нужно копать глубже, пройдите по маршруту BinDiff или DarunGrim, как упоминал Мик.

Чтобы использовать kdiff для разностных двоичных файлов, вам понадобится вывод разборки, генерируемый IDA. Следующий сценарий можно использовать для создания вывода сборки для всех исполняемых файлов в рабочем каталоге.

import os 
import subprocess 
import glob 
paths = glob.glob("*.exe") 
ida_path = os.path.join(os.environ['PROGRAMFILES'], "IDA", "idaw.exe") 

for file_path in paths: 
    subprocess.call([ida_path, "-B", file_path]) 

Выполнение сценария.

C:\Documents and Settings\Administrator\Desktop\diff\python make-asm.py 

Thank you for using IDA. Have a nice day! 

C:\Documents and Settings\Administrator\Desktop\diff>dir 
Directory of C:\Documents and Settings\Administrator\Desktop\diff 

10/25/2013 11:16 AM <DIR>   . 
10/25/2013 11:16 AM <DIR>   .. 
10/25/2013 11:16 AM   40,604 a.asm 
10/24/2013 08:35 AM    9,938 a.exe 
10/25/2013 11:16 AM   368,957 a.idb 
10/25/2013 11:16 AM   40,657 b.asm 
10/24/2013 08:35 AM    9,969 b.exe 
10/25/2013 11:16 AM   368,957 b.idb 
10/25/2013 11:15 AM    218 make-asm.py 

Выберите два файла .asm, щелкните правой кнопкой мыши, Kdiff, Compare. Хороший и простой выход.

r


8

Существуют различные большие альтернативы здесь. Тем не менее, все они кажутся неподобающими. Инструментом, который я рекомендую вам, является Diaphora https://github.com/joxeankoret/diaphora (Отказ от ответственности: я автор). Является чистым плагином Python для IDA Pro для выполнения различной программы, является единственным, который может импортировать/экспортировать структуры, перечисления и т. Д. ..., единственный, который использует декомпилятор Hex-Rays и, что более интересно, это поддерживается: последний раз, когда я совершил изменение, на прошлой неделе.

Некоторые скриншоты:

MS015-034 Определение различий: enter image description here

Определение различий в псевдо-код (MS015-050): enter image description here

MS015-050 Определение различий: enter image description here

  0

Отличные новости. Спасибо чувак! 01 июл. 152015-07-01 18:35:00


3

Другой вы можете попробовать: Relyze(Коммерческая, автономная Windows des приложение ktop), который поддерживает двоичную разницу. Он сопоставляет функции между двумя двоичными файлами Windows и дает вам список всех равных, измененных, удаленных и добавленных функций вместе с процентным значением разницы, чтобы вы могли видеть, насколько сильно изменены любые две согласованные функции.

GUI отображает согласованные функции с помощью интерактивных графиков, чтобы вы могли перемещаться по ним и видеть изменения. Эти два графика могут синхронизироваться при навигации, поэтому нажатие на команду на одном графике выберет согласованную инструкцию, если таковая имеется, на другом графике.

Binary Diffing with Relyze