diff options
| author | Brandon Miller <brandon@vector35.com> | 2024-10-23 14:41:40 -0400 |
|---|---|---|
| committer | Brandon Miller <bkmiller89@icloud.com> | 2024-10-24 08:20:11 -0400 |
| commit | 5082d6de4b9af14b6106856618666b3fce1c8316 (patch) | |
| tree | 667cad05f69829832027042bbf155535811dd6a4 | |
| parent | 3006c68e108a18f9b8782bc937dc9ec7e2cb3b54 (diff) | |
Initial Firmware Ninja core API
| -rw-r--r-- | binaryninjacore.h | 96 | ||||
| -rw-r--r-- | ui/memorymap.h | 1 |
2 files changed, 95 insertions, 2 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h index 10ad516f..e1b08f5c 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -37,14 +37,14 @@ // Current ABI version for linking to the core. This is incremented any time // there are changes to the API that affect linking, including new functions, // new types, or modifications to existing functions or types. -#define BN_CURRENT_CORE_ABI_VERSION 79 +#define BN_CURRENT_CORE_ABI_VERSION 80 // Minimum ABI version that is supported for loading of plugins. Plugins that // are linked to an ABI version less than this will not be able to load and // will require rebuilding. The minimum version is increased when there are // incompatible changes that break binary compatibility, such as changes to // existing types or functions. -#define BN_MINIMUM_CORE_ABI_VERSION 79 +#define BN_MINIMUM_CORE_ABI_VERSION 80 #ifdef __GNUC__ #ifdef BINARYNINJACORE_LIBRARY @@ -300,6 +300,7 @@ extern "C" typedef struct BNUndoAction BNUndoAction; typedef struct BNUndoEntry BNUndoEntry; typedef struct BNDemangler BNDemangler; + typedef struct BNFirmwareNinja BNFirmwareNinja; //! Console log levels typedef enum BNLogLevel @@ -3463,6 +3464,78 @@ extern "C" typedef bool(*BNCollaborationAnalysisConflictHandler)(void*, const char** keys, BNAnalysisMergeConflict** conflicts, size_t conflictCount); typedef bool(*BNCollaborationNameChangesetFunction)(void*, BNCollaborationChangeset*); + typedef struct BNFirmwareNinjaDevice + { + char* name; + uint64_t start; + uint64_t end; + char* info; + } BNFirmwareNinjaDevice; + + typedef enum BNFirmwareNinjaSectionType + { + CodeSectionType, + DataSectionType, + CompressionSectionType, + PaddingSectionType, + } BNFirmwareNinjaSectionType; + + + typedef enum BNFirmwareNinjaSectionAnalysisMode + { + DefaultSectionAnalysisMode, + IgnorePaddingSectionAnalysisMode, + DetectStringsSectionAnalysisMode, + } BNFirmwareNinjaSectionAnalysisMode; + + typedef struct BNFirmwareNinjaSection + { + BNFirmwareNinjaSectionType type; + uint64_t start; + uint64_t end; + float entropy; + } BNFirmwareNinjaSection; + + typedef enum BNFirmwareNinjaMMIOHeuristic + { + NoMMIOHeuristic, + HasReadBarrierMMIOHeuristic, + HasWriteBarrierMMIOHeuristic, + StoreToOOBMemoryMMIOHeuristic, + LoadFromOOBMemoryMMIOHeuristic, + RepeatLoadStoreMMIOHeuristic, + } BNFirmwareNinjaMMIOHeuristic; + + typedef enum BNFirmwareNinjaMMIOAccessType + { + NoMMIOAccessType, + ReadMMIOAccessType, + WriteMMIOAccessType, + } BNFirmwareNinjaMMIOAccessType; + + typedef struct BNFirmwareNinjaMMIOAccess + { + uint64_t instrAddress; + BNRegisterValue reg; + BNFirmwareNinjaMMIOHeuristic heuristic; + BNFirmwareNinjaMMIOAccessType type; + } BNFirmwareNinjaMMIOAccess; + + typedef struct BNFirmwareNinjaFunctionMMIOInfo + { + uint64_t start; + size_t count; + BNFirmwareNinjaMMIOAccess** accesses; + } BNFirmwareNinjaFunctionMMIOInfo; + + typedef struct BNFirmwareNinjaDeviceAccesses + { + char* name; + size_t total; + size_t unique; + } BNFirmwareNinjaDeviceAccesses; + + BINARYNINJACOREAPI char* BNAllocString(const char* contents); BINARYNINJACOREAPI void BNFreeString(char* str); BINARYNINJACOREAPI char** BNAllocStringList(const char** contents, size_t size); @@ -7934,6 +8007,25 @@ extern "C" BINARYNINJACOREAPI int64_t BNMaskToSize(int64_t value, size_t size); BINARYNINJACOREAPI int64_t BNGetMaskForSize(size_t size); + // FirmwareNinja + BINARYNINJACOREAPI BNFirmwareNinja* BNCreateFirmwareNinja(BNBinaryView *view); + BINARYNINJACOREAPI bool BNFirmwareNinjaAddCustomDevice(BNFirmwareNinja* fn, const char* name, uint64_t start, uint64_t end, const char* info); + BINARYNINJACOREAPI bool BNFirmwareNinjaDeleteCustomDevice(BNFirmwareNinja* fn, const char* name); + BINARYNINJACOREAPI int BNFirmwareNinjaQueryCustomDevices(BNFirmwareNinja* fn, BNFirmwareNinjaDevice** devices); + BINARYNINJACOREAPI void BNFirmwareNinjaFreeDevices(BNFirmwareNinjaDevice *devices, int size); + BINARYNINJACOREAPI int BNFirmwareNinjaQueryBoardNamesForArchitecture(BNFirmwareNinja* fn, BNArchitecture* arch, char ***boards); + BINARYNINJACOREAPI void BNFirmwareNinjaFreeBoardNames(char **boards, int size); + BINARYNINJACOREAPI int BNFirmwareNinjaQueryBoardDevices(BNFirmwareNinja* fn, BNArchitecture* arch, const char* board, BNFirmwareNinjaDevice** devices); + BINARYNINJACOREAPI int BNFirmwareNinjaFindSectionsWithEntropy(BNFirmwareNinja* fn, BNFirmwareNinjaSection** sections, + float highCodeEntropyThreshold, float lowCodeEntropyThreshold, size_t blockSize, BNFirmwareNinjaSectionAnalysisMode mode); + BINARYNINJACOREAPI void BNFirmwareNinjaFreeSections(BNFirmwareNinjaSection *sections, int size); + BINARYNINJACOREAPI int BNFirmwareNinjaFindMMIOAccesses(BNFirmwareNinja* fn, BNFirmwareNinjaFunctionMMIOInfo*** mmio, BNProgressFunction progress, void* progressContext); + BINARYNINJACOREAPI void BNFirmwareNinjaFreeMMIOAccesses(BNFirmwareNinjaFunctionMMIOInfo **mmio, int size); + BINARYNINJACOREAPI void BNFirmwareNinjaSaveMMIOAccessesToMetadata(BNFirmwareNinja* fn, BNFirmwareNinjaFunctionMMIOInfo** mmio, int size); + BINARYNINJACOREAPI int BNFirmwareNinjaLoadMMIOAccessesFromMetadata(BNFirmwareNinja* fn, BNFirmwareNinjaFunctionMMIOInfo*** mmio); + BINARYNINJACOREAPI int BNFirmwareNinjaGetBoardDeviceAccesses(BNFirmwareNinja* fn, BNFirmwareNinjaFunctionMMIOInfo** mmio, int size, + BNFirmwareNinjaDeviceAccesses** accesses, BNArchitecture* arch); + BINARYNINJACOREAPI void BNFirmwareNinjaFreeBoardDeviceAccesses(BNFirmwareNinjaDeviceAccesses *accesses, int size); #ifdef __cplusplus } #endif diff --git a/ui/memorymap.h b/ui/memorymap.h index 8e9df680..982bfe26 100644 --- a/ui/memorymap.h +++ b/ui/memorymap.h @@ -87,6 +87,7 @@ class BINARYNINJAUIAPI SectionDialog : public QDialog void Submit(); public: + void SetDefaultValues(const QString& name, uint64_t start, uint64_t length, BNSectionSemantics semantics); SectionDialog(QWidget* parent, BinaryViewRef data, SectionRef section = nullptr); }; |
