Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
idahunt — idahunt is a framework to analyze binaries with IDA Pro and hunt for things in IDA Pro | Kitploit
Инструменты/GitHubGitHub/nccgroup/idahunt
Embedded Systems SecurityVulnerability AnalysisReverse EngineeringScripting & AutomationMalware AnalysisBinary AnalysisFirmware Analysis
GitHubnccgroup/idahunt

idahunt

idahunt is a framework to analyze binaries with IDA Pro and hunt for things in IDA Pro

Репозиторий
393612 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

  • Обзор
    • Требования
    • Возможности
    • Скриптинг
  • Использование
    • Симуляция без выполнения
    • Первоначальный анализ
    • Выполнение IDA Python скрипта
    • Диффинг бинарных файлов
      • Требования
      • Первоначальный анализ
      • Диффинг файлов
      • Диффинг функции
    • Фильтры
      • Определение архитектуры
      • Специфичные для целевых устройств
  • Известные проекты, использующие idahunt

Обзор

idahunt — это фреймворк для анализа бинарных файлов с помощью IDA Pro и поиска различных элементов в IDA Pro. Это инструмент командной строки для рекурсивного анализа всех исполняемых файлов из заданной папки. Он запускает IDA в фоновом режиме, поэтому вам не нужно открывать каждый файл вручную. Он поддерживает выполнение внешних IDA Python скриптов.

Требования

  • Только Python3 (за исключением IDA Python скриптов, которые могут быть на Python2/Python3 в зависимости от вашей настройки IDA)
  • IDA Pro
  • Windows, Linux, OS X

Возможности

  • Указывать, сколько экземпляров IDA запускать одновременно
  • Автоматизировать создание IDB для нескольких исполняемых файлов
  • Выполнять IDA Python скрипты для нескольких исполняемых файлов
  • Открывать несколько существующих IDB
  • Поддерживать любой формат бинарных файлов (raw assembly/PE/ELF/MACH-O/и т.д.), поддерживаемый IDA
  • (Необязательно) Включать IDA Python хелперы. Вы можете использовать их для простого создания собственных IDA Python скриптов или использовать любую другую IDA Python библиотеку, например sark или bip, и многие другие.

Полезные примеры включают (неисчерпывающий список):

  • Анализ обновлений Microsoft Patch Tuesday
  • Анализ вредоносных программ одного семейства
  • Анализ нескольких версий одного и того же ПО
  • Анализ множества бинарных файлов (UEFI, HP iLO, маршрутизаторы Cisco IOS, межсетевые экраны Cisco ASA и т. д.)

Скриптинг

Возможности IDA Python скриптов безграничны. Вы можете импортировать любой существующий IDA Python скрипт или создать свой собственный. Некоторые примеры:

  • Переименовывать функции на основе отладочных строк
  • Расшифровывать строки (например, в вредоносных программах)
  • Искать один и тот же символ в нескольких версиях (с использованием эвристик)
  • Искать ROP-гаджеты
  • Переносить восстановленные имена функций / символов из одной версии в другую с помощью таких инструментов, как diaphora
  • И т. д.

Использование

  • idahunt.py: основной инструмент для анализа исполняемых файлов
  • filters/: содержит базовые фильтры для определения, какие файлы во входной директории анализировать с помощью IDA
    • filters/default.py: базовый фильтр по умолчанию, не фильтрующий ничего и используемый по умолчанию
    • filters/ciscoasa.py: полезен для анализа образов Cisco ASA Firewall
    • filters/hpilo.py: полезен для анализа образов HP iLO
    • filters/names.py: базовый фильтр по имени, длине имени или расширению
  • script_template.py: содержит IDA Python скрипт hello world
root@kitploit:~
C:\idahunt> C:\Python37-x64\python.exe .\idahunt.py -h
usage: idahunt.py [-h] [--inputdir INPUTDIR] [--analyse] [--open]
                  [--ida-args IDA_ARGS] [--scripts SCRIPTS [SCRIPTS ...]]
                  [--filter FILTER] [--cleanup] [--temp-cleanup] [--verbose]
                  [--max-ida MAX_IDA] [--list-only] [--version IDA_VERSION]

optional arguments:
  -h, --help            show this help message and exit
  --inputdir INPUTDIR   Input folder to search for files
  --analyse, --analyze  analyse all files i.e. create .idb for all of them
  --open                open all files into IDA (debug only)
  --ida-args IDA_ARGS   Additional arguments to pass to IDA (e.g.
                        -p<processor> -i<entry_point> -b<load_addr>)
  --scripts SCRIPTS [SCRIPTS ...]
                        List of IDA Python scripts to execute in this order
  --filter FILTER       External python script with optional arguments
                        defining a filter for the names of the files to
                        analyse. See filters/names.py for example
  --cleanup             Cleanup i.e. remove .asm files that we don't need
  --temp-cleanup        Cleanup temporary database files i.e. remove .id0,
                        .id1, .id2, .nam, .dmp files if IDA Pro crashed and
                        did not delete them
  --verbose             be more verbose to debug script
  --max-ida MAX_IDA     Maximum number of instances of IDA to run at a time
                        (default: 10)
  --list-only           List only what files would be handled without
                        executing IDA
  --version IDA_VERSION
                        Override IDA version (e.g. "7.5"). This is used to
                        find the path of IDA on Windows.

Симуляция без выполнения

Вы можете использовать --list-only с любой командной строкой, чтобы просто вывести список того, что инструмент сделал бы, не выполняя этого.

root@kitploit:~
C:\idahunt>idahunt.py --inputdir C:\re --analyse --filter "filters\names.py -a 32 -v" --list-only
[idahunt] Simulating only...
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\re\cves\cve-2014-4076.dll
[idahunt] Analysing C:\re\cves\cve-2014-4076.exe
[idahunt] Analysing C:\re\DownloadExecute.exe
[idahunt] Analysing C:\re\ReverseShell.exe

Первоначальный анализ

Здесь мы запускаем первоначальный анализ. Он завершается через несколько секунд:

root@kitploit:~
C:\idahunt>idahunt.py --inputdir C:\re --analyse --filter "filters\names.py -a 32 -v"
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\re\cves\cve-2014-4076.dll
[idahunt] Analysing C:\re\cves\cve-2014-4076.exe
[idahunt] Analysing C:\re\DownloadExecute.exe
[idahunt] Analysing C:\re\ReverseShell.exe
[idahunt] Waiting on remaining 4 IDA instances

Здесь мы удаляем временные .asm файлы, созданные первоначальным анализом:

root@kitploit:~
C:\idahunt>idahunt.py --inputdir C:\re --cleanup
[idahunt] Deleting C:\re\cves\cve-2014-4076.asm
[idahunt] Deleting C:\re\DownloadExecute.asm
[idahunt] Deleting C:\re\ReverseShell.asm

Мы можем видеть сгенерированные .idb, а также некоторые .log файлы, содержащие окно вывода IDA Pro.

root@kitploit:~
C:\idahunt>tree /f C:\re
Folder PATH listing
Volume serial number is XXXX-XXXX
C:\RE
│   DownloadExecute.exe
│   DownloadExecute.idb
│   DownloadExecute.log
│   ReverseShell.exe
│   ReverseShell.idb
│   ReverseShell.log
│
└───cves
        cve-2014-4076.dll
        cve-2014-4076.exe
        cve-2014-4076.idb
        cve-2014-4076.log

Выполнение IDA Python скрипта

Здесь мы выполняем базовый IDA Python скрипт, который выводит [script_template] I execute in IDA, yay! в окно вывода IDA Pro.

root@kitploit:~
C:\idahunt>idahunt.py --inputdir C:\re --filter "filters\names.py -a 32 -v" --scripts C:\idahunt\script_template.py
[idahunt] EXECUTE SCRIPTS
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\cves\cve-2014-4076.dll
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\cves\cve-2014-4076.exe
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\DownloadExecute.exe
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\ReverseShell.exe
[idahunt] Waiting on remaining 4 IDA instances

Поскольку результат сохраняется в .log файле, мы можем проверить, что он успешно выполнился:

root@kitploit:~
Autoanalysis subsystem has been initialized.
Database for file 'ReverseShell.exe' has been loaded.
Compiling file 'C:\Program Files (x86)\IDA 6.95\idc\ida.idc'...
Executing function 'main'...
[script_template] I execute in IDA, yay!

Диффинг бинарных файлов

idahunt отлично интегрируется с diaphora для выполнения диффинга бинарных файлов, начиная с этого PR.

Требования

Вам нужна иерархия папок с разными версиями одного и того же файла, например:

root@kitploit:~
C:\> tree C:\tests\ /F
C:\tests
├───patch
│       tm.sys
│
└───vuln
        tm.sys

Первоначальный анализ

Если вы ещё не сделали этого, необходимо выполнить первоначальный анализ IDA для создания idb.

root@kitploit:~
C:\idahunt> python idahunt.py --inputdir C:\tests\ --analyse --verbose
[idahunt] IDA32 = C:\Program Files\IDA Core 8.1\ida.exe
[idahunt] IDA64 = C:\Program Files\IDA Core 8.1\ida64.exe
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\tests\patch\tm.sys
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -B -oC:\tests\patch\tm.i64 -LC:\tests\patch\tm.log C:\tests\patch\tm.sys
[idahunt] Analysing C:\tests\vuln\tm.sys
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -B -oC:\tests\vuln\tm.i64 -LC:\tests\vuln\tm.log C:\tests\vuln\tm.sys
[idahunt] Executed IDA 2/2 times IDA instances
[idahunt] Took 0:00:15.03 to execute this
root@kitploit:~
C:\> tree C:\tests\ /F
C:\tests
├───patch
│       tm.i64
│       tm.log
│       tm.sys
│
└───vuln
        tm.i64
        tm.log
        tm.sys

Диффинг файлов

Здесь используется diaphora для экспорта diff для каждого файла (создавая базу данных sqlite3 <filename>.sqlite), а затем сравнения между версиями (создавая базу данных sqlite3 <filename>.diaphora).

root@kitploit:~
C:\idahunt> python idahunt.py --diaphora-path C:\diaphora --inputdir C:\tests --diff --filename tm.sys --verbose
[idahunt] IDA32 = C:\Program Files\IDA Core 8.1\ida.exe
[idahunt] IDA64 = C:\Program Files\IDA Core 8.1\ida64.exe
[idahunt] EXECUTE DIFF-EXPORT
[idahunt] Executing script C:\diaphora\diaphora_ida.py for C:\tests\patch\tm.sys
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -A -SC:\diaphora\diaphora_ida.py -LC:\tests\patch\tm.log C:\tests\patch\tm.i64
[idahunt] Environment variables:
[idahunt] DIAPHORA_AUTO2=1
[idahunt] DIAPHORA_EXPORT_FILE=tm.sqlite
[idahunt] Executing script C:\diaphora\diaphora_ida.py for C:\tests\vuln\tm.sys
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -A -SC:\diaphora\diaphora_ida.py -LC:\tests\vuln\tm.log C:\tests\vuln\tm.i64
[idahunt] Environment variables:
[idahunt] DIAPHORA_AUTO2=1
[idahunt] DIAPHORA_EXPORT_FILE=tm.sqlite
[idahunt] Executed IDA 2/2 times IDA instances
[idahunt] EXECUTE DIFF
[idahunt] Diffing patch vs vuln
[idahunt] C:\Program Files\Python39\python.exe C:\diaphora\diaphora.py C:\tests\patch\tm.sqlite C:\tests\vuln\tm.sqlite -o C:\tests\vuln\patch_vs_vuln\tm.sys.diaphora
[diaphora][Wed Dec 14 10:33:49 2022] Diffing...es
[diaphora][Wed Dec 14 10:33:49 2022] Callgraphs from both programs differ in 0.706714%
[diaphora][Wed Dec 14 10:33:49 2022] Finding best matches...
[diaphora][Wed Dec 14 10:33:49 2022] Finding with heuristic 'Perfect match, same name'
[diaphora][Wed Dec 14 10:33:50 2022] All functions matched in at least one database, finishing.
[diaphora][Wed Dec 14 10:33:50 2022] Finding partial matches
[diaphora][Wed Dec 14 10:33:50 2022] All functions matched in at least one database, finishing.
[diaphora][Wed Dec 14 10:33:50 2022] Finding with heuristic 'Small names difference'
[diaphora][Wed Dec 14 10:33:50 2022] Finding with heuristic 'Call address sequence'
[diaphora][Wed Dec 14 10:33:50 2022] Finding with heuristic 'Call address sequence'
[diaphora][Wed Dec 14 10:33:50 2022] Finding unmatched functions
[diaphora][Wed Dec 14 10:33:50 2022] Done. Took 1.110000000000582 seconds.
[diaphora][Wed Dec 14 10:33:50 2022] Diffing results saved in file 'C:\tests\vuln\patch_vs_vuln\tm.sys.diaphora'.
[idahunt] Executed Python 1/1 times
[idahunt] Took 0:00:30.07 to execute this
root@kitploit:~
C:\> tree C:\tests\ /F
C:\tests
├───patch
│       tm.i64
│       tm.log
│       tm.sqlite
│       tm.sys
│
└───vuln
    │   tm.i64
    │   tm.log
    │   tm.sqlite
    │   tm.sys
    │
    └───patch_vs_vuln
            tm.sys.diaphora
            tm.sys.txt

Как показано выше, также создаётся файл <filename>.txt рядом с файлом <filename>.diaphora, содержащий список наилучших совпадений:

root@kitploit:~
partial,00000,1c0002708,WPP_SF_DDq,1c0002708,WPP_SF_DDq,0.950,1,1,Perfect match, same name
partial,00001,1c0002770,WPP_SF_Dq,1c0002770,WPP_SF_Dq,0.940,1,1,Perfect match, same name
partial,00002,1c00027c8,WPP_SF_qq_guid_D,1c00027c8,WPP_SF_qq_guid_D,0.960,1,1,Perfect match, same name
partial,00003,1c0002844,WPP_SF_qqi,1c0002844,WPP_SF_qqi,0.950,1,1,Perfect match, same name
partial,00004,1c00028a8,WPP_SF_qqii,1c00028a8,WPP_SF_qqii,0.960,1,1,Perfect match, same name
partial,00005,1c0015500,TmRecoverResourceManagerExt,1c0015500,TmRecoverResourceManagerExt,0.860,37,36,Perfect match, same name
partial,00006,1c001a610,TmpHeuristicAbortTransaction,1c001a640,TmpHeuristicAbortTransaction,0.986,6,6,Perfect match, same name
partial,00007,1c001a6c0,TmpHeuristicAbortTransactionAfterCheckpoint,1c001a6f0,TmpHeuristicAbortTransactionAfterCheckpoint,0.992,11,11,Perfect match, same name
partial,00008,1c001ad58,TmpIsClusteredTransactionManager,1c001ad88,TmpIsClusteredTransactionManager,0.994,15,15,Perfect match, same name
partial,00009,1c001b0c0,TmpMigrateEnlistments,1c001b0f0,TmpMigrateEnlistments,0.980,10,10,Perfect match, same name

Диффинг функции

Оказывается, файлы tm.sys (приведённые в репозитории) связаны с CVE-2018-8611, поэтому давайте проанализируем исправленную функцию TmRecoverResourceManagerExt():

root@kitploit:~
C:\idahunt> python idahunt.py --diaphora-path C:\diaphora\ --inputdir C:\tests\ --html --filename tm.sys --funcname TmRecoverResourceManagerExt --verbose
[idahunt] IDA32 = C:\Program Files\IDA Core 8.1\ida.exe
[idahunt] IDA64 = C:\Program Files\IDA Core 8.1\ida64.exe
[idahunt] EXECUTE GENERATE HTML
C:\tests\patch\tm.sqlite C:\tests\vuln\tm.sqlite
C:\tests\vuln\patch_vs_vuln\tm.sys\TmRecoverResourceManagerExt_asm.html C:\tests\vuln\patch_vs_vuln\tm.sys\TmRecoverResourceManagerExt_pseudo.html
[idahunt] Showing patch vs vuln for TmRecoverResourceManagerExt
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -A -SC:\diaphora\diaphora_ida.py -LC:\tests\patch\tm.log C:\tests\patch\tm.i64
[idahunt] Environment variables:
[idahunt] DIAPHORA_AUTO4=1
[idahunt] DIAPHORA_DB1=C:\tests\patch\tm.sqlite
[idahunt] DIAPHORA_DB2=C:\tests\vuln\tm.sqlite
[idahunt] DIAPHORA_DIFF=C:\tests\vuln\patch_vs_vuln\tm.sys.diaphora
[idahunt] DIAPHORA_EA1=1c0015500
[idahunt] DIAPHORA_EA2=1c0015500
[idahunt] DIAPHORA_HTML_ASM=C:\tests\vuln\patch_vs_vuln\tm.sys\TmRecoverResourceManagerExt_asm.html
[idahunt] DIAPHORA_HTML_PSEUDO=C:\tests\vuln\patch_vs_vuln\tm.sys\TmRecoverResourceManagerExt_pseudo.html
[idahunt] Executed IDA 1/1 times IDA instances
[idahunt] Took 0:00:10.03 to execute this

Теперь у нас есть сгенерированный ассемблерный код и декомпилированный код этой функции:

root@kitploit:~
C:\idahunt> tree C:\tests\ /F
C:\tests
├───patch
│       tm.i64
│       ...
│
└───vuln
    │   tm.i64
    │   ...
    │
    └───patch_vs_vuln
        │   tm.sys.diaphora
        │   tm.sys.txt
        │
        └───tm.sys
                TmRecoverResourceManagerExt_asm.html
                TmRecoverResourceManagerExt_pseudo.html

Фильтры

Мы можем отфильтровать, чтобы idahunt анализировал только файлы с заданным шаблоном в имени (-n Download ниже):

root@kitploit:~
C:\idahunt>idahunt.py --inputdir C:\re --filter "filters\names.py -a 32 -v -n Download" --scripts C:\idahunt\script_template.py --list-only
[idahunt] Simulating only...
[idahunt] EXECUTE SCRIPTS
[names] Skipping non-matching name Download in cve-2014-4076.dll
[names] Skipping non-matching name Download in cve-2014-4076.exe
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\DownloadExecute.exe
[names] Skipping non-matching name Download in ReverseShell.exe

Мы также можем отфильтровать, чтобы idahunt анализировал только файлы с заданным расширением (-e dll ниже):

root@kitploit:~
C:\idahunt>idahunt.py --inputdir C:\re --filter "filters\names.py -a 32 -v -e dll" --scripts C:\idahunt\script_template.py --list-only
[idahunt] Simulating only...
[idahunt] EXECUTE SCRIPTS
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\cves\cve-2014-4076.dll
[names] Skipping non-matching extension .dll in cve-2014-4076.exe
[names] Skipping non-matching extension .dll in DownloadExecute.exe
[names] Skipping non-matching extension .dll in ReverseShell.exe

Определение архитектуры

Архитектуру необходимо знать заранее из-за архитектуры IDA Pro и того факта, что она содержит два разных исполняемых файла idaq.exe и idaq64.exe для анализа бинарных файлов двух архитектур: 32-битной и 64-битной. Это особенно важно, если вы хотите использовать декомпилятор HexRays.

idahunt автоматически определяет архитектуры i386, ia64 и amd64 в Windows PE файлах. Если вам нужно автоматическое определение других архитектур, вы можете создать issue или добавить его в idahunt и сделать PR.

Если вы забудете указать архитектуру анализируемых файлов, базовый filters\names.py вернёт ошибку:

root@kitploit:~
C:\idahunt>idahunt.py --inputdir C:\re --filter "filters\names.py -v -e dll" --scripts C:\idahunt\script_template.py --list-only
[idahunt] Simulating only...
[idahunt] EXECUTE SCRIPTS
[names] Unknown architecture: None. You need to specify it with -a
[names] Skipping non-matching extension .dll in cve-2014-4076.exe
[names] Skipping non-matching extension .dll in DownloadExecute.exe
[names] Skipping non-matching extension .dll in ReverseShell.exe

Специфичные для целевых устройств

Существуют фильтры для анализа прошивок HP iLO или Cisco ASA.

Известные проекты, использующие idahunt

  • asadbg
Скачать инструмент