rea-agents 6.3.0 → 6.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DISCLAIMER.md +136 -0
- package/README.md +72 -18
- package/THIRD_PARTY_NOTICES.md +134 -0
- package/bridge/android/ReaJadxBridge.java +123 -11
- package/bridge/cutter/rea_bridge.py +816 -0
- package/bridge/ghidra/ReaGhidraAnalysisOptions.java +38 -0
- package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
- package/bridge/ghidra/ReaGhidraBridge.java +1729 -283
- package/bridge/ghidra/ReaGhidraBundleActivator.java +14 -0
- package/bridge/ghidra/ReaGhidraMipsSoftFloat.java +176 -0
- package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
- package/bridge/ghidra/ReaGhidraPrepareRaw.java +49 -0
- package/bridge/hopper_bridge.py +103 -69
- package/bridge/mitmproxy/capture.py +189 -13
- package/bridge/native/rea_lldb_tracer.py +40 -6
- package/bridge/process/ProcessRunTokenReader.swift +76 -34
- package/bridge/pwntools/layout_impl.py +5 -0
- package/bridge/pwntools/recorded_crash_impl.py +31 -10
- package/dist/adb/AdbConfiguration.js +100 -0
- package/dist/adb/AdbDeviceOutput.js +208 -0
- package/dist/adb/AdbDirectoryListing.js +80 -0
- package/dist/adb/AdbHostFileName.js +34 -0
- package/dist/adb/AdbProvider.js +1433 -0
- package/dist/adb/AdbShellOutput.js +307 -0
- package/dist/android/AndroidTargetSnapshot.js +104 -22
- package/dist/android/JadxAnalysis.js +32 -7
- package/dist/android/JadxConfiguration.js +163 -53
- package/dist/android/JadxDoctor.js +115 -0
- package/dist/android/JadxMcpTransport.js +5 -3
- package/dist/android/JadxProtocol.js +14 -0
- package/dist/android/JadxProvider.js +63 -25
- package/dist/android/JadxRelease.js +12 -1
- package/dist/android/JadxWorkspaceRoot.js +157 -0
- package/dist/apktool/ApktoolConfiguration.js +227 -0
- package/dist/apktool/ApktoolDecodeOutput.js +142 -0
- package/dist/apktool/ApktoolProvider.js +543 -0
- package/dist/application/AnalysisContextQueries.js +5 -8
- package/dist/application/AnalysisProvider.js +24 -14
- package/dist/application/AppBundleExecutable.js +30 -25
- package/dist/application/BinaryTargetResolver.js +210 -33
- package/dist/application/BrowserEvidence.js +1 -1
- package/dist/application/BrowserObservationService.js +13 -2
- package/dist/application/BrowserScenarioCaptureService.js +0 -1
- package/dist/application/CallPathTracing.js +52 -13
- package/dist/application/CapabilityInventory.js +179 -29
- package/dist/application/ClaudeDesktopConfigLocation.js +152 -0
- package/dist/application/ClientConfigurationDocument.js +154 -7
- package/dist/application/ClientConfigurationFiles.js +128 -0
- package/dist/application/ClientRegistrationEnvironment.js +41 -0
- package/dist/application/ClientRegistrationIdentity.js +94 -29
- package/dist/application/ClientRegistrationStatus.js +223 -67
- package/dist/application/DirectAnalysis.js +86 -31
- package/dist/application/DirectAnalysisCleanup.js +1 -1
- package/dist/application/DirectAnalysisStatus.js +14 -2
- package/dist/application/Doctor.js +117 -34
- package/dist/application/DoctorDiagnostics.js +34 -12
- package/dist/application/DoctorProviderIds.js +2 -0
- package/dist/application/DoctorScope.js +11 -2
- package/dist/application/DshCordisPatch.js +355 -0
- package/dist/application/DshCordisYaml.js +155 -0
- package/dist/application/EnhancedLiteralTracing.js +30 -16
- package/dist/application/EnhancedToolTypes.js +0 -1
- package/dist/application/EnhancedTools.js +164 -54
- package/dist/application/EvidenceBundleCommands.js +36 -19
- package/dist/application/EvidenceBundleFiles.js +29 -7
- package/dist/application/FunctionAnalysisEvidence.js +3 -0
- package/dist/application/GeminiClientSettings.js +151 -0
- package/dist/application/HermesClientHome.js +115 -0
- package/dist/application/HermesConfigurationYaml.js +272 -0
- package/dist/application/HopperDownload.js +39 -0
- package/dist/application/InventoryProjectionEvidence.js +0 -1
- package/dist/application/InvestigationProviders.js +19 -3
- package/dist/application/JsonFiles.js +114 -23
- package/dist/application/JsonInputFile.js +410 -0
- package/dist/application/LinuxHopper.js +130 -60
- package/dist/application/MacHopper.js +177 -150
- package/dist/application/MacHopperPaths.js +40 -0
- package/dist/application/MipsElfMetadata.js +201 -0
- package/dist/application/MipsElfSharedLoad.js +164 -0
- package/dist/application/MipsGnuAttributes.js +90 -0
- package/dist/application/MsixPackageStorage.js +133 -0
- package/dist/application/ProgressReporter.js +1 -1
- package/dist/application/ProviderOperationExecution.js +39 -0
- package/dist/application/ReconstructionCoverageService.js +0 -1
- package/dist/application/ReconstructionObligationCandidates.js +12 -5
- package/dist/application/ReconstructionObligationLedgerDiagnostics.js +2 -2
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +15 -33
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -72
- package/dist/application/ReconstructionObligationLedgerService.js +3 -1
- package/dist/application/ReconstructionObligationOriginalCases.js +2 -1
- package/dist/application/ReferenceSourceImport.js +94 -31
- package/dist/application/ReferenceSourceImportEntries.js +40 -30
- package/dist/application/ReferenceSourceImportPolicy.js +99 -23
- package/dist/application/ReferenceSourceImportTypes.js +30 -23
- package/dist/application/ReferenceSourceVcsAdapter.js +163 -31
- package/dist/application/RegularFileRead.js +121 -7
- package/dist/application/Setup.js +88 -14
- package/dist/application/SetupClientConfiguration.js +307 -38
- package/dist/application/SetupClients.js +12 -6
- package/dist/application/SetupHost.js +158 -38
- package/dist/application/SetupInstallFailure.js +42 -2
- package/dist/application/SetupPlan.js +83 -57
- package/dist/application/SetupRecoveryBackup.js +66 -0
- package/dist/application/SetupRegistrationEnvironment.js +2 -1
- package/dist/application/SetupSkill.js +354 -88
- package/dist/application/SupportedClients.js +429 -70
- package/dist/application/TypeScriptEmittedSourceCandidates.js +26 -0
- package/dist/application/Uninstall.js +412 -73
- package/dist/application/UninstallFailure.js +14 -0
- package/dist/application/Update.js +54 -25
- package/dist/application/UpdateFailure.js +17 -0
- package/dist/application/UpdateMaintenance.js +25 -47
- package/dist/application/UpdateRuntime.js +141 -27
- package/dist/application/Utf8JsonInput.js +7 -0
- package/dist/application/WebModuleTraceService.js +7 -0
- package/dist/application/WebNetworkCaptureService.js +16 -7
- package/dist/application/WebScriptExportService.js +131 -65
- package/dist/application/WebSourceLocationService.js +22 -3
- package/dist/application/WindowsCapabilities.js +18 -15
- package/dist/application/WorkflowEvidence.js +24 -1
- package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
- package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
- package/dist/application/analysisView/AnalysisViewService.js +122 -6
- package/dist/application/android/AndroidPackageInspection.js +25 -0
- package/dist/application/android/AndroidSearchEvidenceSummary.js +100 -0
- package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
- package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
- package/dist/application/binary/AnalysisClientCleanup.js +0 -24
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -1
- package/dist/application/binary/AnalysisProviderRegistry.js +36 -21
- package/dist/application/binary/AnalysisSnapshotCache.js +41 -20
- package/dist/application/binary/AnalysisSnapshotFiles.js +75 -9
- package/dist/application/binary/BinarySession.js +250 -97
- package/dist/application/binary/BinarySessionExecution.js +5 -4
- package/dist/application/binary/BinarySessionOpen.js +13 -6
- package/dist/application/binary/BinarySessionRecords.js +33 -7
- package/dist/application/binary/BinarySessionStatus.js +93 -23
- package/dist/application/binary/BinaryTargetSummary.js +9 -0
- package/dist/application/binary/CompositeProvider.js +71 -28
- package/dist/application/binary/LazyAnalysisProvider.js +3 -1
- package/dist/application/binary/SessionProviderRouter.js +5 -2
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +13 -2
- package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
- package/dist/application/binaryDiagnostics/PeResourcesService.js +114 -0
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +16 -4
- package/dist/application/captures/PacketCaptureService.js +83 -0
- package/dist/application/closeOwnedWebResources.js +7 -0
- package/dist/application/electron/ElectronFusePort.js +1 -0
- package/dist/application/electron/ElectronFuseService.js +80 -0
- package/dist/application/evm/EvmInterfaceService.js +4 -0
- package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
- package/dist/application/flutter/DartAotInspection.js +26 -0
- package/dist/application/flutter/FlutterBuildAnalysisPort.js +1 -0
- package/dist/application/flutter/FlutterBuildAnalysisService.js +13 -0
- package/dist/application/frida/FridaInstrumentationPort.js +8 -0
- package/dist/application/frida/FridaInstrumentationService.js +310 -0
- package/dist/application/frida/fridaInputErrors.js +17 -0
- package/dist/application/go/GoBinaryPort.js +1 -0
- package/dist/application/go/GoBinaryService.js +80 -0
- package/dist/application/harmony/HarmonyApplicationService.js +17 -0
- package/dist/application/investigation/EvidenceLedger.js +40 -14
- package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
- package/dist/application/investigation/InvestigationRecords.js +12 -21
- package/dist/application/investigation/UnknownEvidence.js +22 -18
- package/dist/application/javascript/ElectronActiveObservationService.js +55 -25
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +17 -3
- package/dist/application/javascript/ElectronBoundaryGraph.js +2 -0
- package/dist/application/javascript/ElectronBoundaryGraphCallPaths.js +144 -0
- package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
- package/dist/application/javascript/ElectronBoundaryGraphIpc.js +28 -9
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -7
- package/dist/application/javascript/ElectronBoundaryGraphWindows.js +50 -12
- package/dist/application/javascript/ElectronObservationService.js +0 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +15 -0
- package/dist/application/javascript/JavaScriptApplicationService.js +44 -18
- package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +253 -60
- package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +51 -23
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +93 -21
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +35 -8
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +25 -14
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +163 -54
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +246 -15
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +1057 -323
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +134 -32
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +6 -1
- package/dist/application/javascript/JavaScriptModuleRelationships.js +39 -15
- package/dist/application/javascript/JavaScriptRecoveryService.js +32 -9
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +2 -1
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +0 -1
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +9 -3
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +228 -74
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +12 -19
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +4 -1
- package/dist/application/javascript/JavaScriptSemanticGraphElectronProjection.js +67 -0
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -3
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +5 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +19 -8
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +0 -1
- package/dist/application/jeb/JebAnalysisPort.js +1 -0
- package/dist/application/jeb/JebAnalysisService.js +13 -0
- package/dist/application/managed/ManagedApplicationGraphService.js +1 -2
- package/dist/application/managed/ManagedMemberComparisonService.js +72 -54
- package/dist/application/managed/ManagedNativeVerificationService.js +0 -1
- package/dist/application/managed/ManagedReconstructionService.js +0 -1
- package/dist/application/native/NativeCallRoutes.js +54 -34
- package/dist/application/native/NativeDispatchMetadataInspection.js +6 -2
- package/dist/application/native/NativeUiActionTrace.js +51 -30
- package/dist/application/native/NativeValueTrace.js +75 -24
- package/dist/application/pcap/PcapAnalysisPort.js +1 -0
- package/dist/application/pcap/PcapAnalysisService.js +24 -0
- package/dist/application/process/ProcessCli.js +57 -32
- package/dist/application/reverse/ReverseEngineeringCommandPort.js +1 -0
- package/dist/application/reverse/ReverseEngineeringService.js +688 -0
- package/dist/application/rust/RustBinaryPort.js +1 -0
- package/dist/application/rust/RustBinaryService.js +80 -0
- package/dist/application/signals/SignalRecordingService.js +83 -0
- package/dist/application/sqlite/SqliteDatabaseCapability.js +30 -0
- package/dist/application/sqlite/SqliteDatabasePort.js +1 -0
- package/dist/application/sqlite/SqliteDatabaseService.js +76 -0
- package/dist/application/wasm/WasmArtifactPort.js +1 -0
- package/dist/application/wasm/WasmArtifactService.js +77 -0
- package/dist/application/wasm/WasmInterfaceComparisonService.js +188 -0
- package/dist/artifacts/ArtifactHash.js +13 -2
- package/dist/artifacts/ArtifactPaths.js +133 -15
- package/dist/artifacts/ArtifactProvider.js +28 -19
- package/dist/artifacts/ArtifactReader.js +35 -0
- package/dist/artifacts/ArtifactResourceScope.js +109 -0
- package/dist/artifacts/AsarArtifactReader.js +295 -156
- package/dist/artifacts/AsarHeader.js +24 -0
- package/dist/artifacts/AsarListing.js +78 -0
- package/dist/artifacts/DirectoryArtifactReader.js +247 -74
- package/dist/artifacts/MachOSliceArtifactReader.js +198 -48
- package/dist/artifacts/NativeDmgArtifactReader.js +188 -78
- package/dist/artifacts/OrderedReads.js +57 -0
- package/dist/artifacts/SafeOutputTree.js +261 -71
- package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
- package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
- package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
- package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
- package/dist/artifacts/ZipArtifactReader.js +186 -31
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +77 -68
- package/dist/artifacts/apple/DylibResolutionReader.js +11 -5
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +114 -38
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +125 -35
- package/dist/artifacts/apple/KeyedArchiveReader.js +35 -15
- package/dist/artifacts/apple/MachoLoadCommandReader.js +62 -61
- package/dist/artifacts/apple/NibArchive.js +11 -4
- package/dist/artifacts/apple/PlistNumberLiterals.js +2 -2
- package/dist/artifacts/extraction/ArtifactExtraction.js +115 -92
- package/dist/artifacts/hostExecutableMarking.js +16 -0
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +236 -69
- package/dist/artifacts/inventory/ArtifactInventory.js +7 -6
- package/dist/artifacts/inventory/classify.js +95 -35
- package/dist/artifacts/inventory/hashStableRootArtifact.js +48 -15
- package/dist/artifacts/inventory/reader.js +40 -17
- package/dist/artifacts/inventory/scanCanonical.js +84 -40
- package/dist/artifacts/inventory/scanReader.js +72 -19
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +177 -15
- package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
- package/dist/artifacts/readStableArtifact.js +28 -4
- package/dist/browser/BrowserProcessStartup.js +20 -9
- package/dist/browser/BrowserScenarioPartialObservation.js +60 -38
- package/dist/browser/BrowserScenarioSecrets.js +193 -48
- package/dist/browser/CdpBrowserProvider.js +74 -98
- package/dist/browser/CdpCaptureDocuments.js +261 -65
- package/dist/browser/CdpCaptureDomSvg.js +243 -0
- package/dist/browser/CdpCaptureEventBodyShapes.js +12 -12
- package/dist/browser/CdpCaptureEventHandlers.js +49 -21
- package/dist/browser/CdpCaptureEvents.js +53 -19
- package/dist/browser/CdpCaptureStorage.js +22 -5
- package/dist/browser/CdpCaptureStorageFingerprints.js +54 -11
- package/dist/browser/CdpCaptureValues.js +0 -1
- package/dist/browser/CdpConnection.js +25 -9
- package/dist/browser/CdpElectronInspection.js +14 -4
- package/dist/browser/CdpElectronProvider.js +7 -2
- package/dist/browser/CdpElectronScripts.js +2 -1
- package/dist/browser/CdpElectronWorkers.js +7 -2
- package/dist/browser/CdpEndpoint.js +143 -17
- package/dist/browser/CdpObservationSession.js +24 -8
- package/dist/browser/CdpPageCapture.js +67 -17
- package/dist/browser/CdpPageCaptureScripts.js +4 -3
- package/dist/browser/CdpPageCaptureWorkers.js +5 -1
- package/dist/browser/CdpSafeMetadata.js +9 -5
- package/dist/browser/CdpScreenshot.js +5 -14
- package/dist/browser/CdpSnapshotStrings.js +21 -0
- package/dist/browser/CdpTargetSession.js +59 -36
- package/dist/browser/CdpWebMcpDiscovery.js +55 -16
- package/dist/browser/ElectronFileScope.js +99 -9
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -8
- package/dist/browser/PlaywrightElectronActiveActions.js +4 -4
- package/dist/browser/PlaywrightElectronActiveProjection.js +16 -4
- package/dist/browser/PlaywrightElectronActiveProvider.js +114 -36
- package/dist/browser/PlaywrightExecutionBoundary.js +2 -2
- package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +78 -13
- package/dist/browser/PlaywrightScenarioEvents.js +198 -36
- package/dist/browser/PlaywrightScenarioServiceWorkers.js +249 -0
- package/dist/browser/PlaywrightScenarioSession.js +180 -75
- package/dist/browser/PlaywrightScenarioStorage.js +507 -0
- package/dist/browser/PngVisualDiff.js +198 -29
- package/dist/browser/WebSourceMapFetcher.js +164 -81
- package/dist/browser/assets/LocalWebScriptArtifacts.js +27 -4
- package/dist/browser/assets/PublishWebScripts.js +88 -22
- package/dist/browser/assets/ScenarioScriptCapture.js +2 -1
- package/dist/browser/assets/WebArtifactReads.js +34 -4
- package/dist/browser/assets/WebSourceLocationArtifacts.js +39 -3
- package/dist/browser/execution/CdpExecutionCapture.js +3 -3
- package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
- package/dist/browser/history/CaptureFailures.js +22 -8
- package/dist/browser/history/CaptureFormatError.js +2 -2
- package/dist/browser/history/{HarJson.js → CaptureJson.js} +14 -4
- package/dist/browser/history/CaptureRedaction.js +16 -3
- package/dist/browser/history/CaptureRelease.js +20 -2
- package/dist/browser/history/HarCapture.js +16 -9
- package/dist/browser/history/HarSchema.js +36 -36
- package/dist/browser/history/HistoricalCaptureDecoder.js +93 -25
- package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
- package/dist/browser/history/NodeCaptureAdapter.js +48 -0
- package/dist/browser/history/{HarCaptureProcess.js → NodeCaptureProcess.js} +16 -15
- package/dist/browser/history/QlogCapture.js +385 -0
- package/dist/browser/history/SazCapture.js +130 -0
- package/dist/browser/history/SazHttp.js +61 -0
- package/dist/browser/history/SazMetadata.js +92 -0
- package/dist/browser/history/SazProjection.js +90 -0
- package/dist/browser/modules/NativeModuleResolver.js +177 -110
- package/dist/browser/modules/WebModuleArtifacts.js +41 -3
- package/dist/browser/network/PlaywrightNetworkContent.js +40 -5
- package/dist/browser/network/PlaywrightScenarioNetwork.js +125 -11
- package/dist/captures/TsharkCaptureProvider.js +370 -0
- package/dist/captures/parseFieldDiscovery.js +66 -0
- package/dist/captures/parsePacketOutput.js +21 -0
- package/dist/catalogIdentity.js +46 -35
- package/dist/cli/adbCommands.js +337 -0
- package/dist/cli/analysisViewCommands.js +39 -1
- package/dist/cli/androidCommands.js +11 -2
- package/dist/cli/apktoolCommands.js +52 -0
- package/dist/cli/applicationCommands.js +44 -17
- package/dist/cli/artifactCommands.js +9 -12
- package/dist/cli/binaryDiagnosticsCommands.js +27 -5
- package/dist/cli/browserAdvancedCommands.js +97 -55
- package/dist/cli/browserCommands.js +46 -29
- package/dist/cli/captureCommands.js +72 -0
- package/dist/cli/cliResultOutput.js +188 -0
- package/dist/cli/coreBinaryCommands.js +73 -32
- package/dist/cli/coreNativeCommands.js +54 -45
- package/dist/cli/cutterCommands.js +50 -0
- package/dist/cli/electronCommands.js +51 -4
- package/dist/cli/evmCommands.js +16 -8
- package/dist/cli/finishAnalysisCommand.js +44 -0
- package/dist/cli/firmwareCommands.js +21 -38
- package/dist/cli/flutterCommands.js +69 -0
- package/dist/cli/fridaCommands.js +211 -0
- package/dist/cli/goCommands.js +20 -0
- package/dist/cli/interactiveSetup.js +11 -1
- package/dist/cli/javascriptApplicationAnalysis.js +18 -2
- package/dist/cli/javascriptRecoveryCommands.js +29 -15
- package/dist/cli/jebCommands.js +99 -0
- package/dist/cli/jsonOutput.js +13 -6
- package/dist/cli/managedCommands.js +31 -3
- package/dist/cli/options.js +20 -2
- package/dist/cli/pcapCommands.js +47 -0
- package/dist/cli/processCommands.js +1 -1
- package/dist/cli/referenceSourceImportStatus.js +7 -0
- package/dist/cli/reverseEngineeringCommands.js +268 -0
- package/dist/cli/rustCommands.js +21 -0
- package/dist/cli/setupCommands.js +55 -15
- package/dist/cli/signalCommands.js +72 -0
- package/dist/cli/sqliteCommands.js +79 -0
- package/dist/cli/utilityCommands.js +179 -89
- package/dist/cli/wasmCommands.js +61 -0
- package/dist/cli/webModuleCommands.js +36 -32
- package/dist/cli/webNetworkCaptureCommands.js +8 -8
- package/dist/cli/webScriptCommands.js +20 -1
- package/dist/cli/webSourceLocationCommands.js +21 -9
- package/dist/cli-runtime/AbortablePromise-BVBemxbD.js +123 -0
- package/dist/cli-runtime/AnalysisProvider-D0Us2OTk.js +27 -0
- package/dist/cli-runtime/AnalysisSnapshotCache-BXS0wRd2.js +710 -0
- package/dist/cli-runtime/ArtifactReader-BXkffc1D.js +55 -0
- package/dist/cli-runtime/ArtifactResourceScope-DQWTcUwE.js +114 -0
- package/dist/cli-runtime/AsarHeader-CnzOzYEH.js +31 -0
- package/dist/cli-runtime/BinarySessionStatus-DnMxMk-r.js +211 -0
- package/dist/cli-runtime/BinaryTargetResolver-CVIJ_s1A.js +1308 -0
- package/dist/cli-runtime/BoundedFileBytes-BU30odTm.js +39 -0
- package/dist/cli-runtime/CdpTargetSession-DGX5pV9w.js +650 -0
- package/dist/cli-runtime/ClientConfigPath-c6jr6INc.js +36 -0
- package/dist/cli-runtime/ClientConfigurationDocument-ffQ9X0Se.js +1957 -0
- package/dist/cli-runtime/ClientRegistrationStatus-DszCyPEU.js +509 -0
- package/dist/cli-runtime/CurrentEntrypointPath-D5FRNdkq.js +14 -0
- package/dist/cli-runtime/DirectAnalysis-BgvAtpN3.js +528 -0
- package/dist/cli-runtime/Doctor-DIpf_I7N.js +588 -0
- package/dist/cli-runtime/ElectronFileScope-dpHm2nrS.js +1054 -0
- package/dist/cli-runtime/ExecFileOutput-BEQs-lDD.js +117 -0
- package/dist/cli-runtime/IdaConfiguration-CtGP7EKo.js +1094 -0
- package/dist/cli-runtime/InterfaceBuilderDecodeBudget-D4omRUe4.js +279 -0
- package/dist/cli-runtime/InventoryProjectionEvidence-DIsI4DJ6.js +49 -0
- package/dist/cli-runtime/InvestigationProviders-DoQRIHii.js +117 -0
- package/dist/cli-runtime/JavaScriptApplicationEvidenceGraph-D5aI_FSJ.js +160 -0
- package/dist/cli-runtime/JavaScriptApplicationWorkflowEvidence-Bz4-V0Ct.js +75 -0
- package/dist/cli-runtime/JavaScriptWorkerMemoryLimit-B1bwMM1a.js +86 -0
- package/dist/cli-runtime/JebMcpEndpoint-DUytrn5G.js +428 -0
- package/dist/cli-runtime/JsonFiles-DQa1PRKy.js +708 -0
- package/dist/cli-runtime/MacCodeSignature-MgYbRK_H.js +24 -0
- package/dist/cli-runtime/MacHopperPaths-CwL5lYPX.js +434 -0
- package/dist/cli-runtime/MachoLoadCommandReader-C7e074Ze.js +510 -0
- package/dist/cli-runtime/ManagedSnapshot-rqyBHcdL.js +4185 -0
- package/dist/cli-runtime/OwnedCommand-Cj9GhmPR.js +112 -0
- package/dist/cli-runtime/PrivateRuntimeRoot-DAy0PiBM.js +263 -0
- package/dist/cli-runtime/ProcessOwnership-DXC5-UWt.js +1378 -0
- package/dist/cli-runtime/ProviderDeadline-8m2pFRDc.js +122 -0
- package/dist/cli-runtime/RegularFile-B_6KPCNQ.js +139 -0
- package/dist/cli-runtime/RegularFileRead-DVlC5faM.js +125 -0
- package/dist/cli-runtime/SafeOutputTree-D6U15GXd.js +524 -0
- package/dist/cli-runtime/SetupHost-FkYWswsq.js +1098 -0
- package/dist/cli-runtime/SupportedClients-DaX6Lt2d.js +1049 -0
- package/dist/cli-runtime/UninstallFailure-1blyKXHE.js +22 -0
- package/dist/cli-runtime/Update-CbTC_eg1.js +143 -0
- package/dist/cli-runtime/UpdateFailure-BcFNxEZZ.js +24 -0
- package/dist/cli-runtime/ZipArtifactReader-B8ZgNe4D.js +248 -0
- package/dist/cli-runtime/analysisErrorCleanup-Do6YeeoD.js +32 -0
- package/dist/cli-runtime/analysisErrorPresentation-DGt7TdsH.js +497 -0
- package/dist/cli-runtime/appleArchiveFormat-tVoI2ykA.js +263 -0
- package/dist/cli-runtime/application__DirectAnalysisStatus-DpOejOf0.js +150 -0
- package/dist/cli-runtime/application__EnhancedTools-oFE2bOjs.js +1787 -0
- package/dist/cli-runtime/application__FunctionAnalysisEvidence-B6osuhvW.js +41 -0
- package/dist/cli-runtime/application__ReconstructionCoverageService-DN3wTFQj.js +32 -0
- package/dist/cli-runtime/application__ReconstructionObligationLedgerService-CKcTppX9.js +815 -0
- package/dist/cli-runtime/application__Setup-XpMaRNjy.js +514 -0
- package/dist/cli-runtime/application__Uninstall-_23pU2yB.js +427 -0
- package/dist/cli-runtime/application__UpdateRuntime-DPvY8ohd.js +345 -0
- package/dist/cli-runtime/application__android__AndroidApplicationService-CFgIFPM4.js +31 -0
- package/dist/cli-runtime/application__apple__AppleApplicationService-Db6QCsun.js +31 -0
- package/dist/cli-runtime/application__harmony__HarmonyApplicationService-CFjocHoK.js +31 -0
- package/dist/cli-runtime/application__javascript__ElectronActiveObservationService-CmVDUI_Z.js +118 -0
- package/dist/cli-runtime/application__javascript__ElectronObservationService-DEsR8KDN.js +63 -0
- package/dist/cli-runtime/application__javascript__JavaScriptApplicationService-CCkp8KBh.js +11450 -0
- package/dist/cli-runtime/application__javascript__JavaScriptApplicationWorkflowService-lPy0tzr3.js +2329 -0
- package/dist/cli-runtime/application__javascript__JavaScriptRuntimeReconciliationService-DWleA8K9.js +88 -0
- package/dist/cli-runtime/application__javascript__JavaScriptSemanticTraceService-DkALH4rL.js +299 -0
- package/dist/cli-runtime/artifactOperationError-B7n03FbD.js +27 -0
- package/dist/cli-runtime/artifacts__ArtifactProvider-zXI0QjSL.js +2187 -0
- package/dist/cli-runtime/binary-BVOr2mgE.js +14206 -0
- package/dist/cli-runtime/browserObservationError-Dx6xRTjb.js +40 -0
- package/dist/cli-runtime/catalogIdentity-DLoXgfIR.js +933 -0
- package/dist/cli-runtime/cli.js +41848 -0
- package/dist/cli-runtime/cliOutput-BC1BdAcB.js +122 -0
- package/dist/cli-runtime/cliOutput.js +5 -0
- package/dist/cli-runtime/cliResultOutput-DsRMI8CJ.js +780 -0
- package/dist/cli-runtime/cliResultOutput.js +5 -0
- package/dist/cli-runtime/composition__browserScenario-DHXC1a8n.js +2927 -0
- package/dist/cli-runtime/composition__electronObservation-GecK2EID.js +555 -0
- package/dist/cli-runtime/composition__electronScenario-CEZnVrAL.js +653 -0
- package/dist/cli-runtime/cutterToolContracts-TZH9EHr5.js +5134 -0
- package/dist/cli-runtime/doctorRuntime-BE5ZX8it.js +258 -0
- package/dist/cli-runtime/dotnet__ManagedStaticProvider-C8_yZCDc.js +5 -0
- package/dist/cli-runtime/errorSchemas-CTRmvMl3.js +601 -0
- package/dist/cli-runtime/javascriptApplicationAnalysis-HgMzVMQw.js +2068 -0
- package/dist/cli-runtime/javascriptExportReturnShapeProjection-Dg00g35t.js +78 -0
- package/dist/cli-runtime/javascriptExportShapeComparisonSchemas-BYnoIqIk.js +1242 -0
- package/dist/cli-runtime/javascriptRuntimeReconciliation-DNjDoL3S.js +1507 -0
- package/dist/cli-runtime/javascriptRuntimeReconciliationSchemas-BWpGWNcI.js +247 -0
- package/dist/cli-runtime/javascriptSemanticTraceSchemas-BTCNcvbc.js +126 -0
- package/dist/cli-runtime/lipo-DSWP6fv-.js +396 -0
- package/dist/cli-runtime/logger-CQQCI4a2.js +48 -0
- package/dist/cli-runtime/machoContainer-C8BIkkq3.js +172 -0
- package/dist/cli-runtime/managedApplicationGraph-B08jb3jq.js +1130 -0
- package/dist/cli-runtime/managedToolContracts-D60QmIYj.js +99 -0
- package/dist/cli-runtime/mcpDoctor.js +359 -0
- package/dist/cli-runtime/mcpStartupPolicy-CVVSOmRc.js +21 -0
- package/dist/cli-runtime/native__NativeMacOSProvider-YBTvUeJO.js +4875 -0
- package/dist/cli-runtime/officialToolContracts-CCFF0an9.js +1501 -0
- package/dist/cli-runtime/propertyListKeys-G8e74YWb.js +248 -0
- package/dist/cli-runtime/providerAdapterError-DAjhICdr.js +25 -0
- package/dist/cli-runtime/providerCleanupError-Ceq8f0wK.js +27 -0
- package/dist/cli-runtime/providerIdentities-Ao1XTvwx.js +31 -0
- package/dist/cli-runtime/providerStartupTimeout-B2tF2LtZ.js +17 -0
- package/dist/cli-runtime/readFileHandleChunks-dp60iZ6v.js +38 -0
- package/dist/cli-runtime/reconstructionObligationLedgerSchemas-Bao0xMr-.js +19478 -0
- package/dist/cli-runtime/rolldown-runtime-DXoylpqc.js +121 -0
- package/dist/cli-runtime/runtimeVersion-CMGd0bDu.js +23 -0
- package/dist/cli-runtime/safeJson-DKKACtdy.js +25 -0
- package/dist/cli-runtime/scanCanonical-KP4T9jSl.js +2724 -0
- package/dist/cli-runtime/snapshotEnvironment-D_tWyOub.js +813 -0
- package/dist/cli-runtime/toolContracts-D2FOG_Nb.js +3721 -0
- package/dist/cli-runtime/toolOutputSchemaGroups-DRiYs1je.js +12070 -0
- package/dist/cli-runtime/workflowInputError-n8Oo-bLA.js +26 -0
- package/dist/cli.js +44 -5
- package/dist/cliBrowserScenarioCommands.js +41 -5
- package/dist/cliCommandNames.js +80 -0
- package/dist/cliEvidenceCommands.js +0 -1
- package/dist/cliJavaScriptRuntimeCommands.js +16 -14
- package/dist/cliJsonInput.js +14 -6
- package/dist/cliLogging.js +50 -14
- package/dist/cliObservationOptions.js +9 -0
- package/dist/cliOutput.js +38 -5
- package/dist/composition/adb.js +3 -0
- package/dist/composition/apktool.js +3 -0
- package/dist/composition/binary.js +4 -0
- package/dist/composition/binaryDiagnostics.js +4 -0
- package/dist/composition/captures.js +3 -0
- package/dist/composition/directAnalysis.js +36 -11
- package/dist/composition/electronFuses.js +4 -0
- package/dist/composition/evm.js +12 -0
- package/dist/composition/flutter.js +3 -0
- package/dist/composition/go.js +4 -0
- package/dist/composition/javascriptAnalysisWorkerProcess.js +49 -0
- package/dist/composition/jeb.js +35 -0
- package/dist/composition/pcap.js +3 -0
- package/dist/composition/resolveWindowsProviderExecutable.js +61 -0
- package/dist/composition/reverseEngineering.js +29 -0
- package/dist/composition/rust.js +4 -0
- package/dist/composition/signals.js +3 -0
- package/dist/composition/sqlite.js +4 -0
- package/dist/composition/wasm.js +22 -0
- package/dist/composition/webNetworkCaptures.js +7 -2
- package/dist/config/environment.js +55 -4
- package/dist/config/ghidraDisabledAnalyzers.js +25 -0
- package/dist/config/ghidraLanguageOverride.js +9 -0
- package/dist/config/homeDirectory.js +9 -6
- package/dist/config/mcpInputSchemaProfile.js +31 -0
- package/dist/config/mcpOutputSchemaProfile.js +22 -0
- package/dist/config/parseConfig.js +36 -19
- package/dist/config/parsers.js +4 -3
- package/dist/config/{ghidraStartupTimeout.js → providerStartupTimeout.js} +7 -3
- package/dist/contracts/adb/adbToolContracts.js +353 -0
- package/dist/contracts/advertisedInputExamples.js +48 -0
- package/dist/contracts/analysisDetail.js +13 -0
- package/dist/contracts/analysisViewApiSurfaceExample.js +68 -0
- package/dist/contracts/analysisViewToolContracts.js +39 -3
- package/dist/contracts/android/androidToolContracts.js +17 -8
- package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
- package/dist/contracts/applicationToolContracts.js +17 -2
- package/dist/contracts/artifactToolContracts.js +21 -6
- package/dist/contracts/browserToolContracts.js +2 -1
- package/dist/contracts/captures/captureToolContracts.js +42 -0
- package/dist/contracts/compactInputSchema.js +276 -0
- package/dist/contracts/cutterToolContracts.js +84 -0
- package/dist/contracts/enhancedToolContracts.js +2 -2
- package/dist/contracts/evm/evmToolContracts.js +30 -15
- package/dist/contracts/firmware/firmwareToolContracts.js +1 -1
- package/dist/contracts/flutter/flutterToolContracts.js +47 -0
- package/dist/contracts/fridaRemoteAddress.js +23 -0
- package/dist/contracts/fridaToolContracts.js +273 -0
- package/dist/contracts/functionComparisonExample.js +12 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/gdbToolContracts.js +103 -0
- package/dist/contracts/go/goToolContracts.js +20 -0
- package/dist/contracts/hopperMemoryContracts.js +15 -0
- package/dist/contracts/inputSchemaPresentation.js +91 -24
- package/dist/contracts/investigationExamples.js +1 -0
- package/dist/contracts/javascript/electronToolContracts.js +40 -3
- package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +13 -1
- package/dist/contracts/jeb/jebToolContracts.js +64 -0
- package/dist/contracts/managed/managedToolContracts.js +43 -4
- package/dist/contracts/managed/managedWorkflowExamples.js +7 -1
- package/dist/contracts/managed/managedWorkflowToolContracts.js +4 -30
- package/dist/contracts/mobileApplicationGraphExamples.js +12 -0
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +27 -4
- package/dist/contracts/native/nativeToolContracts.js +10 -6
- package/dist/contracts/officialToolContracts.js +9 -9
- package/dist/contracts/pcap/pcapToolContracts.js +33 -0
- package/dist/contracts/providerSelection.js +1 -0
- package/dist/contracts/reconstructionReadinessExample.js +126 -119
- package/dist/contracts/reverseEngineeringToolContracts.js +52 -0
- package/dist/contracts/rizinDebugToolContracts.js +96 -0
- package/dist/contracts/rust/rustToolContracts.js +20 -0
- package/dist/contracts/sessionLifecycleInputs.js +34 -2
- package/dist/contracts/sessionToolContracts.js +4 -4
- package/dist/contracts/sessionToolSchemas.js +20 -2
- package/dist/contracts/signals/signalToolContracts.js +40 -0
- package/dist/contracts/sqlite/sqliteToolContracts.js +36 -0
- package/dist/contracts/toolContractExamples.js +35 -0
- package/dist/contracts/toolContractTypes.js +5 -0
- package/dist/contracts/toolContracts.js +32 -0
- package/dist/contracts/toolEffects.js +414 -8
- package/dist/contracts/toolOutputSchemaGroups.js +78 -33
- package/dist/contracts/toolOutputSchemaPrimitives.js +111 -10
- package/dist/contracts/toolSchemaMetadata.js +98 -9
- package/dist/contracts/unknownContractExamples.js +1 -1
- package/dist/contracts/wasm/wasmComparisonContracts.js +52 -0
- package/dist/contracts/wasm/wasmToolContracts.js +33 -0
- package/dist/contracts/webNetworkCaptureToolContracts.js +15 -4
- package/dist/cutter/CutterBridgeClient.js +621 -0
- package/dist/cutter/CutterBridgeService.js +139 -0
- package/dist/doctorRuntime.js +20 -8
- package/dist/domain/adb/adbDeviceAnalysis.js +605 -0
- package/dist/domain/analysisErrorBase.js +20 -0
- package/dist/domain/analysisErrorCleanup.js +29 -0
- package/dist/domain/analysisErrorCore.js +19 -0
- package/dist/domain/analysisErrorPresentation.js +75 -22
- package/dist/domain/analysisErrorProjection.js +35 -13
- package/dist/domain/analysisProfile.js +7 -3
- package/dist/domain/analysisSnapshot.js +313 -185
- package/dist/domain/analysisView/WebNetworkApiSurfaceAccumulator.js +414 -0
- package/dist/domain/analysisView/analysisView.js +417 -45
- package/dist/domain/analysisView/analysisViewCoverage.js +32 -0
- package/dist/domain/analysisView/analysisViewErrors.js +4 -0
- package/dist/domain/analysisView/analysisViewParent.js +12 -0
- package/dist/domain/analysisView/analysisViewText.js +29 -0
- package/dist/domain/analysisView/androidPackageView.js +102 -0
- package/dist/domain/analysisView/artifactInventoryView.js +140 -0
- package/dist/domain/analysisView/binaryLayoutView.js +13 -4
- package/dist/domain/analysisView/dartAotView.js +93 -0
- package/dist/domain/analysisView/evmInterfaceView.js +105 -0
- package/dist/domain/analysisView/interfaceBuilderView.js +182 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +29 -26
- package/dist/domain/analysisView/machoView.js +186 -0
- package/dist/domain/analysisView/managedArtifactView.js +108 -0
- package/dist/domain/analysisView/managedMemberView.js +209 -0
- package/dist/domain/analysisView/nativeFunctionView.js +150 -0
- package/dist/domain/analysisView/pcapCaptureView.js +264 -0
- package/dist/domain/analysisView/qlogCaptureView.js +198 -0
- package/dist/domain/analysisView/wasmArtifactView.js +162 -0
- package/dist/domain/analysisView/webNetworkApiSurfaceView.js +123 -0
- package/dist/domain/analysisView/webNetworkCaptureView.js +388 -0
- package/dist/domain/android/androidAnalysis.js +36 -2
- package/dist/domain/android/androidApplication.js +57 -80
- package/dist/domain/apktool/apktoolResourceAnalysis.js +89 -0
- package/dist/domain/apple/appleApplication.js +71 -52
- package/dist/domain/apple/appleArchiveFormat.js +184 -0
- package/dist/domain/apple/appleAssetCatalog.js +15 -0
- package/dist/domain/apple/appleBundleAnatomy.js +96 -29
- package/dist/domain/apple/dyldPaths.js +18 -3
- package/dist/domain/apple/dylibResolution.js +21 -11
- package/dist/domain/apple/dylibResolutionFindings.js +8 -9
- package/dist/domain/apple/interfaceBuilderGraph.js +72 -45
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +38 -9
- package/dist/domain/apple/machoContainer.js +120 -8
- package/dist/domain/apple/machoCpuIdentity.js +4 -0
- package/dist/domain/apple/plistValue.js +6 -1
- package/dist/domain/artifactComparison.js +130 -25
- package/dist/domain/artifactDecompressionBudget.js +26 -0
- package/dist/domain/artifactGraph.js +28 -9
- package/dist/domain/artifactIdentity.js +33 -2
- package/dist/domain/artifactInspection.js +47 -45
- package/dist/domain/artifactIntegrityPolicy.js +10 -0
- package/dist/domain/artifactInventoryEvidence.js +148 -51
- package/dist/domain/artifactPathSyntax.js +1 -1
- package/dist/domain/binaryTarget.js +253 -80
- package/dist/domain/binaryTargetTypes.js +21 -1
- package/dist/domain/browserNetworkEvidence.js +4 -0
- package/dist/domain/browserObservation.js +88 -29
- package/dist/domain/browserObservationSchemas.js +12 -5
- package/dist/domain/browserScenarioCapture.js +2 -1
- package/dist/domain/browserScenarioCaptureValues.js +26 -2
- package/dist/domain/browserScenarioDiff.js +120 -11
- package/dist/domain/browserScenarioDiffEvidence.js +46 -13
- package/dist/domain/browserScenarioDiffValues.js +10 -3
- package/dist/domain/browserScenarioNetworkComparison.js +158 -0
- package/dist/domain/browserScenarioNormalization.js +10 -13
- package/dist/domain/browserScenarioValues.js +2 -12
- package/dist/domain/browserSession.js +2 -2
- package/dist/domain/bundleComparison.js +1 -5
- package/dist/domain/callPath.js +40 -3
- package/dist/domain/canonicalJsonDigestSteps.js +34 -12
- package/dist/domain/captures/packetCapture.js +138 -0
- package/dist/domain/captures/packetFields.js +81 -0
- package/dist/domain/changedBehavior.js +43 -41
- package/dist/domain/compactStringIdentity.js +9 -0
- package/dist/domain/comparisonSourceEvidence.js +6 -0
- package/dist/domain/dosCom.js +2 -2
- package/dist/domain/dosMz.js +52 -14
- package/dist/domain/electron/electronFuses.js +360 -0
- package/dist/domain/elfFixedHeader.js +42 -0
- package/dist/domain/evidence.js +104 -38
- package/dist/domain/evidenceBundle.js +58 -20
- package/dist/domain/evidenceErrors.js +5 -0
- package/dist/domain/evidenceRecordSummary.js +144 -0
- package/dist/domain/evm/evmInterface.js +18 -4
- package/dist/domain/evm/solidityMetadata.js +70 -0
- package/dist/domain/explicitSensitiveFailure.js +42 -24
- package/dist/domain/firmware/firmwareAnalysis.js +29 -0
- package/dist/domain/flutter/flutterBuildAnalysis.js +141 -0
- package/dist/domain/functionCallCoverage.js +60 -0
- package/dist/domain/functionComparisonDimensions.js +101 -10
- package/dist/domain/functionComparisonNormalization.js +66 -10
- package/dist/domain/functionComparisonResults.js +7 -6
- package/dist/domain/functionComparisonSchemas.js +14 -3
- package/dist/domain/functionDossierEvidence.js +3 -0
- package/dist/domain/go/goBinary.js +96 -0
- package/dist/domain/harmony/harmonyApplication.js +156 -0
- package/dist/domain/hopperErrors.js +15 -16
- package/dist/domain/hopperPublisher.js +12 -0
- package/dist/domain/hopperValues.js +112 -34
- package/dist/domain/inputIssueProjection.js +16 -1
- package/dist/domain/javascript/electronObservation.js +4 -1
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +24 -24
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +13 -20
- package/dist/domain/javascript/electronStaticAnalysisNative.js +85 -41
- package/dist/domain/javascript/electronStaticAnalysisValues.js +30 -8
- package/dist/domain/javascript/electronWrappedCallPaths.js +498 -0
- package/dist/domain/javascript/htmlArtifactReferences.js +94 -4
- package/dist/domain/javascript/javascriptAnalysisResourceControls.js +65 -0
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +7 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +13 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +1 -1
- package/dist/domain/javascript/javascriptApplicationGraph.js +96 -19
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +1 -0
- package/dist/domain/javascript/javascriptApplicationProjectionResources.js +43 -0
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +28 -12
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +40 -19
- package/dist/domain/javascript/javascriptArtifactFiles.js +2 -1
- package/dist/domain/javascript/javascriptAstFingerprint.js +100 -39
- package/dist/domain/javascript/javascriptAstValues.js +81 -0
- package/dist/domain/javascript/javascriptBootstrap.js +94 -0
- package/dist/domain/javascript/javascriptBootstrapIntegrity.js +372 -0
- package/dist/domain/javascript/javascriptBuiltinResourceMethods.js +8 -0
- package/dist/domain/javascript/javascriptBundledRequireOrigin.js +291 -0
- package/dist/domain/javascript/javascriptContextBridgeExposure.js +23 -0
- package/dist/domain/javascript/javascriptElectronMemberWrites.js +114 -0
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +6 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +1 -1
- package/dist/domain/javascript/javascriptFeatureSeed.js +33 -16
- package/dist/domain/javascript/javascriptFeatureTrace.js +9 -3
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +42 -11
- package/dist/domain/javascript/javascriptIntrinsicInvocation.js +132 -0
- package/dist/domain/javascript/javascriptModuleDeclaration.js +28 -0
- package/dist/domain/javascript/javascriptModuleInterop.js +618 -0
- package/dist/domain/javascript/javascriptModuleResolutionMode.js +18 -0
- package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
- package/dist/domain/javascript/javascriptModuleSpecifier.js +5 -0
- package/dist/domain/javascript/javascriptNativeHandoff.js +6 -2
- package/dist/domain/javascript/javascriptPackageImportAliases.js +58 -0
- package/dist/domain/javascript/javascriptRecovery.js +12 -5
- package/dist/domain/javascript/javascriptRpcEndpoints.js +331 -0
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +12 -3
- package/dist/domain/javascript/javascriptRuntimeObservation.js +4 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +10 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +7 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +15 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +121 -22
- package/dist/domain/javascript/javascriptSemanticAmbientWrites.js +251 -0
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +493 -104
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +17 -34
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
- package/dist/domain/javascript/javascriptSemanticCallableStack.js +52 -0
- package/dist/domain/javascript/javascriptSemanticCalls.js +14 -12
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +42 -55
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +428 -32
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +14 -20
- package/dist/domain/javascript/javascriptSemanticDependencies.js +69 -0
- package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
- package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +51 -53
- package/dist/domain/javascript/javascriptSemanticGraph.js +74 -24
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +2 -11
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +41 -8
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +538 -151
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +199 -3
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +78 -35
- package/dist/domain/javascript/javascriptSemanticObjectReferences.js +671 -0
- package/dist/domain/javascript/javascriptSemanticObjects.js +27 -17
- package/dist/domain/javascript/javascriptSemanticProjection.js +202 -56
- package/dist/domain/javascript/javascriptSemanticPromises.js +6 -9
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +77 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +5 -1
- package/dist/domain/javascript/javascriptSemanticQuery.js +34 -31
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +1 -3
- package/dist/domain/javascript/javascriptSemanticReferenceSources.js +25 -0
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +331 -8
- package/dist/domain/javascript/javascriptSemanticResources.js +6 -40
- package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +233 -0
- package/dist/domain/javascript/javascriptSemanticReturns.js +49 -52
- package/dist/domain/javascript/javascriptSemanticState.js +61 -4
- package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -5
- package/dist/domain/javascript/javascriptSemanticValues.js +260 -35
- package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
- package/dist/domain/javascript/javascriptSourceMapPaths.js +44 -17
- package/dist/domain/javascript/javascriptSourceParser.js +72 -3
- package/dist/domain/javascript/javascriptSourceSelection.js +11 -0
- package/dist/domain/javascript/javascriptStaticAnalysis.js +72 -26
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +100 -24
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +271 -47
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +166 -56
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +2 -0
- package/dist/domain/javascript/javascriptStaticAnalysisTypes.js +2 -1
- package/dist/domain/javascript/javascriptSymbolicBindings.js +836 -0
- package/dist/domain/javascript/javascriptSymbolicControlFlow.js +40 -0
- package/dist/domain/javascript/javascriptSymbolicValues.js +34 -0
- package/dist/domain/javascript/sourceToBundleComparison.js +3 -1
- package/dist/domain/javascript/sourceToBundleComparisonSchemas.js +2 -0
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -13
- package/dist/domain/jeb/jebAnalysis.js +114 -0
- package/dist/domain/jsonShape.js +63 -52
- package/dist/domain/jsonValue.js +40 -12
- package/dist/domain/localPath.js +6 -3
- package/dist/domain/managed/managedApplicationGraph.js +42 -0
- package/dist/domain/managed/managedApplicationGraphCoverage.js +12 -2
- package/dist/domain/managed/managedApplicationGraphNodes.js +32 -23
- package/dist/domain/managed/managedArtifact.js +52 -1
- package/dist/domain/managed/managedInspectionEvidence.js +12 -0
- package/dist/domain/managed/managedMemberComparison.js +3 -0
- package/dist/domain/managed/managedMemberComparisonCoverage.js +23 -3
- package/dist/domain/managed/managedMemberComparisonItems.js +23 -19
- package/dist/domain/managed/managedMemberComparisonMatch.js +209 -18
- package/dist/domain/managed/managedNativeVerificationMatch.js +49 -26
- package/dist/domain/managed/managedNativeVerificationSchemas.js +13 -2
- package/dist/domain/managed/managedReconstruction.js +5 -8
- package/dist/domain/mobileApplicationGraphProjection.js +80 -0
- package/dist/domain/native/addressCoordinate.js +11 -0
- package/dist/domain/native/binaryLayout.js +2 -4
- package/dist/domain/native/bytePattern.js +100 -0
- package/dist/domain/native/nativeAotPe.js +1408 -0
- package/dist/domain/native/nativeInspection.js +38 -4
- package/dist/domain/native/nativeInstruction.js +38 -2
- package/dist/domain/native/nativeInvestigationGraph.js +9 -5
- package/dist/domain/native/nativeLoadImage.js +19 -1
- package/dist/domain/native/nativeMetadataRecovery.js +79 -6
- package/dist/domain/native/nativeUiObservation.js +5 -6
- package/dist/domain/native/objcSwiftMetadata.js +4 -1
- package/dist/domain/native/peResources.js +100 -0
- package/dist/domain/native/recordedCrash.js +79 -10
- package/dist/domain/nativeConvention.js +33 -0
- package/dist/domain/offsetDateTime.js +60 -0
- package/dist/domain/pcap/pcapAnalysis.js +91 -0
- package/dist/domain/pcap/pcapEvidence.js +15 -0
- package/dist/domain/peMachine.js +36 -0
- package/dist/domain/pngHeader.js +18 -0
- package/dist/domain/process/processCapture.js +91 -1
- package/dist/domain/process/processCaptureCoverage.js +26 -3
- package/dist/domain/process/processCaptureExample.js +26 -0
- package/dist/domain/process/processCaptureValidation.js +112 -8
- package/dist/domain/process/processComparison.js +41 -13
- package/dist/domain/process/processScenario.js +66 -7
- package/dist/domain/process/processTraceEvaluation.js +54 -50
- package/dist/domain/process/processTraceSpecification.js +243 -89
- package/dist/domain/propertyListKeys.js +214 -12
- package/dist/domain/propertyListXmlText.js +20 -4
- package/dist/domain/providerAdapterError.js +0 -5
- package/dist/domain/providerConfigurationRefusal.js +12 -0
- package/dist/domain/providerSelectionError.js +2 -1
- package/dist/domain/qlogCapture.js +62 -0
- package/dist/domain/rawBinary.js +96 -0
- package/dist/domain/reconstructionCoverage.js +5 -1
- package/dist/domain/reconstructionCoverageEvaluation.js +18 -15
- package/dist/domain/reconstructionCoverageVerifierResults.js +35 -0
- package/dist/domain/reconstructionObligationLedgerIntegrity.js +114 -0
- package/dist/domain/reconstructionObligationLedgerSchemas.js +104 -1
- package/dist/domain/reconstructionReadiness.js +4 -8
- package/dist/domain/reconstructionReadinessJourneyFindings.js +4 -1
- package/dist/domain/reconstructionUnknowns.js +9 -1
- package/dist/domain/reconstructionVerification.js +54 -25
- package/dist/domain/recordedTransportUrl.js +59 -0
- package/dist/domain/referenceSourceClassification.js +27 -23
- package/dist/domain/referenceSourceGraph.js +70 -23
- package/dist/domain/referenceSourceImportParsing.js +29 -16
- package/dist/domain/referenceSourcePathIdentity.js +32 -0
- package/dist/domain/referenceSourceRequireBindings.js +130 -0
- package/dist/domain/referenceSourceSummary.js +92 -0
- package/dist/domain/relationshipCoverage.js +44 -0
- package/dist/domain/residualUnknown.js +93 -26
- package/dist/domain/reverseEngineering.js +31 -0
- package/dist/domain/runtimeVersion.js +8 -0
- package/dist/domain/rust/rustBinary.js +200 -0
- package/dist/domain/signals/annotationTextWindow.js +31 -0
- package/dist/domain/signals/signalDecoders.js +69 -0
- package/dist/domain/signals/signalRecording.js +115 -0
- package/dist/domain/sourceMapContents.js +10 -3
- package/dist/domain/sourceMapEnvelope.js +17 -11
- package/dist/domain/sqlite/sqliteDatabase.js +188 -0
- package/dist/domain/staticRuntimeCorrelation.js +7 -9
- package/dist/domain/swiftSymbolClassification.js +17 -0
- package/dist/domain/symbolAnalysis.js +16 -4
- package/dist/domain/urlComponents.js +6 -0
- package/dist/domain/wasm/wasmArtifact.js +119 -0
- package/dist/domain/wasm/wasmInterface.js +89 -0
- package/dist/domain/webBundleAnalysis.js +14 -3
- package/dist/domain/webBundleAnalyzerAst.js +7 -2
- package/dist/domain/webBundleAnalyzerInspection.js +68 -40
- package/dist/domain/webBundleAnalyzerResult.js +18 -6
- package/dist/domain/webCaptureDiff.js +233 -34
- package/dist/domain/webCaptureFrameComparison.js +49 -0
- package/dist/domain/webMcpDiscovery.js +5 -2
- package/dist/domain/webModuleImports.js +22 -27
- package/dist/domain/webModuleTrace.js +3 -8
- package/dist/domain/webNetworkCapture.js +101 -39
- package/dist/domain/webNetworkCaptureCoordinates.js +21 -0
- package/dist/domain/webRuntime.js +0 -1
- package/dist/domain/webScreenshot.js +2 -2
- package/dist/domain/webScriptArtifacts.js +2 -4
- package/dist/domain/webScriptExport.js +6 -8
- package/dist/domain/webScriptExportError.js +10 -4
- package/dist/domain/webScriptExportPlan.js +9 -15
- package/dist/domain/webSourceLocation.js +20 -9
- package/dist/domain/zipPackageFormat.js +31 -2
- package/dist/domain/zodCollectionSteps.js +24 -0
- package/dist/dotnet/ManagedArtifactInspector.js +81 -54
- package/dist/dotnet/ManagedDecodeBudget.js +138 -0
- package/dist/dotnet/ManagedMemberInspector.js +113 -26
- package/dist/dotnet/ManagedMemberInspectorCore.js +356 -140
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +112 -38
- package/dist/dotnet/ManagedMemberOwnership.js +65 -0
- package/dist/dotnet/ManagedMemberPointers.js +69 -0
- package/dist/dotnet/ManagedMemberRows.js +182 -44
- package/dist/dotnet/ManagedMetadataHeaps.js +123 -27
- package/dist/dotnet/ManagedMetadataInventory.js +5 -5
- package/dist/dotnet/ManagedMetadataInventoryRows.js +56 -63
- package/dist/dotnet/ManagedMetadataLayout.js +19 -5
- package/dist/dotnet/ManagedMetadataRowSizes.js +1 -1
- package/dist/dotnet/ManagedMethodBodyReader.js +34 -11
- package/dist/dotnet/ManagedMethodSpecs.js +78 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +5 -4
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +52 -44
- package/dist/dotnet/ManagedPeReader.js +96 -52
- package/dist/dotnet/ManagedReaderFailure.js +11 -1
- package/dist/dotnet/ManagedSnapshot.js +88 -0
- package/dist/dotnet/ManagedStaticProvider.js +57 -35
- package/dist/dotnet/ManagedTypeMemberLists.js +105 -0
- package/dist/dotnet/ManagedTypeNames.js +98 -0
- package/dist/dotnet/ManagedUserStrings.js +75 -0
- package/dist/electron/ElectronFusePath.js +247 -0
- package/dist/electron/ElectronFuseProvider.js +113 -0
- package/dist/electron/ElectronFuseReader.js +317 -0
- package/dist/evaluation/AgentEvaluationFixtures.js +194 -11
- package/dist/evaluation/AgentEvaluationReport.js +9 -5
- package/dist/evaluation/CodexAgentEval.js +58 -49
- package/dist/evaluation/KnownAnswerEvaluation.js +126 -57
- package/dist/evm/EvmoleFailures.js +19 -16
- package/dist/evm/EvmoleInterfaceAdapter.js +5 -1
- package/dist/evm/EvmoleInterfaceProvider.js +198 -23
- package/dist/evm/EvmoleInterfaceWorker.js +2 -0
- package/dist/evm/SolidityMetadata.js +139 -0
- package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
- package/dist/filesystem/OwnedFileHandle.js +36 -0
- package/dist/filesystem/OwnedStagedOutput.js +138 -0
- package/dist/filesystem/RegularFile.js +81 -5
- package/dist/filesystem/StableFileHash.js +46 -0
- package/dist/filesystem/readFileHandleChunks.js +35 -0
- package/dist/firmware/FirmwareCommand.js +27 -5
- package/dist/firmware/FirmwareFiles.js +18 -7
- package/dist/firmware/FirmwareProvider.js +158 -32
- package/dist/firmware/FirmwarePublication.js +242 -4
- package/dist/firmware/FirmwareRelease.js +1 -0
- package/dist/firmware/FirmwareReports.js +202 -12
- package/dist/flutter/DartElf.js +418 -0
- package/dist/flutter/ElfBuildId.js +137 -0
- package/dist/flutter/ElfLoadMap.js +91 -0
- package/dist/flutter/FlutterBuildProvider.js +826 -0
- package/dist/flutter/FlutterPayloadScan.js +180 -0
- package/dist/frida/FridaInstrumentationManager.js +1104 -0
- package/dist/gdb/GdbSessionManager.js +1451 -0
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +175 -6
- package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
- package/dist/ghidra/GhidraClient.js +208 -29
- package/dist/ghidra/GhidraDiagnostics.js +18 -8
- package/dist/ghidra/GhidraDoctor.js +15 -12
- package/dist/ghidra/GhidraFunctionValues.js +73 -2
- package/dist/ghidra/GhidraInstallation.js +216 -20
- package/dist/ghidra/GhidraInstallationPolicy.js +79 -29
- package/dist/ghidra/GhidraInventoryValues.js +53 -1
- package/dist/ghidra/GhidraJavaLaunch.js +91 -10
- package/dist/ghidra/GhidraJavaProperties.js +117 -0
- package/dist/ghidra/GhidraLanguageCatalog.js +169 -0
- package/dist/ghidra/GhidraLauncher.js +306 -88
- package/dist/ghidra/GhidraLoadImageAttest.js +74 -7
- package/dist/ghidra/GhidraLoadImageValues.js +72 -0
- package/dist/ghidra/GhidraMipsProfile.js +315 -0
- package/dist/ghidra/GhidraPeProfile.js +21 -0
- package/dist/ghidra/GhidraPowerPcProfile.js +51 -0
- package/dist/ghidra/GhidraProvider.js +106 -20
- package/dist/ghidra/GhidraProviderCapabilities.js +30 -19
- package/dist/ghidra/GhidraProviderClient.js +520 -56
- package/dist/ghidra/GhidraPspExtension.js +140 -0
- package/dist/ghidra/GhidraPspProfile.js +59 -0
- package/dist/ghidra/GhidraRawBinaryLanguage.js +40 -0
- package/dist/ghidra/GhidraRiscvProfile.js +100 -0
- package/dist/ghidra/GhidraSessionError.js +155 -11
- package/dist/ghidra/GhidraSessionValues.js +75 -2
- package/dist/ghidra/GhidraTransport.js +2 -1
- package/dist/go/GoBinaryContainer.js +140 -0
- package/dist/go/GoBinaryImage.js +210 -0
- package/dist/go/GoBinaryProvider.js +151 -0
- package/dist/go/GoElfImage.js +211 -0
- package/dist/go/GoMachoImage.js +164 -0
- package/dist/go/GoModuleText.js +217 -0
- package/dist/go/GoPeImage.js +124 -0
- package/dist/hopper/BridgeLauncher.js +35 -2
- package/dist/hopper/HopperAnalysisProfile.js +21 -9
- package/dist/hopper/HopperCleanup.js +15 -3
- package/dist/hopper/HopperClient.js +203 -42
- package/dist/hopper/HopperMacPublisher.js +29 -0
- package/dist/hopper/HopperMachOImage.js +61 -27
- package/dist/hopper/HopperProcessDiagnostic.js +27 -0
- package/dist/hopper/HopperProvider.js +68 -26
- package/dist/hopper/HopperProviderCapabilities.js +7 -3
- package/dist/hopper/HopperRequestQueue.js +17 -5
- package/dist/hopper/HopperSessionValues.js +10 -1
- package/dist/hopper/HopperTargetLease.js +66 -19
- package/dist/ida/IdaBusyHealth.js +44 -0
- package/dist/ida/IdaCallGraph.js +134 -0
- package/dist/ida/IdaConfiguration.js +7 -2
- package/dist/ida/IdaDiagnosticRedactor.js +199 -0
- package/dist/ida/IdaDiagnosticWriter.js +62 -0
- package/dist/ida/IdaDoctor.js +7 -5
- package/dist/ida/IdaJsonDiagnostic.js +138 -0
- package/dist/ida/IdaMcpConnection.js +297 -27
- package/dist/ida/IdaNativeProtocol.js +93 -0
- package/dist/ida/IdaOperationRunner.js +249 -40
- package/dist/ida/IdaProtocolValues.js +86 -4
- package/dist/ida/IdaProvider.js +34 -8
- package/dist/ida/IdaProviderCapabilities.js +37 -8
- package/dist/ida/IdaSessionClient.js +332 -53
- package/dist/ida/IdaWorkspace.js +57 -7
- package/dist/inspector/V8InspectorCaptureProjection.js +7 -2
- package/dist/inspector/V8InspectorEndpoint.js +15 -13
- package/dist/inspector/V8InspectorProvider.js +41 -7
- package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +337 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +594 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +65 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +590 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +126 -0
- package/dist/javascript/recovery/RecoveryFiles.js +68 -12
- package/dist/javascript/recovery/WakaruCommand.js +22 -9
- package/dist/javascript/recovery/WakaruExecution.js +30 -18
- package/dist/javascript/recovery/WakaruProvider.js +150 -24
- package/dist/javascript/recovery/WakaruPublication.js +38 -14
- package/dist/javascript/recovery/WakaruRelease.js +11 -4
- package/dist/javascript/recovery/WakaruReport.js +15 -9
- package/dist/javascript/recovery/WakaruVersion.js +24 -0
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +2 -16
- package/dist/javascript/sourceMaps/SourceMapCommand.js +38 -7
- package/dist/javascript/sourceMaps/SourceMapDecoder.js +84 -10
- package/dist/javascript/sourceMaps/SourceMapFormat.js +26 -28
- package/dist/javascript/sourceMaps/TraceSourceMap.js +34 -6
- package/dist/jeb/JebMcpConnection.js +186 -0
- package/dist/jeb/JebMcpEndpoint.js +45 -0
- package/dist/jeb/JebProvider.js +297 -0
- package/dist/logger.js +14 -1
- package/dist/main/shutdown.js +3 -0
- package/dist/main/transport.js +48 -4
- package/dist/main.js +14 -3
- package/dist/mcp/AnalysisSnapshotFiles-BAbiJQOc.js +1412 -0
- package/dist/mcp/ArtifactProvider-DViCU_rn.js +2183 -0
- package/dist/mcp/ArtifactProviderMetadata-b7pOK5_t.js +76 -0
- package/dist/mcp/ArtifactReader-OyM03Gjn.js +55 -0
- package/dist/mcp/ArtifactResourceScope-P3tq5z8Z.js +162 -0
- package/dist/mcp/AsarHeader-WsPgoooH.js +31 -0
- package/dist/mcp/BinarySessionStatus-B4P9gf-S.js +212 -0
- package/dist/mcp/BinaryTargetResolver-BMaE_0H1.js +1427 -0
- package/dist/mcp/BoundedFileBytes-DuczXiQZ.js +68 -0
- package/dist/mcp/CdpCaptureDocuments-HDiF2O7k.js +746 -0
- package/dist/mcp/CdpCaptureValues-M-j6CIh1.js +90 -0
- package/dist/mcp/CdpConnection-BpDfz4MK.js +570 -0
- package/dist/mcp/CdpOptionalCommand-BPjRD9Kz.js +120 -0
- package/dist/mcp/CdpTargetSession-BsPoKhEU.js +86 -0
- package/dist/mcp/DirectAnalysis-DrafbXke.js +409 -0
- package/dist/mcp/DirectAnalysisStatus-CjjeDLzW.js +44 -0
- package/dist/mcp/ElectronFileScope-BPG_YoyU.js +110 -0
- package/dist/mcp/InterfaceBuilderDecodeBudget-5F2AkxJT.js +652 -0
- package/dist/mcp/ManagedStaticProvider-BthZbKyZ.js +5028 -0
- package/dist/mcp/NativeMacOSProvider-Bh79k8dI.js +4867 -0
- package/dist/mcp/NativeMacOSProviderMetadata-N1lPOaY_.js +307 -0
- package/dist/mcp/ProcedureAddressResolution-CQpuwm1h.js +19 -0
- package/dist/mcp/ProcessOwnership-Bl_3ejLe.js +1502 -0
- package/dist/mcp/ProviderDeadline-DskQ94YD.js +932 -0
- package/dist/mcp/WorkflowEvidence-umWrB_wm.js +111 -0
- package/dist/mcp/analysisErrorCore-DXRTvF_m.js +235 -0
- package/dist/mcp/analysisErrorProjection-BN0EPM-3.js +892 -0
- package/dist/mcp/artifactOperationError-CkHMMaf7.js +27 -0
- package/dist/mcp/artifactToolContracts-Di4qZlEt.js +72 -0
- package/dist/mcp/browserObservation-C0s4i8UI.js +4468 -0
- package/dist/mcp/browserObservationError-CyLugqX4.js +40 -0
- package/dist/mcp/browserObservationSchemas-tgqjH7aA.js +573 -0
- package/dist/mcp/browserScenario-CAQ8Fns9.js +2929 -0
- package/dist/mcp/browserScenarioCapture-CTNFN-FI.js +479 -0
- package/dist/mcp/canonicalDigest-Bi_0_zGi.js +71 -0
- package/dist/mcp/digests-BFoWUT_-.js +223 -0
- package/dist/mcp/electronActiveObservation-lDvQTMR0.js +226 -0
- package/dist/mcp/electronObservation-DFOFEood.js +112 -0
- package/dist/mcp/electronObservation-i7LcILQ-.js +562 -0
- package/dist/mcp/electronScenario-nCzE6IfJ.js +653 -0
- package/dist/mcp/emptyArraySchema-tL6Qymyd.js +140 -0
- package/dist/mcp/enhancedInputs-DgdEnzHy.js +56 -0
- package/dist/mcp/javascriptRuntimeObservation-61NhCf7H.js +690 -0
- package/dist/mcp/javascriptRuntimeObservation-PIUoLfX6.js +121 -0
- package/dist/mcp/jsonSerialization-V-wWiFRE.js +152 -0
- package/dist/mcp/lipo-Bnkoq_6W.js +502 -0
- package/dist/mcp/localPath-AxvW9aPe.js +19 -0
- package/dist/mcp/logger-BQY5ulYv.js +48 -0
- package/dist/mcp/main-kBXHZ8S5.js +69390 -0
- package/dist/mcp/main.js +6 -0
- package/dist/mcp/managedToolContracts-CK--I_s7.js +101 -0
- package/dist/mcp/nativeValueTrace-DR9UE62L.js +3439 -0
- package/dist/mcp/officialToolContracts-B67NJ2tC.js +1413 -0
- package/dist/mcp/pngHeader-DQ-ObyY2.js +147 -0
- package/dist/mcp/propertyListKeys-DD25WsjI.js +553 -0
- package/dist/mcp/providerAdapterError-sDxToNal.js +25 -0
- package/dist/mcp/providerIdentities--ptAh481.js +31 -0
- package/dist/mcp/providerIdentity-BCQ5n5tw.js +16 -0
- package/dist/mcp/providerOperationHealth-CTYa3iLf.js +48 -0
- package/dist/mcp/rolldown-runtime-BjeaiXFo.js +121 -0
- package/dist/mcp/safeJson-NeGfpkrI.js +25 -0
- package/dist/mcp/scanCanonical-CRXSpule.js +3982 -0
- package/dist/mcp/serverIdentity-Cio4iFV3.js +1328 -0
- package/dist/mcp/sourceMapEnvelope-C0uJlrOh.js +94 -0
- package/dist/mcp/toolContracts-BW05wpcr.js +12200 -0
- package/dist/mcp/toolOutputSchemaGroups-ColvNZ1r.js +17533 -0
- package/dist/mcp/unicodeCodePointOrder-BezCbTpg.js +26 -0
- package/dist/mcp/webContentArtifact-Dzjc1z-R.js +284 -0
- package/dist/mcp/webRuntime-K__NYzXm.js +74 -0
- package/dist/mcp/webSourceLocation-DbMAT2J9.js +11130 -0
- package/dist/mcpDoctor.js +108 -76
- package/dist/mcpStartupPolicy.js +3 -0
- package/dist/native/AppleDispatchCoverage.js +81 -28
- package/dist/native/AppleDispatchMetadata.js +20 -9
- package/dist/native/AppleMachoFixups.js +253 -34
- package/dist/native/AppleMachoSelection.js +44 -17
- package/dist/native/AppleObjcCategories.js +1 -2
- package/dist/native/AppleObjcDispatchFacets.js +76 -7
- package/dist/native/CommandRunner.js +142 -32
- package/dist/native/LldbCallTracer.js +5 -3
- package/dist/native/MachoArchitectureSelection.js +50 -0
- package/dist/native/NativeCallObservation.js +2 -1
- package/dist/native/NativeMacOSProvider.js +173 -37
- package/dist/native/NativeMachoInspection.js +142 -78
- package/dist/native/NativeUiHelperRuntime.js +6 -1
- package/dist/native/NativeUiObservation.js +6 -5
- package/dist/native/SignatureTargetBinding.js +118 -55
- package/dist/native/parsers/codesign.js +27 -10
- package/dist/native/parsers/demangle.js +7 -1
- package/dist/native/parsers/dyldInfo.js +73 -4
- package/dist/native/parsers/lipo.js +53 -19
- package/dist/native/parsers/machoUuid.js +150 -0
- package/dist/native/parsers/otool.js +232 -29
- package/dist/native/pe/PeResourceLayout.js +120 -0
- package/dist/native/pe/PeResourceParser.js +286 -0
- package/dist/native/pe/PeResourcesProvider.js +77 -0
- package/dist/native/pwndbg/PwndbgCoreContext.js +20 -20
- package/dist/native/pwntools/PwntoolsDecoder.js +264 -40
- package/dist/native/pwntools/PwntoolsFailures.js +2 -1
- package/dist/native/pwntools/PwntoolsInputLimit.js +27 -0
- package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +27 -15
- package/dist/native/pwntools/PwntoolsResourceLimits.js +3 -3
- package/dist/native/pwntools/RecordedCrashSourceBindings.js +12 -8
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +3 -1
- package/dist/objdump/ObjdumpCommand.js +21 -0
- package/dist/pcap/PcapCommand.js +146 -0
- package/dist/pcap/PcapConfiguration.js +93 -0
- package/dist/pcap/PcapNativeBound.js +58 -0
- package/dist/pcap/PcapOutput.js +240 -0
- package/dist/pcap/PcapProvider.js +424 -0
- package/dist/pcap/PcapSnapshot.js +171 -0
- package/dist/process/ArtifactAnalysisResources.js +213 -0
- package/dist/process/BoundedFileBytes.js +30 -7
- package/dist/process/CurrentEntrypointPath.js +6 -0
- package/dist/process/DarwinProcessRunTokenReader.js +125 -16
- package/dist/process/ExecFileBoundedOutput.js +44 -0
- package/dist/process/ExecFileOutput.js +30 -6
- package/dist/process/JavaScriptWorkerMemoryLimit.js +25 -0
- package/dist/process/LinuxResourceLimits.js +80 -0
- package/dist/process/MacCodeSignature.js +3 -0
- package/dist/process/OwnedCommand.js +40 -15
- package/dist/process/PrivateRuntimeRoot.js +9 -19
- package/dist/process/PrivateRuntimeRootUnavailableError.js +10 -0
- package/dist/process/ProcessOwnership.js +173 -128
- package/dist/process/ProcessOwnershipObservation.js +131 -43
- package/dist/process/ProcessOwnershipProcessTree.js +4 -4
- package/dist/process/ProcessRunTokenObservations.js +48 -0
- package/dist/process/ProviderDeadline.js +58 -12
- package/dist/process/ProviderDiagnosticRedaction.js +17 -0
- package/dist/process/ProviderProcess.js +112 -14
- package/dist/process/WindowsAuthority.js +48 -39
- package/dist/process/WindowsBatchCommand.js +46 -0
- package/dist/process/boundedUtf8Text.js +13 -0
- package/dist/process/capture/FilesystemSnapshot.js +87 -12
- package/dist/process/capture/ProcessCaptureClock.js +2 -0
- package/dist/process/capture/ProcessCaptureError.js +22 -3
- package/dist/process/capture/ProcessCaptureJournal.js +2 -1
- package/dist/process/capture/ProcessCaptureLifecycle.js +433 -91
- package/dist/process/capture/ProcessCaptureProgress.js +63 -0
- package/dist/process/capture/ProcessHarness.js +209 -38
- package/dist/process/capture/ProcessNormalization.js +278 -34
- package/dist/process/capture/ProcessSampling.js +3 -2
- package/dist/process/capture/ProcessScenarioRuntimeValidation.js +18 -15
- package/dist/process/capture/TerminalRenderer.js +52 -14
- package/dist/process/ownedDebuggerSession.js +203 -0
- package/dist/reference/ReferenceSourceReader.js +22 -6
- package/dist/reference/ReferenceSourceReaderEntries.js +182 -105
- package/dist/reference/ReferenceSourceReaderErrors.js +17 -1
- package/dist/reference/ReferenceSourceReaderFile.js +50 -11
- package/dist/reference/ReferenceSourceReaderTypes.js +1 -2
- package/dist/reference/ReferenceSourceReaderValidate.js +4 -5
- package/dist/rizin/RizinCommand.js +14 -0
- package/dist/rizin/RizinDebugSessionManager.js +1072 -0
- package/dist/rust/RustAuditableReader.js +309 -0
- package/dist/rust/RustBinaryImage.js +116 -0
- package/dist/rust/RustBinaryProvider.js +162 -0
- package/dist/server/EvidenceMcpServer.js +185 -27
- package/dist/server/admittedToolOperation.js +14 -0
- package/dist/server/contractToolHandler.js +28 -0
- package/dist/server/createServer.js +238 -36
- package/dist/server/externalMutationAdmission.js +50 -0
- package/dist/server/mcpProgress.js +4 -2
- package/dist/server/promptCompletion.js +19 -6
- package/dist/server/providerEnvironment.js +3 -0
- package/dist/server/registerAdbTools.js +36 -0
- package/dist/server/registerAnalysisViewTool.js +9 -10
- package/dist/server/registerAndroidTools.js +22 -13
- package/dist/server/registerApktoolTools.js +14 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +4 -6
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +3 -2
- package/dist/server/registerApplicationTools/coverage.js +3 -2
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +11 -3
- package/dist/server/registerApplicationTools/traceFeature.js +3 -2
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +5 -2
- package/dist/server/registerArtifactTools.js +21 -1
- package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
- package/dist/server/registerBrowserScenarioTool.js +10 -7
- package/dist/server/registerBrowserTools.js +14 -13
- package/dist/server/registerBundleComparisonTool.js +20 -6
- package/dist/server/registerCaptureTools.js +12 -0
- package/dist/server/registerCloseLifecycleTool.js +32 -3
- package/dist/server/registerCutterTools.js +33 -0
- package/dist/server/registerElectronTools.js +38 -17
- package/dist/server/registerEnhancedTools.js +7 -6
- package/dist/server/registerEvidenceTools.js +14 -10
- package/dist/server/registerEvmTools.js +24 -11
- package/dist/server/registerFirmwareTools.js +3 -11
- package/dist/server/registerFlutterTools.js +17 -0
- package/dist/server/registerFridaTools.js +205 -0
- package/dist/server/registerFunctionComparisonTool.js +34 -11
- package/dist/server/registerGdbTools.js +64 -0
- package/dist/server/registerGoTools.js +9 -0
- package/dist/server/registerInvestigationTools/helpers.js +2 -2
- package/dist/server/registerInvestigationTools.js +12 -8
- package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +10 -11
- package/dist/server/registerJebTools.js +16 -0
- package/dist/server/registerManagedTools.js +11 -1
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
- package/dist/server/registerNativeTools.js +14 -0
- package/dist/server/registerOfficialTools.js +5 -0
- package/dist/server/registerPcapTools.js +35 -0
- package/dist/server/registerPeResourcesTool.js +9 -0
- package/dist/server/registerProcessComparisonTool.js +14 -4
- package/dist/server/registerRecordedCrashTools.js +4 -9
- package/dist/server/registerReverseEngineeringTools.js +86 -0
- package/dist/server/registerRizinDebugTools.js +53 -0
- package/dist/server/registerRustTools.js +9 -0
- package/dist/server/registerSessionRecordTools.js +21 -14
- package/dist/server/registerSessionStatusTool.js +22 -4
- package/dist/server/registerSessionTools.js +78 -34
- package/dist/server/registerSignalTools.js +12 -0
- package/dist/server/registerSqliteTools.js +9 -0
- package/dist/server/registerWasmTools.js +46 -0
- package/dist/server/registerWebModuleTool.js +4 -9
- package/dist/server/registerWebNetworkCaptureTool.js +26 -17
- package/dist/server/registerWebRuntimeTools.js +6 -5
- package/dist/server/registerWebScriptTool.js +6 -3
- package/dist/server/registerWebSourceLocationTool.js +4 -9
- package/dist/server/retainedSummaryDelivery.js +28 -0
- package/dist/server/sessionAvailabilityPolicy.js +3 -0
- package/dist/server/toolRegistrationOptions.js +8 -0
- package/dist/server/toolResult.js +68 -16
- package/dist/server/toolResultEncoding.js +36 -3
- package/dist/serverIdentity.js +17 -8
- package/dist/signals/SigrokRecordingProvider.js +339 -0
- package/dist/signals/parseDecoderDiscovery.js +65 -0
- package/dist/sqlite/SqliteDatabaseFailures.js +134 -0
- package/dist/sqlite/SqliteDatabaseInspection.js +421 -0
- package/dist/sqlite/SqliteDatabaseLimits.js +16 -0
- package/dist/sqlite/SqliteDatabaseProvider.js +295 -0
- package/dist/sqlite/SqliteDatabaseSnapshot.js +156 -0
- package/dist/sqlite/SqliteDatabaseWorker.js +46 -0
- package/dist/sqlite/SqliteDatabaseWorkerExecution.js +112 -0
- package/dist/wasm/WabtArtifactProvider.js +336 -0
- package/dist/wasm/WabtFailures.js +101 -0
- package/dist/wasm/WabtInterface.js +309 -0
- package/dist/wasm/WabtOutput.js +60 -0
- package/dist/wasm/WabtRelease.js +12 -0
- package/dist/wasm/WabtString.js +48 -0
- package/dist/wasm/WabtWat.js +147 -0
- package/dist/wasm/WasmGlueAdapter.js +53 -0
- package/dist/wasm/WasmInterfaceBudget.js +11 -0
- package/dist/windows/WindowsNativeLoader.js +37 -7
- package/dist/windows/WindowsOwnedProcess.js +150 -17
- package/dist/windows/WindowsPrivateRuntime.js +34 -6
- package/install.sh +157 -95
- package/licenses/Apache-2.0.txt +202 -0
- package/licenses/GCC-Runtime-Library-Exception-3.1.txt +73 -0
- package/licenses/GPL-3.0.txt +674 -0
- package/licenses/LGPL-2.0.txt +480 -0
- package/licenses/MIT-template.txt +18 -0
- package/licenses/MinGW-w64-runtime.txt +240 -0
- package/licenses/Node-22.19.0-LICENSE.txt +2666 -0
- package/licenses/README.md +68 -0
- package/licenses/cfworker-MIT.txt +21 -0
- package/licenses/dotnet-runtime-MIT.txt +23 -0
- package/licenses/frida-17.23.2-COPYING.txt +50 -0
- package/licenses/ghidra-12.1.4-DISCLAIMER.txt +13 -0
- package/licenses/ghidra-12.1.4-LICENSE.txt +201 -0
- package/licenses/ghidra-12.1.4-NOTICE.txt +49 -0
- package/licenses/nativeaot-parser-MIT.txt +28 -0
- package/licenses/npm-dependencies.txt +3612 -0
- package/licenses/npm-runtime-notices.txt +8548 -0
- package/licenses/upstream-sources.json +72 -0
- package/licenses/xterm-MIT.txt +21 -0
- package/native/windows/README.md +92 -11
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +117 -22
- package/scripts/electron-active-hook.cjs +4 -1
- package/scripts/hopper-demo-x11.py +53 -3
- package/scripts/prepack.mjs +5 -0
- package/scripts/rea-android-workspace-guardian.mjs +46 -0
- package/scripts/rea.mjs +44 -13
- package/scripts/verify-windows-native-artifact.mjs +2 -2
- package/skills/reverse-engineer-anything/SKILL.md +142 -20
- package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +31 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +118 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +147 -16
- package/skills/reverse-engineer-anything/references/runtime-observation.md +57 -7
- package/third_party/README.md +1 -1
- package/third_party/wabt/README.md +24 -0
- package/dist/browser/history/HarCaptureAdapter.js +0 -20
- package/dist/cli/streamedJsonOutput.js +0 -135
- package/dist/cliJsonFile.js +0 -179
- /package/dist/{application/binary → process}/AbortablePromise.js +0 -0
|
@@ -0,0 +1,1308 @@
|
|
|
1
|
+
import { __esmMin } from "./rolldown-runtime-DXoylpqc.js";
|
|
2
|
+
import { err, hasZipSignature, init_localPath, init_result, init_zipPackageFormat, isPathWithinRoot, isZipPackageFormat, ok, zipPackageFormatForPath } from "./reconstructionObligationLedgerSchemas-Bao0xMr-.js";
|
|
3
|
+
import { AnalysisCancelledError, BinaryTargetError, init_analysisErrorCore, init_configurationErrors } from "./errorSchemas-CTRmvMl3.js";
|
|
4
|
+
import { init_RegularFile, openRegularFile, sameRegularFileState } from "./RegularFile-B_6KPCNQ.js";
|
|
5
|
+
import { admitRawBinary, init_rawBinary, rawBinarySelectionError } from "./toolOutputSchemaGroups-DRiYs1je.js";
|
|
6
|
+
import { classifyFatContainerIdentity, init_machoContainer, readFatContainerHeader } from "./machoContainer-C8BIkkq3.js";
|
|
7
|
+
import { MAX_XML_PLIST_PROBE_BYTES, createXmlPlistSignatureProbe, hasBinaryPlistSignature, init_appleArchiveFormat, init_dosMz, observeMzWindowsHeader, parseDosMzHeader } from "./appleArchiveFormat-tVoI2ykA.js";
|
|
8
|
+
import { init_dosCom, validateDosComLength } from "./managedToolContracts-D60QmIYj.js";
|
|
9
|
+
import { decodeXmlPlistText, init_InterfaceBuilderDecodeBudget, init_propertyListXmlText, preflightPropertyListDecode } from "./InterfaceBuilderDecodeBudget-D4omRUe4.js";
|
|
10
|
+
import { init_propertyListKeys, omitPrototypeKeys, parseXmlPropertyList } from "./propertyListKeys-G8e74YWb.js";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { extname, isAbsolute, join, resolve } from "node:path";
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
14
|
+
import { access, lstat, opendir, readFile, realpath, stat } from "node:fs/promises";
|
|
15
|
+
import { constants } from "node:fs";
|
|
16
|
+
import { parseBinary } from "plist";
|
|
17
|
+
|
|
18
|
+
//#region dist/domain/elfFixedHeader.js
|
|
19
|
+
var readElfFixedHeader;
|
|
20
|
+
function init_elfFixedHeader() {
|
|
21
|
+
return (init_elfFixedHeader = __esmMin((() => {
|
|
22
|
+
init_result();
|
|
23
|
+
readElfFixedHeader = (bytes, totalBytes = bytes.length) => {
|
|
24
|
+
if (bytes.length >= 4 && bytes.toString("hex", 0, 4) !== "7f454c46") return err("not an ELF image");
|
|
25
|
+
if (bytes.length < 16) return err("ELF identification is truncated");
|
|
26
|
+
const classByte = bytes[4];
|
|
27
|
+
if (classByte !== 1 && classByte !== 2) return err("unsupported ELF class");
|
|
28
|
+
const dataByte = bytes[5];
|
|
29
|
+
if (dataByte !== 1 && dataByte !== 2) return err("unsupported ELF endianness");
|
|
30
|
+
if (bytes[6] !== 1) return err("unsupported ELF identification version");
|
|
31
|
+
const elfClass = classByte === 1 ? 32 : 64;
|
|
32
|
+
const minimumSize = elfClass === 32 ? 52 : 64;
|
|
33
|
+
if (!Number.isSafeInteger(totalBytes) || totalBytes < bytes.length || totalBytes < minimumSize || bytes.length < minimumSize) return err(`truncated ELF header: an ELF${elfClass} header needs ${minimumSize} bytes; the file has ${totalBytes}`);
|
|
34
|
+
const littleEndian = dataByte === 1;
|
|
35
|
+
const readU16 = (offset) => littleEndian ? bytes.readUInt16LE(offset) : bytes.readUInt16BE(offset);
|
|
36
|
+
const readU32 = (offset) => littleEndian ? bytes.readUInt32LE(offset) : bytes.readUInt32BE(offset);
|
|
37
|
+
if (readU32(20) !== 1) return err("unsupported ELF header version");
|
|
38
|
+
const headerSize = readU16(elfClass === 32 ? 40 : 52);
|
|
39
|
+
if (headerSize < minimumSize || headerSize > totalBytes) return err("invalid ELF header size");
|
|
40
|
+
return ok({
|
|
41
|
+
elfClass,
|
|
42
|
+
byteOrder: littleEndian ? "little" : "big",
|
|
43
|
+
headerSize
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
})))();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region dist/application/MipsElfSharedLoad.js
|
|
51
|
+
var readMipsElfSharedLoad;
|
|
52
|
+
function init_MipsElfSharedLoad() {
|
|
53
|
+
return (init_MipsElfSharedLoad = __esmMin((() => {
|
|
54
|
+
init_result();
|
|
55
|
+
readMipsElfSharedLoad = async (programHeaders, little, fileSize, read, checkCancelled, sections) => {
|
|
56
|
+
const u32 = (bytes, offset) => little ? bytes.readUInt32LE(offset) : bytes.readUInt32BE(offset);
|
|
57
|
+
const loads = [];
|
|
58
|
+
let dynamic;
|
|
59
|
+
for (let position = 0; position < programHeaders.length; position += 32) {
|
|
60
|
+
checkCancelled();
|
|
61
|
+
const type = u32(programHeaders, position);
|
|
62
|
+
const offset = u32(programHeaders, position + 4);
|
|
63
|
+
const size = u32(programHeaders, position + 16);
|
|
64
|
+
if (type === 1) {
|
|
65
|
+
const address = u32(programHeaders, position + 8);
|
|
66
|
+
const memorySize = u32(programHeaders, position + 20);
|
|
67
|
+
if (offset > fileSize - size || size > memorySize || address + memorySize > 4294967296) return err("invalid or incomplete MIPS PT_LOAD range");
|
|
68
|
+
loads.push({
|
|
69
|
+
offset,
|
|
70
|
+
address,
|
|
71
|
+
size,
|
|
72
|
+
memorySize
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (type === 2) {
|
|
76
|
+
if (dynamic !== undefined) return err("duplicate MIPS PT_DYNAMIC tables");
|
|
77
|
+
dynamic = {
|
|
78
|
+
offset,
|
|
79
|
+
address: u32(programHeaders, position + 8),
|
|
80
|
+
size
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (dynamic === undefined) return err("MIPS shared image has no PT_DYNAMIC table");
|
|
85
|
+
if (dynamic.size === 0 || dynamic.size % 8 !== 0) return err("invalid MIPS ELF32 dynamic table size");
|
|
86
|
+
if (dynamic.offset > fileSize - dynamic.size) return err("MIPS PT_DYNAMIC range extends beyond the file");
|
|
87
|
+
const ranges = loads.filter((load) => load.memorySize > 0).sort((left, right) => left.address - right.address);
|
|
88
|
+
for (let i = 1; i < ranges.length; i += 1) {
|
|
89
|
+
checkCancelled();
|
|
90
|
+
const previous = ranges[i - 1];
|
|
91
|
+
if (ranges[i].address < previous.address + previous.memorySize) return err("overlapping MIPS PT_LOAD memory ranges require separate mapping verification");
|
|
92
|
+
}
|
|
93
|
+
const mapped = (address, length, fileBacked) => {
|
|
94
|
+
let low = 0;
|
|
95
|
+
let high = ranges.length;
|
|
96
|
+
while (low < high) {
|
|
97
|
+
const middle = Math.floor((low + high) / 2);
|
|
98
|
+
if (ranges[middle].address <= address) low = middle + 1;
|
|
99
|
+
else high = middle;
|
|
100
|
+
}
|
|
101
|
+
const range = ranges[low - 1];
|
|
102
|
+
return range !== undefined && address - range.address <= (fileBacked ? range.size : range.memorySize) - length ? range : undefined;
|
|
103
|
+
};
|
|
104
|
+
const dynamicMapping = mapped(dynamic.address, dynamic.size, true);
|
|
105
|
+
if (dynamicMapping === undefined || dynamicMapping.offset + dynamic.address - dynamicMapping.address !== dynamic.offset) return err("MIPS PT_DYNAMIC has no unique matching file-backed PT_LOAD range");
|
|
106
|
+
const chunkBytes = 64 * 1024;
|
|
107
|
+
const relevant = new Set([
|
|
108
|
+
2,
|
|
109
|
+
7,
|
|
110
|
+
8,
|
|
111
|
+
9,
|
|
112
|
+
17,
|
|
113
|
+
18,
|
|
114
|
+
19,
|
|
115
|
+
20,
|
|
116
|
+
23
|
|
117
|
+
]);
|
|
118
|
+
const tags = new Map();
|
|
119
|
+
let terminated = false;
|
|
120
|
+
for (let offset = 0; offset < dynamic.size && !terminated; offset += chunkBytes) {
|
|
121
|
+
const chunk = await read(dynamic.offset + offset, Math.min(chunkBytes, dynamic.size - offset), "dynamic table");
|
|
122
|
+
if (!chunk.ok) return chunk;
|
|
123
|
+
for (let position = 0; position < chunk.value.length; position += 8) {
|
|
124
|
+
checkCancelled();
|
|
125
|
+
const tag = u32(chunk.value, position);
|
|
126
|
+
if (tag === 0) {
|
|
127
|
+
terminated = true;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (!relevant.has(tag)) continue;
|
|
131
|
+
if (tags.has(tag)) return err(`duplicate MIPS dynamic tag ${tag}`);
|
|
132
|
+
tags.set(tag, u32(chunk.value, position + 4));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (!terminated) return err("MIPS dynamic table has no DT_NULL terminator");
|
|
136
|
+
if ([
|
|
137
|
+
2,
|
|
138
|
+
7,
|
|
139
|
+
8,
|
|
140
|
+
9,
|
|
141
|
+
23
|
|
142
|
+
].some((tag) => (tags.get(tag) ?? 0) !== 0)) return err("MIPS shared RELA or PLT relocation declarations require separate verification");
|
|
143
|
+
const address = tags.get(17);
|
|
144
|
+
const size = tags.get(18);
|
|
145
|
+
const stride = tags.get(19);
|
|
146
|
+
const checkSections = (offset, length) => {
|
|
147
|
+
let observed = 0;
|
|
148
|
+
for (const section of sections) {
|
|
149
|
+
checkCancelled();
|
|
150
|
+
if (section.size === 0) continue;
|
|
151
|
+
if (section.type !== 9 || section.entrySize !== 8 || section.offset !== offset || section.size !== length) return "MIPS section relocation declarations outside the dynamic REL table require separate verification";
|
|
152
|
+
observed += 1;
|
|
153
|
+
}
|
|
154
|
+
return observed > 1 ? "duplicate MIPS section relocation declarations require separate verification" : undefined;
|
|
155
|
+
};
|
|
156
|
+
const emptyRelocations = () => {
|
|
157
|
+
const reason = checkSections(0, 0);
|
|
158
|
+
return reason === undefined ? ok({
|
|
159
|
+
status: "complete",
|
|
160
|
+
relocationCount: 0,
|
|
161
|
+
relocationTypes: [],
|
|
162
|
+
symbolRelativeCount: 0
|
|
163
|
+
}) : err(reason);
|
|
164
|
+
};
|
|
165
|
+
if (address === undefined && size === undefined && stride === undefined) return emptyRelocations();
|
|
166
|
+
if (address === undefined || size === undefined || stride !== 8 || size % 8 !== 0) return err("incomplete or invalid MIPS DT_REL/DT_RELSZ/DT_RELENT declaration");
|
|
167
|
+
if (size === 0) return emptyRelocations();
|
|
168
|
+
const mapping = mapped(address, size, true);
|
|
169
|
+
if (mapping === undefined) return err("MIPS DT_REL range has no unique complete file-backed PT_LOAD mapping");
|
|
170
|
+
const fileOffset = mapping.offset + address - mapping.address;
|
|
171
|
+
const sectionReason = checkSections(fileOffset, size);
|
|
172
|
+
if (sectionReason !== undefined) return err(sectionReason);
|
|
173
|
+
let symbolRelativeCount = 0;
|
|
174
|
+
const types = new Set();
|
|
175
|
+
for (let offset = 0; offset < size; offset += chunkBytes) {
|
|
176
|
+
const chunk = await read(fileOffset + offset, Math.min(chunkBytes, size - offset), "dynamic REL records");
|
|
177
|
+
if (!chunk.ok) return chunk;
|
|
178
|
+
for (let position = 0; position < chunk.value.length; position += 8) {
|
|
179
|
+
checkCancelled();
|
|
180
|
+
const info = u32(chunk.value, position + 4);
|
|
181
|
+
const type = info & 255;
|
|
182
|
+
const relocationAddress = u32(chunk.value, position);
|
|
183
|
+
if (type === 3 && mapped(relocationAddress, 4, false) === undefined) return err("MIPS REL32 destination has no unique complete PT_LOAD memory range");
|
|
184
|
+
types.add(type);
|
|
185
|
+
if (type === 3 && info >>> 8 !== 0) symbolRelativeCount += 1;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return ok({
|
|
189
|
+
status: "complete",
|
|
190
|
+
relocationCount: size / 8,
|
|
191
|
+
relocationTypes: [...types].sort((left, right) => left - right),
|
|
192
|
+
symbolRelativeCount
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
})))();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
//#endregion
|
|
199
|
+
//#region dist/application/MipsGnuAttributes.js
|
|
200
|
+
var MIPS_GNU_ATTRIBUTES_MAX_BYTES, FORMAT_VERSION, TAG_FILE, TAG_GNU_MIPS_ABI_FP, TAG_GNU_MIPS_ABI_MSA, parseMipsGnuAttributes;
|
|
201
|
+
function init_MipsGnuAttributes() {
|
|
202
|
+
return (init_MipsGnuAttributes = __esmMin((() => {
|
|
203
|
+
init_result();
|
|
204
|
+
MIPS_GNU_ATTRIBUTES_MAX_BYTES = 4096;
|
|
205
|
+
FORMAT_VERSION = 65;
|
|
206
|
+
TAG_FILE = 1;
|
|
207
|
+
TAG_GNU_MIPS_ABI_FP = 4;
|
|
208
|
+
TAG_GNU_MIPS_ABI_MSA = 8;
|
|
209
|
+
parseMipsGnuAttributes = (bytes, littleEndian) => {
|
|
210
|
+
if (bytes.length === 0 || bytes[0] !== FORMAT_VERSION) return err("unsupported MIPS GNU attribute section format version");
|
|
211
|
+
const readU32 = (offset) => littleEndian ? bytes.readUInt32LE(offset) : bytes.readUInt32BE(offset);
|
|
212
|
+
const readUleb = (offset, end) => {
|
|
213
|
+
let value = 0;
|
|
214
|
+
for (let index = 0; index < 5 && offset + index < end; index += 1) {
|
|
215
|
+
const byte = bytes[offset + index];
|
|
216
|
+
value += (byte & 127) * 2 ** (7 * index);
|
|
217
|
+
if ((byte & 128) === 0) return value <= 4294967295 ? {
|
|
218
|
+
value,
|
|
219
|
+
next: offset + index + 1
|
|
220
|
+
} : undefined;
|
|
221
|
+
}
|
|
222
|
+
return undefined;
|
|
223
|
+
};
|
|
224
|
+
let fpAbi = null;
|
|
225
|
+
let msa = null;
|
|
226
|
+
let vendorSeen = false;
|
|
227
|
+
let position = 1;
|
|
228
|
+
while (position < bytes.length) {
|
|
229
|
+
if (bytes.length - position < 4) return err("truncated MIPS GNU attribute subsection length");
|
|
230
|
+
const length = readU32(position);
|
|
231
|
+
if (length < 4 || length > bytes.length - position) return err("MIPS GNU attribute subsection length does not fit the section");
|
|
232
|
+
const end = position + length;
|
|
233
|
+
const vendorEnd = bytes.indexOf(0, position + 4);
|
|
234
|
+
if (vendorEnd < 0 || vendorEnd >= end) return err("unterminated MIPS GNU attribute vendor name");
|
|
235
|
+
if (bytes.toString("latin1", position + 4, vendorEnd) !== "gnu") return err("MIPS ELF declares non-GNU vendor attributes that REA does not inspect");
|
|
236
|
+
if (vendorSeen) return err("duplicate MIPS GNU attribute vendor subsections");
|
|
237
|
+
vendorSeen = true;
|
|
238
|
+
let cursor = vendorEnd + 1;
|
|
239
|
+
while (cursor < end) {
|
|
240
|
+
const scopeStart = cursor;
|
|
241
|
+
const scope = readUleb(cursor, end);
|
|
242
|
+
if (scope === undefined) return err("malformed MIPS GNU attribute scope tag");
|
|
243
|
+
if (scope.value !== TAG_FILE) return err("MIPS GNU attributes scoped to sections or symbols are not inspected by REA");
|
|
244
|
+
if (end - scope.next < 4) return err("truncated MIPS GNU attribute scope length");
|
|
245
|
+
const scopeLength = readU32(scope.next);
|
|
246
|
+
if (scopeLength < scope.next + 4 - scopeStart || scopeLength > end - scopeStart) return err("MIPS GNU attribute scope length does not fit its subsection");
|
|
247
|
+
const scopeEnd = scopeStart + scopeLength;
|
|
248
|
+
cursor = scope.next + 4;
|
|
249
|
+
while (cursor < scopeEnd) {
|
|
250
|
+
const tag = readUleb(cursor, scopeEnd);
|
|
251
|
+
if (tag === undefined) return err("malformed MIPS GNU attribute tag");
|
|
252
|
+
if (tag.value !== TAG_GNU_MIPS_ABI_FP && tag.value !== TAG_GNU_MIPS_ABI_MSA) return err(`MIPS ELF declares GNU attribute tag ${tag.value}, which REA does not inspect`);
|
|
253
|
+
const value = readUleb(tag.next, scopeEnd);
|
|
254
|
+
if (value === undefined) return err("malformed MIPS GNU attribute value");
|
|
255
|
+
if (tag.value === TAG_GNU_MIPS_ABI_FP) {
|
|
256
|
+
if (fpAbi !== null) return err("duplicate MIPS GNU floating-point ABI attributes");
|
|
257
|
+
fpAbi = value.value;
|
|
258
|
+
} else {
|
|
259
|
+
if (msa !== null) return err("duplicate MIPS GNU MSA ABI attributes");
|
|
260
|
+
msa = value.value;
|
|
261
|
+
}
|
|
262
|
+
cursor = value.next;
|
|
263
|
+
}
|
|
264
|
+
cursor = scopeEnd;
|
|
265
|
+
}
|
|
266
|
+
position = end;
|
|
267
|
+
}
|
|
268
|
+
return ok({
|
|
269
|
+
fpAbi,
|
|
270
|
+
msa
|
|
271
|
+
});
|
|
272
|
+
};
|
|
273
|
+
})))();
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
//#endregion
|
|
277
|
+
//#region dist/application/MipsElfMetadata.js
|
|
278
|
+
var SHT_GNU_ATTRIBUTES, readMipsElfMetadata;
|
|
279
|
+
function init_MipsElfMetadata() {
|
|
280
|
+
return (init_MipsElfMetadata = __esmMin((() => {
|
|
281
|
+
init_elfFixedHeader();
|
|
282
|
+
init_result();
|
|
283
|
+
init_MipsElfSharedLoad();
|
|
284
|
+
init_MipsGnuAttributes();
|
|
285
|
+
SHT_GNU_ATTRIBUTES = 1879048181;
|
|
286
|
+
readMipsElfMetadata = async (handle, metadata, checkCancelled) => {
|
|
287
|
+
checkCancelled();
|
|
288
|
+
if (metadata.elfClass !== 32) return err("MIPS ABI record inspection currently supports ELF32 only");
|
|
289
|
+
const fileSize = (await handle.stat()).size;
|
|
290
|
+
checkCancelled();
|
|
291
|
+
const read = async (offset, length, label) => {
|
|
292
|
+
checkCancelled();
|
|
293
|
+
if (!Number.isSafeInteger(fileSize) || offset < 0 || length < 0 || offset > fileSize - length) return err(`MIPS ${label} lies outside the file`);
|
|
294
|
+
const bytes = Buffer.alloc(length);
|
|
295
|
+
let total = 0;
|
|
296
|
+
while (total < length) {
|
|
297
|
+
checkCancelled();
|
|
298
|
+
const observed = await handle.read(bytes, total, length - total, offset + total);
|
|
299
|
+
checkCancelled();
|
|
300
|
+
if (observed.bytesRead === 0) return err(`truncated MIPS ${label}`);
|
|
301
|
+
total += observed.bytesRead;
|
|
302
|
+
}
|
|
303
|
+
return ok(bytes);
|
|
304
|
+
};
|
|
305
|
+
const header = await read(0, 52, "ELF32 header");
|
|
306
|
+
if (!header.ok) return header;
|
|
307
|
+
const bytes = header.value;
|
|
308
|
+
const fixedHeader = readElfFixedHeader(bytes, fileSize);
|
|
309
|
+
if (!fixedHeader.ok) return fixedHeader;
|
|
310
|
+
const little = metadata.byteOrder === "little";
|
|
311
|
+
const u16 = (data, offset) => little ? data.readUInt16LE(offset) : data.readUInt16BE(offset);
|
|
312
|
+
const u32 = (data, offset) => little ? data.readUInt32LE(offset) : data.readUInt32BE(offset);
|
|
313
|
+
if (fixedHeader.value.elfClass !== 32 || fixedHeader.value.byteOrder !== metadata.byteOrder || u16(bytes, 18) !== 8 || u16(bytes, 16) !== metadata.type || u32(bytes, 36) !== metadata.flags) return err("MIPS ELF header no longer matches the resolved identity");
|
|
314
|
+
if (fixedHeader.value.headerSize !== 52) return err("invalid MIPS ELF32 version or header size");
|
|
315
|
+
const tables = [{
|
|
316
|
+
label: "program header table",
|
|
317
|
+
offset: u32(bytes, 28),
|
|
318
|
+
count: u16(bytes, 44),
|
|
319
|
+
stride: u16(bytes, 42),
|
|
320
|
+
entrySize: 32,
|
|
321
|
+
typeOffset: 0,
|
|
322
|
+
dataOffset: 4,
|
|
323
|
+
sizeOffset: 16,
|
|
324
|
+
recordType: 1879048195,
|
|
325
|
+
optional: false
|
|
326
|
+
}, {
|
|
327
|
+
label: "section header table",
|
|
328
|
+
offset: u32(bytes, 32),
|
|
329
|
+
count: u16(bytes, 48),
|
|
330
|
+
stride: u16(bytes, 46),
|
|
331
|
+
entrySize: 40,
|
|
332
|
+
typeOffset: 4,
|
|
333
|
+
dataOffset: 16,
|
|
334
|
+
sizeOffset: 20,
|
|
335
|
+
recordType: 1879048234,
|
|
336
|
+
optional: true
|
|
337
|
+
}];
|
|
338
|
+
if (u16(bytes, 44) === 65535 || u16(bytes, 48) >= 65280) return err("extended or reserved MIPS ELF table numbering is unsupported");
|
|
339
|
+
let record;
|
|
340
|
+
let sharedLoad;
|
|
341
|
+
let programHeaders;
|
|
342
|
+
const relocationSections = [];
|
|
343
|
+
const limitations = [];
|
|
344
|
+
let gnuAttributes = null;
|
|
345
|
+
for (const table of tables) {
|
|
346
|
+
if (table.count === 0) {
|
|
347
|
+
if (table.offset !== 0) return err(`unsupported extended or inconsistent MIPS ${table.label}`);
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
if (table.offset < 52 || table.stride !== table.entrySize) return err(`invalid MIPS ${table.label} offset or entry size`);
|
|
351
|
+
const count = table.optional ? Math.min(table.count, Math.max(0, Math.floor((fileSize - table.offset) / table.entrySize))) : table.count;
|
|
352
|
+
if (count < table.count) limitations.push(`MIPS ${table.label} at file offset ${table.offset} extends beyond the captured file: examined ${count} of ${table.count} complete headers. ABI declarations in unavailable headers remain unknown.`);
|
|
353
|
+
if (count === 0) continue;
|
|
354
|
+
const contents = await read(table.offset, count * table.entrySize, table.label);
|
|
355
|
+
if (!contents.ok) return contents;
|
|
356
|
+
if (!table.optional && metadata.type === 3) programHeaders = contents.value;
|
|
357
|
+
let found = false;
|
|
358
|
+
for (let i = 0; i < count; i += 1) {
|
|
359
|
+
checkCancelled();
|
|
360
|
+
const position = i * table.entrySize;
|
|
361
|
+
const type = u32(contents.value, position + table.typeOffset);
|
|
362
|
+
if (table.optional && type === SHT_GNU_ATTRIBUTES) {
|
|
363
|
+
if (gnuAttributes !== null) return err("duplicate MIPS GNU attribute sections");
|
|
364
|
+
const size = u32(contents.value, position + 20);
|
|
365
|
+
if (size === 0 || size > 4096) return err(`MIPS GNU attribute section size ${size} is outside REA's inspected bound of ${MIPS_GNU_ATTRIBUTES_MAX_BYTES} bytes`);
|
|
366
|
+
const section = await read(u32(contents.value, position + 16), size, "GNU attribute section");
|
|
367
|
+
if (!section.ok) return section;
|
|
368
|
+
const parsed = parseMipsGnuAttributes(section.value, little);
|
|
369
|
+
if (!parsed.ok) return parsed;
|
|
370
|
+
gnuAttributes = parsed.value;
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
if (metadata.type === 3 && table.optional && (type === 4 || type === 9)) relocationSections.push({
|
|
374
|
+
type,
|
|
375
|
+
offset: u32(contents.value, position + 16),
|
|
376
|
+
size: u32(contents.value, position + 20),
|
|
377
|
+
entrySize: u32(contents.value, position + 36)
|
|
378
|
+
});
|
|
379
|
+
if (type !== table.recordType) continue;
|
|
380
|
+
if (found) return err(`duplicate MIPS ABI records in ${table.label}`);
|
|
381
|
+
found = true;
|
|
382
|
+
const offset = u32(contents.value, position + table.dataOffset);
|
|
383
|
+
const size = u32(contents.value, position + table.sizeOffset);
|
|
384
|
+
if (size !== 24) return err("unsupported MIPS ABI record size; expected 24 bytes");
|
|
385
|
+
const candidate = await read(offset, 24, "ABI record");
|
|
386
|
+
if (!candidate.ok) return candidate;
|
|
387
|
+
if (record !== undefined && !record.equals(candidate.value)) return err("conflicting MIPS program/section ABI declarations");
|
|
388
|
+
record = candidate.value;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (metadata.type === 3 && programHeaders !== undefined) {
|
|
392
|
+
if (limitations.length > 0) sharedLoad = {
|
|
393
|
+
status: "unavailable",
|
|
394
|
+
reason: `MIPS shared-image relocation declaration sources are incomplete. ${limitations.join(" ")}`
|
|
395
|
+
};
|
|
396
|
+
else {
|
|
397
|
+
const shared = await readMipsElfSharedLoad(programHeaders, little, fileSize, read, checkCancelled, relocationSections);
|
|
398
|
+
sharedLoad = shared.ok ? shared.value : {
|
|
399
|
+
status: "unavailable",
|
|
400
|
+
reason: shared.error
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
const shared = metadata.type === 3 ? { sharedLoad: sharedLoad ?? {
|
|
405
|
+
status: "unavailable",
|
|
406
|
+
reason: "MIPS shared image has no inspected program header table"
|
|
407
|
+
} } : {};
|
|
408
|
+
if (record === undefined) return ok({
|
|
409
|
+
abiFlags: null,
|
|
410
|
+
gnuAttributes,
|
|
411
|
+
limitations,
|
|
412
|
+
...shared
|
|
413
|
+
});
|
|
414
|
+
const abiFlags = {
|
|
415
|
+
version: u16(record, 0),
|
|
416
|
+
isaLevel: record.readUInt8(2),
|
|
417
|
+
isaRevision: record.readUInt8(3),
|
|
418
|
+
gprSize: record.readUInt8(4),
|
|
419
|
+
cpr1Size: record.readUInt8(5),
|
|
420
|
+
cpr2Size: record.readUInt8(6),
|
|
421
|
+
fpAbi: record.readUInt8(7),
|
|
422
|
+
isaExtension: u32(record, 8),
|
|
423
|
+
ases: u32(record, 12),
|
|
424
|
+
flags1: u32(record, 16),
|
|
425
|
+
flags2: u32(record, 20)
|
|
426
|
+
};
|
|
427
|
+
if (gnuAttributes !== null && gnuAttributes.fpAbi !== null && gnuAttributes.fpAbi !== 0 && gnuAttributes.fpAbi !== abiFlags.fpAbi) return err("conflicting MIPS ABI flags and GNU floating-point ABI declarations");
|
|
428
|
+
return ok({
|
|
429
|
+
abiFlags,
|
|
430
|
+
gnuAttributes,
|
|
431
|
+
limitations,
|
|
432
|
+
...shared
|
|
433
|
+
});
|
|
434
|
+
};
|
|
435
|
+
})))();
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
//#endregion
|
|
439
|
+
//#region dist/application/AppBundleExecutable.js
|
|
440
|
+
var BINARY_PLIST_DECODE_BYTES, BUNDLE_LAYOUTS, defaultFileSystem, resolveAppBundleExecutable, presentLayout, layoutPlistPresent, isAbsence, errorCode, codeDescription, isSystemErrorCode, isPermissionDenied, errorReason, wrappedBundle, resolveLayoutExecutable, parseXmlPlistExecutable, executableName, executableEntrySchema, parseBinaryPlistExecutable, isSafeExecutableName;
|
|
441
|
+
function init_AppBundleExecutable() {
|
|
442
|
+
return (init_AppBundleExecutable = __esmMin((() => {
|
|
443
|
+
init_InterfaceBuilderDecodeBudget();
|
|
444
|
+
init_configurationErrors();
|
|
445
|
+
init_localPath();
|
|
446
|
+
init_propertyListKeys();
|
|
447
|
+
init_propertyListXmlText();
|
|
448
|
+
init_appleArchiveFormat();
|
|
449
|
+
init_result();
|
|
450
|
+
BINARY_PLIST_DECODE_BYTES = 16 * 1024 * 1024;
|
|
451
|
+
BUNDLE_LAYOUTS = [{
|
|
452
|
+
plist: ["Contents", "Info.plist"],
|
|
453
|
+
programs: ["Contents", "MacOS"],
|
|
454
|
+
programsLabel: "Contents/MacOS"
|
|
455
|
+
}, {
|
|
456
|
+
plist: ["Info.plist"],
|
|
457
|
+
programs: [],
|
|
458
|
+
programsLabel: "the bundle root"
|
|
459
|
+
}];
|
|
460
|
+
defaultFileSystem = {
|
|
461
|
+
readFile,
|
|
462
|
+
realpath
|
|
463
|
+
};
|
|
464
|
+
resolveAppBundleExecutable = async (path, fileSystem = defaultFileSystem) => {
|
|
465
|
+
try {
|
|
466
|
+
const layout = await presentLayout(path);
|
|
467
|
+
if (layout !== undefined) return resolveLayoutExecutable(path, layout, fileSystem);
|
|
468
|
+
const wrapped = await wrappedBundle(path);
|
|
469
|
+
if (wrapped !== undefined) {
|
|
470
|
+
const wrappedLayout = await presentLayout(wrapped);
|
|
471
|
+
if (wrappedLayout !== undefined) return resolveLayoutExecutable(wrapped, wrappedLayout, fileSystem);
|
|
472
|
+
}
|
|
473
|
+
} catch (cause) {
|
|
474
|
+
if (cause instanceof BinaryTargetError) return err(cause);
|
|
475
|
+
return err(new BinaryTargetError(path, errorReason(cause, path), { cause }));
|
|
476
|
+
}
|
|
477
|
+
return err(new BinaryTargetError(path, `app Info.plist is missing or no supported bundle layout was found: ${path}`, { cause: new Error("No Contents/Info.plist, root Info.plist, or single Wrapper/*.app bundle was found") }));
|
|
478
|
+
};
|
|
479
|
+
presentLayout = async (bundle) => {
|
|
480
|
+
for (const layout of BUNDLE_LAYOUTS) if (await layoutPlistPresent(join(bundle, ...layout.plist))) return layout;
|
|
481
|
+
return undefined;
|
|
482
|
+
};
|
|
483
|
+
layoutPlistPresent = async (path) => {
|
|
484
|
+
try {
|
|
485
|
+
return (await stat(path)).isFile();
|
|
486
|
+
} catch (cause) {
|
|
487
|
+
if (isAbsence(cause)) return false;
|
|
488
|
+
if (isPermissionDenied(cause)) throw new BinaryTargetError(path, `permission denied inspecting app Info.plist ${path}`, { cause });
|
|
489
|
+
throw cause;
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
isAbsence = (cause) => {
|
|
493
|
+
const code = errorCode(cause);
|
|
494
|
+
return code === "ENOENT" || code === "ENOTDIR";
|
|
495
|
+
};
|
|
496
|
+
errorCode = (cause) => cause instanceof Error ? Reflect.get(cause, "code") : undefined;
|
|
497
|
+
codeDescription = (cause) => {
|
|
498
|
+
const code = errorCode(cause);
|
|
499
|
+
return typeof code === "string" || typeof code === "number" ? ` (${String(code)})` : "";
|
|
500
|
+
};
|
|
501
|
+
isSystemErrorCode = (cause) => {
|
|
502
|
+
const code = errorCode(cause);
|
|
503
|
+
return typeof code === "string" && /^[A-Z][A-Z0-9_]+$/u.test(code) && !code.startsWith("ERR_");
|
|
504
|
+
};
|
|
505
|
+
isPermissionDenied = (cause) => errorCode(cause) === "EACCES" || errorCode(cause) === "EPERM";
|
|
506
|
+
errorReason = (cause, path) => isPermissionDenied(cause) ? `permission denied accessing app bundle path ${path}` : isAbsence(cause) ? `app bundle path is missing: ${path}` : `could not inspect app bundle path ${path}`;
|
|
507
|
+
wrappedBundle = async (bundle) => {
|
|
508
|
+
const wrapper = join(bundle, "Wrapper");
|
|
509
|
+
try {
|
|
510
|
+
if (!(await lstat(wrapper)).isDirectory()) return undefined;
|
|
511
|
+
} catch (cause) {
|
|
512
|
+
if (isAbsence(cause)) return undefined;
|
|
513
|
+
throw cause;
|
|
514
|
+
}
|
|
515
|
+
let app;
|
|
516
|
+
for await (const entry of await opendir(wrapper)) {
|
|
517
|
+
if (!entry.isDirectory() || !entry.name.toLowerCase().endsWith(".app")) continue;
|
|
518
|
+
if (app !== undefined) return undefined;
|
|
519
|
+
app = join(wrapper, entry.name);
|
|
520
|
+
}
|
|
521
|
+
return app;
|
|
522
|
+
};
|
|
523
|
+
resolveLayoutExecutable = async (bundle, layout, fileSystem) => {
|
|
524
|
+
const plistPath = join(bundle, ...layout.plist);
|
|
525
|
+
let plist;
|
|
526
|
+
try {
|
|
527
|
+
plist = await fileSystem.readFile(plistPath);
|
|
528
|
+
} catch (cause) {
|
|
529
|
+
return err(new BinaryTargetError(plistPath, isPermissionDenied(cause) ? `permission denied reading app Info.plist ${plistPath}` : isAbsence(cause) ? `app Info.plist is missing: ${plistPath}` : `could not read app Info.plist ${plistPath}${codeDescription(cause)}`, { cause }));
|
|
530
|
+
}
|
|
531
|
+
let name;
|
|
532
|
+
try {
|
|
533
|
+
name = hasBinaryPlistSignature(plist) ? await (fileSystem.decodeBinaryPlist?.(plistPath) ?? parseBinaryPlistExecutable(plist)) : parseXmlPlistExecutable(decodeXmlPlistText(plist));
|
|
534
|
+
} catch (cause) {
|
|
535
|
+
return err(new BinaryTargetError(plistPath, isPermissionDenied(cause) ? `permission denied decoding app Info.plist ${plistPath}${codeDescription(cause)}` : isSystemErrorCode(cause) ? `could not decode app Info.plist ${plistPath}${codeDescription(cause)}` : `app Info.plist is malformed, unsupported, or lacks CFBundleExecutable: ${plistPath}${cause instanceof Error ? ` (${cause.message})` : ""}`, { cause }));
|
|
536
|
+
}
|
|
537
|
+
if (!isSafeExecutableName(name)) return err(new BinaryTargetError(bundle, "app has an unsafe CFBundleExecutable"));
|
|
538
|
+
const programs = join(bundle, ...layout.programs);
|
|
539
|
+
const executable = join(programs, name);
|
|
540
|
+
try {
|
|
541
|
+
const [canonicalPrograms, canonicalExecutable] = await Promise.all([fileSystem.realpath(programs), fileSystem.realpath(executable)]);
|
|
542
|
+
if (!isPathWithinRoot(canonicalPrograms, canonicalExecutable)) return err(new BinaryTargetError(bundle, `app program file leaves ${layout.programsLabel}`));
|
|
543
|
+
return ok({
|
|
544
|
+
executable: canonicalExecutable,
|
|
545
|
+
infoPlist: plistPath
|
|
546
|
+
});
|
|
547
|
+
} catch (cause) {
|
|
548
|
+
return err(new BinaryTargetError(executable, isPermissionDenied(cause) ? `permission denied resolving app program file ${executable}` : isAbsence(cause) ? `app program file is missing: ${executable}` : `could not resolve app program file ${executable}`, { cause }));
|
|
549
|
+
}
|
|
550
|
+
};
|
|
551
|
+
parseXmlPlistExecutable = (plist) => {
|
|
552
|
+
const { value } = parseXmlPropertyList(plist);
|
|
553
|
+
return executableName(value);
|
|
554
|
+
};
|
|
555
|
+
executableName = (value) => {
|
|
556
|
+
const executable = executableEntrySchema.safeParse(value);
|
|
557
|
+
if (!executable.success) throw new Error("CFBundleExecutable is missing");
|
|
558
|
+
return executable.data.CFBundleExecutable;
|
|
559
|
+
};
|
|
560
|
+
executableEntrySchema = z.looseObject({ CFBundleExecutable: z.string() });
|
|
561
|
+
parseBinaryPlistExecutable = (plist) => {
|
|
562
|
+
preflightPropertyListDecode(plist, BINARY_PLIST_DECODE_BYTES);
|
|
563
|
+
return executableName(omitPrototypeKeys(parseBinary(plist)).value);
|
|
564
|
+
};
|
|
565
|
+
isSafeExecutableName = (name) => name.length > 0 && name !== "." && name !== ".." && !name.includes("\0") && !/[/\\]/u.test(name);
|
|
566
|
+
})))();
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
//#endregion
|
|
570
|
+
//#region dist/domain/peMachine.js
|
|
571
|
+
var architectureForMachine, NATIVE_OS_OVERRIDES, decodePeMachine;
|
|
572
|
+
function init_peMachine() {
|
|
573
|
+
return (init_peMachine = __esmMin((() => {
|
|
574
|
+
architectureForMachine = (machine) => {
|
|
575
|
+
switch (machine) {
|
|
576
|
+
case 332: return "x86";
|
|
577
|
+
case 34404: return "x86_64";
|
|
578
|
+
case 448:
|
|
579
|
+
case 450:
|
|
580
|
+
case 452: return "arm";
|
|
581
|
+
case 43620: return "arm64";
|
|
582
|
+
}
|
|
583
|
+
return undefined;
|
|
584
|
+
};
|
|
585
|
+
NATIVE_OS_OVERRIDES = [
|
|
586
|
+
17988,
|
|
587
|
+
44484,
|
|
588
|
+
44485,
|
|
589
|
+
31609,
|
|
590
|
+
6547,
|
|
591
|
+
6546
|
|
592
|
+
];
|
|
593
|
+
decodePeMachine = (machine) => {
|
|
594
|
+
const direct = architectureForMachine(machine);
|
|
595
|
+
if (direct !== undefined) return {
|
|
596
|
+
architecture: direct,
|
|
597
|
+
nativeOsOverride: false
|
|
598
|
+
};
|
|
599
|
+
for (const override of NATIVE_OS_OVERRIDES) {
|
|
600
|
+
const architecture = architectureForMachine(machine ^ override);
|
|
601
|
+
if (architecture !== undefined) return {
|
|
602
|
+
architecture,
|
|
603
|
+
nativeOsOverride: true
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
return undefined;
|
|
607
|
+
};
|
|
608
|
+
})))();
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
//#endregion
|
|
612
|
+
//#region dist/domain/binaryTarget.js
|
|
613
|
+
var parseExecutableHeader, parseThinMachO, parseFatMachO, fatHostArchitecture, fatIdentityError, parseElf, parseMz, parsePeRecord, parseCodeViewData, peDebugDirectoryEntry, peRvaToFileOffset, parsePeCodeViewFromBuffer, peManagedStatus, machArchitecture, elfArchitecture;
|
|
614
|
+
function init_binaryTarget() {
|
|
615
|
+
return (init_binaryTarget = __esmMin((() => {
|
|
616
|
+
init_result();
|
|
617
|
+
init_elfFixedHeader();
|
|
618
|
+
init_dosMz();
|
|
619
|
+
init_peMachine();
|
|
620
|
+
init_machoContainer();
|
|
621
|
+
parseExecutableHeader = (bytes, hostArchitecture, fileSize = bytes.length, mzWindowsHeaderSignature) => {
|
|
622
|
+
if (bytes.length >= 4 && bytes.subarray(0, 4).equals(Buffer.from([
|
|
623
|
+
127,
|
|
624
|
+
69,
|
|
625
|
+
76,
|
|
626
|
+
70
|
|
627
|
+
]))) return parseElf(bytes, fileSize);
|
|
628
|
+
if (bytes.length >= 2 && bytes[0] === 77 && bytes[1] === 90) return parseMz(bytes, fileSize, mzWindowsHeaderSignature);
|
|
629
|
+
if (bytes.length < 8) return err("truncated or unsupported binary header");
|
|
630
|
+
const magic = bytes.readUInt32BE(0);
|
|
631
|
+
if ([
|
|
632
|
+
4277009102,
|
|
633
|
+
4277009103,
|
|
634
|
+
3472551422,
|
|
635
|
+
3489328638
|
|
636
|
+
].includes(magic)) return parseThinMachO(bytes, magic, fileSize);
|
|
637
|
+
const fatHeader = readFatContainerHeader(bytes, fileSize);
|
|
638
|
+
if (fatHeader.state !== "not-fat") return parseFatMachO(bytes, hostArchitecture, fatHeader);
|
|
639
|
+
return err("unsupported binary format");
|
|
640
|
+
};
|
|
641
|
+
parseThinMachO = (bytes, magic, fileSize) => {
|
|
642
|
+
const is64 = magic === 4277009103 || magic === 3489328638;
|
|
643
|
+
const headerSize = is64 ? 32 : 28;
|
|
644
|
+
if (bytes.length < headerSize) return err(`truncated Mach-O header: a ${is64 ? 64 : 32}-bit header needs ${headerSize} bytes; the file has ${fileSize}`);
|
|
645
|
+
const little = magic === 3472551422 || magic === 3489328638;
|
|
646
|
+
const read = (offset) => little ? bytes.readUInt32LE(offset) : bytes.readUInt32BE(offset);
|
|
647
|
+
const architecture = machArchitecture(read(4));
|
|
648
|
+
if (architecture === undefined) return err("unsupported Mach-O architecture");
|
|
649
|
+
const commandBytes = read(20);
|
|
650
|
+
if (headerSize + commandBytes > fileSize) return err(`truncated Mach-O load commands: the header declares ${commandBytes} bytes after its ${headerSize}-byte header; the file has ${fileSize}`);
|
|
651
|
+
return ok({
|
|
652
|
+
format: "mach-o",
|
|
653
|
+
architecture,
|
|
654
|
+
availableArchitectures: [architecture]
|
|
655
|
+
});
|
|
656
|
+
};
|
|
657
|
+
parseFatMachO = (bytes, host, header) => {
|
|
658
|
+
if (header.state === "needs-data") return err("truncated or invalid FAT architecture table");
|
|
659
|
+
if (header.state === "malformed") return err(header.reason);
|
|
660
|
+
const identityError = fatIdentityError(bytes, header);
|
|
661
|
+
if (identityError !== null) return err(identityError);
|
|
662
|
+
const architectures = [];
|
|
663
|
+
const slices = new Map();
|
|
664
|
+
for (const declaration of header.slices) {
|
|
665
|
+
const architecture = machArchitecture(declaration.cpuType);
|
|
666
|
+
if (architecture === undefined || architectures.includes(architecture)) continue;
|
|
667
|
+
architectures.push(architecture);
|
|
668
|
+
slices.set(architecture, {
|
|
669
|
+
offset: declaration.offset,
|
|
670
|
+
size: declaration.size
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
const preferred = fatHostArchitecture(host);
|
|
674
|
+
const slice = preferred === undefined ? undefined : slices.get(preferred);
|
|
675
|
+
if (preferred === undefined || slice === undefined) return err(`FAT binary has no host-compatible ${host} architecture`);
|
|
676
|
+
const minimumHeaderSize = preferred === "arm64" || preferred === "x86_64" ? 32 : 28;
|
|
677
|
+
if (slice.size < minimumHeaderSize) return err(`FAT slice for ${preferred} is shorter than its Mach-O header`);
|
|
678
|
+
return ok({
|
|
679
|
+
format: "mach-o-universal",
|
|
680
|
+
architecture: preferred,
|
|
681
|
+
availableArchitectures: architectures,
|
|
682
|
+
universalSlice: {
|
|
683
|
+
offset: slice.offset,
|
|
684
|
+
size: slice.size
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
};
|
|
688
|
+
fatHostArchitecture = (host) => {
|
|
689
|
+
switch (host) {
|
|
690
|
+
case "arm64": return "arm64";
|
|
691
|
+
case "x64": return "x86_64";
|
|
692
|
+
case "ia32": return "x86";
|
|
693
|
+
case "arm": return "arm";
|
|
694
|
+
default: return undefined;
|
|
695
|
+
}
|
|
696
|
+
};
|
|
697
|
+
fatIdentityError = (bytes, header) => {
|
|
698
|
+
const identity = classifyFatContainerIdentity(header, (offset) => {
|
|
699
|
+
if (offset >= bytes.length) return undefined;
|
|
700
|
+
if (offset + 4 > bytes.length) return null;
|
|
701
|
+
return bytes.readUInt32BE(offset);
|
|
702
|
+
});
|
|
703
|
+
if (identity.state === "needs-slice-header") return "FAT slice identity is outside the bounded prefix";
|
|
704
|
+
if (identity.state === "not-mach-o") return "FAT table does not identify a Mach-O image";
|
|
705
|
+
if (identity.state === "malformed") return identity.reason;
|
|
706
|
+
return null;
|
|
707
|
+
};
|
|
708
|
+
parseElf = (bytes, fileSize) => {
|
|
709
|
+
const fixedHeader = readElfFixedHeader(bytes, fileSize);
|
|
710
|
+
if (!fixedHeader.ok) return fixedHeader;
|
|
711
|
+
const { elfClass, byteOrder } = fixedHeader.value;
|
|
712
|
+
const little = byteOrder === "little";
|
|
713
|
+
const machine = little ? bytes.readUInt16LE(18) : bytes.readUInt16BE(18);
|
|
714
|
+
const architecture = elfArchitecture(machine);
|
|
715
|
+
if (architecture === undefined) return err("unsupported ELF architecture");
|
|
716
|
+
if (architecture === "mips" || architecture === "riscv" || architecture === "powerpc") {
|
|
717
|
+
const flagsOffset = elfClass === 32 ? 36 : 48;
|
|
718
|
+
const metadata = {
|
|
719
|
+
elfClass,
|
|
720
|
+
byteOrder: little ? "little" : "big",
|
|
721
|
+
type: little ? bytes.readUInt16LE(16) : bytes.readUInt16BE(16),
|
|
722
|
+
flags: little ? bytes.readUInt32LE(flagsOffset) : bytes.readUInt32BE(flagsOffset)
|
|
723
|
+
};
|
|
724
|
+
if (architecture === "powerpc") return ok({
|
|
725
|
+
format: "elf",
|
|
726
|
+
architecture,
|
|
727
|
+
availableArchitectures: [architecture],
|
|
728
|
+
powerpc: metadata
|
|
729
|
+
});
|
|
730
|
+
return architecture === "mips" ? ok({
|
|
731
|
+
format: "elf",
|
|
732
|
+
architecture,
|
|
733
|
+
availableArchitectures: [architecture],
|
|
734
|
+
mips: metadata
|
|
735
|
+
}) : ok({
|
|
736
|
+
format: "elf",
|
|
737
|
+
architecture,
|
|
738
|
+
availableArchitectures: [architecture],
|
|
739
|
+
riscv: metadata
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
return ok({
|
|
743
|
+
format: "elf",
|
|
744
|
+
architecture,
|
|
745
|
+
availableArchitectures: [architecture]
|
|
746
|
+
});
|
|
747
|
+
};
|
|
748
|
+
parseMz = (bytes, fileSize, signatureAtOffset) => {
|
|
749
|
+
const windowsHeader = observeMzWindowsHeader(bytes, fileSize, signatureAtOffset);
|
|
750
|
+
if (windowsHeader.state === "header-needed" || windowsHeader.state === "signature-needed") return err("Windows new-header pointer or signature is outside the bounded prefix");
|
|
751
|
+
if (windowsHeader.state === "declared") {
|
|
752
|
+
const { offset } = windowsHeader;
|
|
753
|
+
if (offset < 64 || offset > bytes.length - 24) return err("invalid or truncated Windows executable header in MZ image");
|
|
754
|
+
if ([
|
|
755
|
+
"NE",
|
|
756
|
+
"LE",
|
|
757
|
+
"LX"
|
|
758
|
+
].includes(windowsHeader.signature)) return err(`unsupported ${windowsHeader.signature} executable in MZ image`);
|
|
759
|
+
if (windowsHeader.signature !== "PE") return err("invalid or truncated Windows executable header in MZ image");
|
|
760
|
+
const codeView = parsePeCodeViewFromBuffer(bytes, offset);
|
|
761
|
+
return parsePeRecord(bytes.subarray(offset), codeView);
|
|
762
|
+
}
|
|
763
|
+
const parsed = parseDosMzHeader(bytes, fileSize, signatureAtOffset);
|
|
764
|
+
return parsed.ok ? ok({
|
|
765
|
+
format: "dos-mz",
|
|
766
|
+
architecture: "x86",
|
|
767
|
+
availableArchitectures: ["x86"]
|
|
768
|
+
}) : parsed;
|
|
769
|
+
};
|
|
770
|
+
parsePeRecord = (record, codeView) => {
|
|
771
|
+
if (record.length < 24 || record.toString("binary", 0, 4) !== "PE\0\0") return err("invalid or truncated PE header");
|
|
772
|
+
const machineType = record.readUInt16LE(4);
|
|
773
|
+
const machine = decodePeMachine(machineType);
|
|
774
|
+
if (machine === undefined) return err(`unsupported PE architecture (COFF machine 0x${machineType.toString(16).padStart(4, "0")})`);
|
|
775
|
+
const { architecture } = machine;
|
|
776
|
+
const optionalHeaderSize = record.readUInt16LE(20);
|
|
777
|
+
if (optionalHeaderSize > 4096 || record.length < 24 + optionalHeaderSize) return err("invalid or truncated PE optional header");
|
|
778
|
+
const optionalHeader = record.subarray(24, 24 + optionalHeaderSize);
|
|
779
|
+
const managed = peManagedStatus(optionalHeader, architecture);
|
|
780
|
+
if (!managed.ok) return managed;
|
|
781
|
+
if (machine.nativeOsOverride && !managed.value) return err("unsupported PE architecture");
|
|
782
|
+
const characteristics = record.readUInt16LE(22);
|
|
783
|
+
return ok({
|
|
784
|
+
format: "pe",
|
|
785
|
+
architecture,
|
|
786
|
+
availableArchitectures: [architecture],
|
|
787
|
+
executableRole: (characteristics & 2) === 0 ? "non-executable" : (characteristics & 8192) === 0 ? "application" : "shared-library",
|
|
788
|
+
managed: managed.value,
|
|
789
|
+
...codeView !== undefined ? { codeView } : {}
|
|
790
|
+
});
|
|
791
|
+
};
|
|
792
|
+
parseCodeViewData = (buffer, sizeOfData) => {
|
|
793
|
+
if (sizeOfData < 16 || buffer.length < 16) return undefined;
|
|
794
|
+
const magic = buffer.subarray(0, 4).toString("binary");
|
|
795
|
+
const pathOffset = magic === "RSDS" ? 24 : magic === "NB10" ? 16 : undefined;
|
|
796
|
+
if (pathOffset === undefined || sizeOfData <= pathOffset || buffer.length <= pathOffset) return undefined;
|
|
797
|
+
const end = buffer.indexOf(0, pathOffset);
|
|
798
|
+
if (end <= pathOffset || end >= sizeOfData) return undefined;
|
|
799
|
+
const pdbPath = buffer.toString("utf8", pathOffset, end);
|
|
800
|
+
const pdbFileName = pdbPath.split(/[/\\]/u).pop() ?? pdbPath;
|
|
801
|
+
if (magic === "RSDS" && sizeOfData >= 24 && buffer.length >= 24) {
|
|
802
|
+
const part1 = buffer.readUInt32LE(4).toString(16).padStart(8, "0");
|
|
803
|
+
const part2 = buffer.readUInt16LE(8).toString(16).padStart(4, "0");
|
|
804
|
+
const part3 = buffer.readUInt16LE(10).toString(16).padStart(4, "0");
|
|
805
|
+
const part4 = buffer.subarray(12, 14).toString("hex");
|
|
806
|
+
const part5 = buffer.subarray(14, 20).toString("hex");
|
|
807
|
+
const guid = `${part1}-${part2}-${part3}-${part4}-${part5}`;
|
|
808
|
+
const age = buffer.readUInt32LE(20);
|
|
809
|
+
return {
|
|
810
|
+
pdbPath,
|
|
811
|
+
pdbFileName,
|
|
812
|
+
guid,
|
|
813
|
+
age
|
|
814
|
+
};
|
|
815
|
+
}
|
|
816
|
+
if (magic === "NB10") {
|
|
817
|
+
const age = buffer.readUInt32LE(12);
|
|
818
|
+
return {
|
|
819
|
+
pdbPath,
|
|
820
|
+
pdbFileName,
|
|
821
|
+
guid: null,
|
|
822
|
+
age
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
return undefined;
|
|
826
|
+
};
|
|
827
|
+
peDebugDirectoryEntry = (optionalHeader) => {
|
|
828
|
+
if (optionalHeader.length < 2) return undefined;
|
|
829
|
+
const magic = optionalHeader.readUInt16LE(0);
|
|
830
|
+
if (magic !== 267 && magic !== 523) return undefined;
|
|
831
|
+
const directoryOffset = magic === 523 ? 112 : 96;
|
|
832
|
+
const directoryCountOffset = directoryOffset - 4;
|
|
833
|
+
if (optionalHeader.length < directoryCountOffset + 4) return undefined;
|
|
834
|
+
const directoryCount = optionalHeader.readUInt32LE(directoryCountOffset);
|
|
835
|
+
if (directoryCount <= 6) return undefined;
|
|
836
|
+
const debugEntryOffset = directoryOffset + 6 * 8;
|
|
837
|
+
if (optionalHeader.length < debugEntryOffset + 8) return undefined;
|
|
838
|
+
const debugRva = optionalHeader.readUInt32LE(debugEntryOffset);
|
|
839
|
+
const debugSize = optionalHeader.readUInt32LE(debugEntryOffset + 4);
|
|
840
|
+
if (debugRva === 0 || debugSize < 28) return undefined;
|
|
841
|
+
return {
|
|
842
|
+
debugRva,
|
|
843
|
+
debugSize,
|
|
844
|
+
sizeOfHeaders: optionalHeader.readUInt32LE(60)
|
|
845
|
+
};
|
|
846
|
+
};
|
|
847
|
+
peRvaToFileOffset = (rva, sectionTable, numberOfSections, sizeOfHeaders, size = 1) => {
|
|
848
|
+
if (rva < sizeOfHeaders && size <= sizeOfHeaders - rva) return rva;
|
|
849
|
+
for (let i = 0; i < numberOfSections; i++) {
|
|
850
|
+
const offset = i * 40;
|
|
851
|
+
if (sectionTable.length < offset + 40) break;
|
|
852
|
+
const virtualAddress = sectionTable.readUInt32LE(offset + 12);
|
|
853
|
+
const sizeOfRawData = sectionTable.readUInt32LE(offset + 16);
|
|
854
|
+
const pointerToRawData = sectionTable.readUInt32LE(offset + 20);
|
|
855
|
+
if (pointerToRawData > 0 && rva >= virtualAddress && rva - virtualAddress < sizeOfRawData && size <= sizeOfRawData - (rva - virtualAddress)) {
|
|
856
|
+
return pointerToRawData + (rva - virtualAddress);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
return undefined;
|
|
860
|
+
};
|
|
861
|
+
parsePeCodeViewFromBuffer = (fileBytes, peOffset) => {
|
|
862
|
+
if (fileBytes.length < peOffset + 24) return undefined;
|
|
863
|
+
const numberOfSections = fileBytes.readUInt16LE(peOffset + 6);
|
|
864
|
+
const optionalHeaderSize = fileBytes.readUInt16LE(peOffset + 20);
|
|
865
|
+
if (optionalHeaderSize > 4096 || fileBytes.length < peOffset + 24 + optionalHeaderSize) return undefined;
|
|
866
|
+
const optionalHeader = fileBytes.subarray(peOffset + 24, peOffset + 24 + optionalHeaderSize);
|
|
867
|
+
const debugDir = peDebugDirectoryEntry(optionalHeader);
|
|
868
|
+
if (debugDir === undefined) return undefined;
|
|
869
|
+
const sectionTableOffset = peOffset + 24 + optionalHeaderSize;
|
|
870
|
+
const sectionTableSize = numberOfSections * 40;
|
|
871
|
+
if (fileBytes.length < sectionTableOffset + sectionTableSize) return undefined;
|
|
872
|
+
const sectionTable = fileBytes.subarray(sectionTableOffset, sectionTableOffset + sectionTableSize);
|
|
873
|
+
const debugFileOffset = peRvaToFileOffset(debugDir.debugRva, sectionTable, numberOfSections, debugDir.sizeOfHeaders, Math.min(debugDir.debugSize, 4096));
|
|
874
|
+
if (debugFileOffset === undefined || fileBytes.length < debugFileOffset + 28) return undefined;
|
|
875
|
+
const maxDebugBytes = Math.min(debugDir.debugSize, fileBytes.length - debugFileOffset);
|
|
876
|
+
const numEntries = Math.floor(maxDebugBytes / 28);
|
|
877
|
+
for (let j = 0; j < numEntries; j++) {
|
|
878
|
+
const entryOffset = debugFileOffset + j * 28;
|
|
879
|
+
const type = fileBytes.readUInt32LE(entryOffset + 12);
|
|
880
|
+
if (type !== 2) continue;
|
|
881
|
+
const sizeOfData = fileBytes.readUInt32LE(entryOffset + 16);
|
|
882
|
+
let pointerToRawData = fileBytes.readUInt32LE(entryOffset + 24);
|
|
883
|
+
if (pointerToRawData === 0) {
|
|
884
|
+
const addressOfRawData = fileBytes.readUInt32LE(entryOffset + 20);
|
|
885
|
+
const mapped = peRvaToFileOffset(addressOfRawData, sectionTable, numberOfSections, debugDir.sizeOfHeaders, Math.min(sizeOfData, 4096));
|
|
886
|
+
if (mapped === undefined) continue;
|
|
887
|
+
pointerToRawData = mapped;
|
|
888
|
+
}
|
|
889
|
+
if (sizeOfData < 16 || fileBytes.length < pointerToRawData + Math.min(sizeOfData, 24)) continue;
|
|
890
|
+
const codeViewData = fileBytes.subarray(pointerToRawData, Math.min(fileBytes.length, pointerToRawData + sizeOfData));
|
|
891
|
+
const parsed = parseCodeViewData(codeViewData, sizeOfData);
|
|
892
|
+
if (parsed !== undefined) return parsed;
|
|
893
|
+
}
|
|
894
|
+
return undefined;
|
|
895
|
+
};
|
|
896
|
+
peManagedStatus = (optionalHeader, architecture) => {
|
|
897
|
+
if (optionalHeader.length < 2) return err("truncated PE optional header");
|
|
898
|
+
const magic = optionalHeader.readUInt16LE(0);
|
|
899
|
+
const expectedMagic = architecture === "x86_64" || architecture === "arm64" ? 523 : 267;
|
|
900
|
+
if (magic !== expectedMagic) return err("PE optional-header magic does not match its architecture");
|
|
901
|
+
const directoryOffset = magic === 523 ? 112 : 96;
|
|
902
|
+
const directoryCountOffset = directoryOffset - 4;
|
|
903
|
+
if (optionalHeader.length < directoryCountOffset + 4) return err("truncated PE optional header");
|
|
904
|
+
const directoryCount = optionalHeader.readUInt32LE(directoryCountOffset);
|
|
905
|
+
const requiredBytes = directoryOffset + directoryCount * 8;
|
|
906
|
+
if (!Number.isSafeInteger(requiredBytes) || requiredBytes > optionalHeader.length) return err("truncated PE data-directory table");
|
|
907
|
+
if (directoryCount <= 14) return ok(false);
|
|
908
|
+
const cliDirectory = directoryOffset + 14 * 8;
|
|
909
|
+
return ok(optionalHeader.readUInt32LE(cliDirectory) !== 0 || optionalHeader.readUInt32LE(cliDirectory + 4) !== 0);
|
|
910
|
+
};
|
|
911
|
+
machArchitecture = (cpu) => {
|
|
912
|
+
switch (cpu) {
|
|
913
|
+
case 7: return "x86";
|
|
914
|
+
case 16777223: return "x86_64";
|
|
915
|
+
case 12: return "arm";
|
|
916
|
+
case 16777228: return "arm64";
|
|
917
|
+
}
|
|
918
|
+
return undefined;
|
|
919
|
+
};
|
|
920
|
+
elfArchitecture = (machine) => {
|
|
921
|
+
switch (machine) {
|
|
922
|
+
case 3: return "x86";
|
|
923
|
+
case 62: return "x86_64";
|
|
924
|
+
case 8: return "mips";
|
|
925
|
+
case 20: return "powerpc";
|
|
926
|
+
case 40: return "arm";
|
|
927
|
+
case 183: return "arm64";
|
|
928
|
+
case 243: return "riscv";
|
|
929
|
+
}
|
|
930
|
+
return undefined;
|
|
931
|
+
};
|
|
932
|
+
})))();
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
//#endregion
|
|
936
|
+
//#region dist/application/BinaryTargetResolver.js
|
|
937
|
+
var XML_PLIST_PROBE_CHUNK_BYTES, parseBinaryTarget, classifyBinaryTargetFilesystemFailure, filesystemErrorCode, targetFailureReason, throwIfTargetResolutionCancelled, detectArtifactFormat, namedArtifactFormat, isArchiveFormat, sha256Handle, resolveAppBundle, readExecutableMetadata, readPeMetadata, readPeCodeView;
|
|
938
|
+
function init_BinaryTargetResolver() {
|
|
939
|
+
return (init_BinaryTargetResolver = __esmMin((() => {
|
|
940
|
+
init_configurationErrors();
|
|
941
|
+
init_RegularFile();
|
|
942
|
+
init_analysisErrorCore();
|
|
943
|
+
init_result();
|
|
944
|
+
init_MipsElfMetadata();
|
|
945
|
+
init_AppBundleExecutable();
|
|
946
|
+
init_dosCom();
|
|
947
|
+
init_rawBinary();
|
|
948
|
+
init_dosMz();
|
|
949
|
+
init_appleArchiveFormat();
|
|
950
|
+
init_zipPackageFormat();
|
|
951
|
+
init_binaryTarget();
|
|
952
|
+
XML_PLIST_PROBE_CHUNK_BYTES = 64 * 1024;
|
|
953
|
+
parseBinaryTarget = async (input, options = {}) => {
|
|
954
|
+
const cwd = options.cwd ?? process.cwd();
|
|
955
|
+
const hostArchitecture = options.hostArchitecture ?? process.arch;
|
|
956
|
+
const { targetKind, formatHint, signal, architecture, entryPoint } = options;
|
|
957
|
+
const candidate = isAbsolute(input) ? input : resolve(cwd, input);
|
|
958
|
+
try {
|
|
959
|
+
throwIfTargetResolutionCancelled(signal);
|
|
960
|
+
await access(candidate, constants.R_OK);
|
|
961
|
+
throwIfTargetResolutionCancelled(signal);
|
|
962
|
+
const canonical = await realpath(candidate);
|
|
963
|
+
const sourcePath = process.platform === "win32" ? candidate : canonical;
|
|
964
|
+
throwIfTargetResolutionCancelled(signal);
|
|
965
|
+
const resolved = await resolveAppBundle(canonical);
|
|
966
|
+
throwIfTargetResolutionCancelled(signal);
|
|
967
|
+
if (!resolved.ok) return err(resolved.error);
|
|
968
|
+
const { executable: path, infoPlist } = resolved.value;
|
|
969
|
+
const bundle = infoPlist === undefined ? {} : { bundleInfoPlist: infoPlist };
|
|
970
|
+
const handle = await openRegularFile(path, {
|
|
971
|
+
symlinks: "reject",
|
|
972
|
+
signal
|
|
973
|
+
});
|
|
974
|
+
try {
|
|
975
|
+
throwIfTargetResolutionCancelled(signal);
|
|
976
|
+
const metadata = await handle.stat();
|
|
977
|
+
throwIfTargetResolutionCancelled(signal);
|
|
978
|
+
if (formatHint === "raw-binary") {
|
|
979
|
+
if (targetKind !== undefined && targetKind !== "executable") return err(new BinaryTargetError(path, "raw-binary format requires an executable target kind", { constraint: "load_selection_rejected" }));
|
|
980
|
+
const admitted = admitRawBinary({
|
|
981
|
+
architecture,
|
|
982
|
+
entryPoint,
|
|
983
|
+
fileBytes: metadata.size
|
|
984
|
+
});
|
|
985
|
+
if (!admitted.ok) return err(new BinaryTargetError(path, admitted.error.reason, { constraint: admitted.error.constraint }));
|
|
986
|
+
return ok({
|
|
987
|
+
path,
|
|
988
|
+
sourcePath,
|
|
989
|
+
sha256: await sha256Handle(handle, path, metadata, signal),
|
|
990
|
+
kind: "executable",
|
|
991
|
+
format: "raw-binary",
|
|
992
|
+
architecture: admitted.value.architecture,
|
|
993
|
+
availableArchitectures: [admitted.value.architecture],
|
|
994
|
+
entryPoint: admitted.value.entryPoint,
|
|
995
|
+
entryPointSource: admitted.value.entryPointSource
|
|
996
|
+
});
|
|
997
|
+
}
|
|
998
|
+
const pairing = rawBinarySelectionError({
|
|
999
|
+
...formatHint === undefined ? {} : { format: formatHint },
|
|
1000
|
+
architecture,
|
|
1001
|
+
entryPoint
|
|
1002
|
+
});
|
|
1003
|
+
if (pairing !== undefined) return err(new BinaryTargetError(path, pairing, { constraint: "load_selection_rejected" }));
|
|
1004
|
+
if (formatHint === "dos-com") {
|
|
1005
|
+
if (targetKind !== undefined && targetKind !== "executable") return err(new BinaryTargetError(path, "DOS COM format requires an executable target kind", { constraint: "load_selection_rejected" }));
|
|
1006
|
+
const length = validateDosComLength(metadata.size);
|
|
1007
|
+
if (!length.ok) return err(new BinaryTargetError(path, length.error, { constraint: "file_format_rejected" }));
|
|
1008
|
+
return ok({
|
|
1009
|
+
path,
|
|
1010
|
+
sourcePath,
|
|
1011
|
+
sha256: await sha256Handle(handle, path, metadata, signal),
|
|
1012
|
+
kind: "executable",
|
|
1013
|
+
format: "dos-com",
|
|
1014
|
+
architecture: "x86",
|
|
1015
|
+
availableArchitectures: ["x86"]
|
|
1016
|
+
});
|
|
1017
|
+
}
|
|
1018
|
+
const artifactFormat = targetKind === "database" ? undefined : await detectArtifactFormat(path, handle, signal);
|
|
1019
|
+
if (targetKind === "database" || targetKind === undefined && path.toLowerCase().endsWith(".hop")) return ok({
|
|
1020
|
+
path,
|
|
1021
|
+
sourcePath,
|
|
1022
|
+
sha256: await sha256Handle(handle, path, metadata, signal),
|
|
1023
|
+
kind: "database",
|
|
1024
|
+
format: "analysis-database"
|
|
1025
|
+
});
|
|
1026
|
+
if (artifactFormat !== undefined) {
|
|
1027
|
+
const identity = {
|
|
1028
|
+
path,
|
|
1029
|
+
sourcePath,
|
|
1030
|
+
sha256: await sha256Handle(handle, path, metadata, signal)
|
|
1031
|
+
};
|
|
1032
|
+
return isArchiveFormat(artifactFormat) ? ok({
|
|
1033
|
+
...identity,
|
|
1034
|
+
kind: "archive",
|
|
1035
|
+
format: artifactFormat
|
|
1036
|
+
}) : ok({
|
|
1037
|
+
...identity,
|
|
1038
|
+
kind: "artifact",
|
|
1039
|
+
format: artifactFormat
|
|
1040
|
+
});
|
|
1041
|
+
}
|
|
1042
|
+
const detected = await readExecutableMetadata(handle, hostArchitecture, signal);
|
|
1043
|
+
if (!detected.ok) return err(new BinaryTargetError(path, detected.error, { constraint: "file_format_rejected" }));
|
|
1044
|
+
return ok({
|
|
1045
|
+
path,
|
|
1046
|
+
sourcePath,
|
|
1047
|
+
...bundle,
|
|
1048
|
+
sha256: await sha256Handle(handle, path, metadata, signal),
|
|
1049
|
+
kind: "executable",
|
|
1050
|
+
...detected.value
|
|
1051
|
+
});
|
|
1052
|
+
} finally {
|
|
1053
|
+
await handle.close();
|
|
1054
|
+
}
|
|
1055
|
+
} catch (cause) {
|
|
1056
|
+
if (cause instanceof AnalysisCancelledError) return err(cause);
|
|
1057
|
+
if (signal?.aborted === true && cause === signal.reason) return err(new AnalysisCancelledError("resolve_binary_target", { cause }));
|
|
1058
|
+
if (cause instanceof BinaryTargetError) return err(cause);
|
|
1059
|
+
if (!(cause instanceof Error)) throw cause;
|
|
1060
|
+
const failure = classifyBinaryTargetFilesystemFailure(candidate, cause);
|
|
1061
|
+
if (failure === undefined) throw cause;
|
|
1062
|
+
return err(failure);
|
|
1063
|
+
}
|
|
1064
|
+
};
|
|
1065
|
+
classifyBinaryTargetFilesystemFailure = (path, cause) => {
|
|
1066
|
+
if (!(cause instanceof Error)) return undefined;
|
|
1067
|
+
const code = filesystemErrorCode(cause);
|
|
1068
|
+
return code === undefined ? undefined : new BinaryTargetError(path, targetFailureReason(code, cause.message), { cause });
|
|
1069
|
+
};
|
|
1070
|
+
filesystemErrorCode = (cause) => {
|
|
1071
|
+
const code = Reflect.get(cause, "code");
|
|
1072
|
+
return typeof code === "string" ? code : undefined;
|
|
1073
|
+
};
|
|
1074
|
+
targetFailureReason = (code, detail) => {
|
|
1075
|
+
switch (code) {
|
|
1076
|
+
case "ENOENT":
|
|
1077
|
+
case "ENOTDIR": return `target does not exist or a path component is not a directory: ${detail}`;
|
|
1078
|
+
case "EACCES":
|
|
1079
|
+
case "EPERM": return `permission denied while reading target: ${detail}`;
|
|
1080
|
+
case "EISDIR": return `target is a directory, not a readable file: ${detail}`;
|
|
1081
|
+
case "ENOTFILE": return "target is not a regular file";
|
|
1082
|
+
case "ELOOP": return `target changed while being opened: ${detail}`;
|
|
1083
|
+
default: return `target could not be read (${code}): ${detail}`;
|
|
1084
|
+
}
|
|
1085
|
+
};
|
|
1086
|
+
throwIfTargetResolutionCancelled = (signal) => {
|
|
1087
|
+
if (signal?.aborted === true) throw new AnalysisCancelledError("resolve_binary_target");
|
|
1088
|
+
};
|
|
1089
|
+
detectArtifactFormat = async (path, handle, signal) => {
|
|
1090
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1091
|
+
const lower = path.toLowerCase();
|
|
1092
|
+
const magic = Buffer.alloc(4096);
|
|
1093
|
+
const observed = await handle.read(magic, 0, magic.length, 0);
|
|
1094
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1095
|
+
if (observed.bytesRead >= 8 && magic.subarray(0, 8).equals(Buffer.from([
|
|
1096
|
+
0,
|
|
1097
|
+
97,
|
|
1098
|
+
115,
|
|
1099
|
+
109,
|
|
1100
|
+
1,
|
|
1101
|
+
0,
|
|
1102
|
+
0,
|
|
1103
|
+
0
|
|
1104
|
+
]))) throw new BinaryTargetError(path, "WebAssembly v1 artifacts are not supported by the native opening route", { constraint: "wasm_requires_static_inspection" });
|
|
1105
|
+
if (hasZipSignature(magic.subarray(0, observed.bytesRead))) {
|
|
1106
|
+
if (lower.endsWith(".app")) return "app-pack";
|
|
1107
|
+
return zipPackageFormatForPath(lower) ?? "zip";
|
|
1108
|
+
}
|
|
1109
|
+
if (hasBinaryPlistSignature(magic.subarray(0, observed.bytesRead))) return "plist";
|
|
1110
|
+
const named = namedArtifactFormat(lower);
|
|
1111
|
+
if (named !== undefined) return named;
|
|
1112
|
+
if (lower.endsWith(".pkg") && observed.bytesRead >= 4 && magic.subarray(0, 4).equals(Buffer.from("xar!"))) return "pkg";
|
|
1113
|
+
if (lower.endsWith(".dmg")) {
|
|
1114
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1115
|
+
const size = (await handle.stat()).size;
|
|
1116
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1117
|
+
if (size >= 512) {
|
|
1118
|
+
const trailer = Buffer.alloc(4);
|
|
1119
|
+
const read = await handle.read(trailer, 0, trailer.length, size - 512);
|
|
1120
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1121
|
+
if (read.bytesRead === 4 && trailer.equals(Buffer.from("koly"))) return "dmg";
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
const xmlProbe = createXmlPlistSignatureProbe();
|
|
1125
|
+
let xmlState = xmlProbe.write(magic.subarray(0, observed.bytesRead));
|
|
1126
|
+
if (xmlState === "matched") return "plist";
|
|
1127
|
+
const chunk = Buffer.alloc(XML_PLIST_PROBE_CHUNK_BYTES);
|
|
1128
|
+
let bytesRead = observed.bytesRead;
|
|
1129
|
+
while (xmlState === "pending" && bytesRead < 1048576) {
|
|
1130
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1131
|
+
const read = await handle.read(chunk, 0, Math.min(chunk.length, MAX_XML_PLIST_PROBE_BYTES - bytesRead), bytesRead);
|
|
1132
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1133
|
+
if (read.bytesRead === 0) break;
|
|
1134
|
+
bytesRead += read.bytesRead;
|
|
1135
|
+
xmlState = xmlProbe.write(chunk.subarray(0, read.bytesRead));
|
|
1136
|
+
if (xmlState === "matched") return "plist";
|
|
1137
|
+
}
|
|
1138
|
+
if (bytesRead === 1048576) {
|
|
1139
|
+
const { size } = await handle.stat();
|
|
1140
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1141
|
+
if (size > bytesRead) throw new BinaryTargetError(path, "XML plist prolog was not found within the 1 MiB format probe limit", { constraint: "file_format_rejected" });
|
|
1142
|
+
}
|
|
1143
|
+
return undefined;
|
|
1144
|
+
};
|
|
1145
|
+
namedArtifactFormat = (lowerPath) => {
|
|
1146
|
+
if (lowerPath.endsWith(".asar")) return "asar";
|
|
1147
|
+
if (lowerPath.endsWith(".plist")) return "plist";
|
|
1148
|
+
if (lowerPath.endsWith(".map")) return "source-map";
|
|
1149
|
+
return /\.(?:m?js|cjs)$/u.test(lowerPath) ? "javascript" : undefined;
|
|
1150
|
+
};
|
|
1151
|
+
isArchiveFormat = (format) => isZipPackageFormat(format) || [
|
|
1152
|
+
"asar",
|
|
1153
|
+
"dmg",
|
|
1154
|
+
"pkg"
|
|
1155
|
+
].includes(format);
|
|
1156
|
+
sha256Handle = async (handle, path, initial, signal) => {
|
|
1157
|
+
const hash = createHash("sha256");
|
|
1158
|
+
const chunk = Buffer.allocUnsafe(64 * 1024);
|
|
1159
|
+
let position = 0;
|
|
1160
|
+
while (true) {
|
|
1161
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1162
|
+
const observed = await handle.read(chunk, 0, Math.min(chunk.length, initial.size - position + 1), position);
|
|
1163
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1164
|
+
if (observed.bytesRead === 0) break;
|
|
1165
|
+
hash.update(chunk.subarray(0, observed.bytesRead));
|
|
1166
|
+
position += observed.bytesRead;
|
|
1167
|
+
if (position > initial.size) throw new BinaryTargetError(path, "target grew while being read");
|
|
1168
|
+
}
|
|
1169
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1170
|
+
const [opened, currentPath] = await Promise.all([handle.stat(), lstat(path)]);
|
|
1171
|
+
if (!sameRegularFileState(initial, opened) || !sameRegularFileState(initial, currentPath) || position !== initial.size) throw new BinaryTargetError(path, "target changed while being read");
|
|
1172
|
+
return hash.digest("hex");
|
|
1173
|
+
};
|
|
1174
|
+
resolveAppBundle = async (path) => {
|
|
1175
|
+
const metadata = await stat(path);
|
|
1176
|
+
if (!metadata.isDirectory()) return ok({ executable: path });
|
|
1177
|
+
if (extname(path).toLowerCase() !== ".app") return err(new BinaryTargetError(path, "this opening route requires a file or app bundle", { constraint: "directory_requires_file" }));
|
|
1178
|
+
return resolveAppBundleExecutable(path);
|
|
1179
|
+
};
|
|
1180
|
+
readExecutableMetadata = async (handle, hostArchitecture, signal) => {
|
|
1181
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1182
|
+
const prefix = Buffer.alloc(4096);
|
|
1183
|
+
const prefixRead = await handle.read(prefix, 0, prefix.length, 0);
|
|
1184
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1185
|
+
const bytes = prefix.subarray(0, prefixRead.bytesRead);
|
|
1186
|
+
const fileSize = (await handle.stat()).size;
|
|
1187
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1188
|
+
if (bytes.length >= 2 && bytes[0] === 77 && bytes[1] === 90) {
|
|
1189
|
+
let windowsHeader = observeMzWindowsHeader(bytes, fileSize);
|
|
1190
|
+
let signatureBytes;
|
|
1191
|
+
if (windowsHeader.state === "signature-needed") {
|
|
1192
|
+
const { offset } = windowsHeader;
|
|
1193
|
+
const signature = Buffer.alloc(Math.min(4, fileSize - offset));
|
|
1194
|
+
const observedSignature = await handle.read(signature, 0, signature.length, offset);
|
|
1195
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1196
|
+
signatureBytes = signature.subarray(0, observedSignature.bytesRead);
|
|
1197
|
+
windowsHeader = observeMzWindowsHeader(bytes, fileSize, signatureBytes);
|
|
1198
|
+
}
|
|
1199
|
+
if (windowsHeader.state === "declared") {
|
|
1200
|
+
if (windowsHeader.offset < 64) return err("invalid Windows new-header offset in MZ image");
|
|
1201
|
+
return readPeMetadata(handle, windowsHeader.offset, bytes, fileSize, signal);
|
|
1202
|
+
}
|
|
1203
|
+
const tableEnd = bytes.length >= 28 ? bytes.readUInt16LE(24) + bytes.readUInt16LE(6) * 4 : 0;
|
|
1204
|
+
const headerBytes = bytes.length >= 28 ? bytes.readUInt16LE(8) * 16 : 0;
|
|
1205
|
+
if (tableEnd > bytes.length && tableEnd <= headerBytes && tableEnd <= fileSize) {
|
|
1206
|
+
const table = Buffer.alloc(tableEnd);
|
|
1207
|
+
const observed = await handle.read(table, 0, table.length, 0);
|
|
1208
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1209
|
+
return parseExecutableHeader(table.subarray(0, observed.bytesRead), hostArchitecture, fileSize);
|
|
1210
|
+
}
|
|
1211
|
+
return parseExecutableHeader(bytes, hostArchitecture, fileSize, signatureBytes);
|
|
1212
|
+
}
|
|
1213
|
+
if (bytes.length >= 8) {
|
|
1214
|
+
const magic = bytes.readUInt32BE(0);
|
|
1215
|
+
if ([3405691583, 3216703178].includes(magic)) {
|
|
1216
|
+
const little = magic === 3216703178;
|
|
1217
|
+
const count = little ? bytes.readUInt32LE(4) : bytes.readUInt32BE(4);
|
|
1218
|
+
const required = 8 + count * 32;
|
|
1219
|
+
if (count <= 128 && required > bytes.length) {
|
|
1220
|
+
const header = Buffer.alloc(required);
|
|
1221
|
+
const headerRead = await handle.read(header, 0, header.length, 0);
|
|
1222
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1223
|
+
return parseExecutableHeader(header.subarray(0, headerRead.bytesRead), hostArchitecture, fileSize);
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1227
|
+
const parsed = parseExecutableHeader(bytes, hostArchitecture, fileSize);
|
|
1228
|
+
if (!parsed.ok || parsed.value.architecture !== "mips" || parsed.value.mips.elfClass !== 32) return parsed;
|
|
1229
|
+
const declarations = await readMipsElfMetadata(handle, parsed.value.mips, () => throwIfTargetResolutionCancelled(signal));
|
|
1230
|
+
if (!declarations.ok) return declarations;
|
|
1231
|
+
return ok({
|
|
1232
|
+
...parsed.value,
|
|
1233
|
+
mips: {
|
|
1234
|
+
...parsed.value.mips,
|
|
1235
|
+
abiFlags: declarations.value.abiFlags,
|
|
1236
|
+
gnuAttributes: declarations.value.gnuAttributes,
|
|
1237
|
+
...declarations.value.sharedLoad === undefined ? {} : { sharedLoad: declarations.value.sharedLoad },
|
|
1238
|
+
...declarations.value.limitations.length === 0 ? {} : { limitations: declarations.value.limitations }
|
|
1239
|
+
}
|
|
1240
|
+
});
|
|
1241
|
+
};
|
|
1242
|
+
readPeMetadata = async (handle, offset, mzPrefix, fileSize, signal) => {
|
|
1243
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1244
|
+
const fileHeader = Buffer.alloc(24);
|
|
1245
|
+
const fileHeaderRead = await handle.read(fileHeader, 0, fileHeader.length, offset);
|
|
1246
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1247
|
+
if (fileHeaderRead.bytesRead !== fileHeader.length) return err("invalid or truncated PE header");
|
|
1248
|
+
const windowsHeader = observeMzWindowsHeader(mzPrefix, fileSize, fileHeader.subarray(0, 4));
|
|
1249
|
+
if (windowsHeader.state !== "declared") return err("invalid Windows new-header signature in MZ image");
|
|
1250
|
+
if ([
|
|
1251
|
+
"NE",
|
|
1252
|
+
"LE",
|
|
1253
|
+
"LX"
|
|
1254
|
+
].includes(windowsHeader.signature)) return err(`unsupported ${windowsHeader.signature} executable in MZ image`);
|
|
1255
|
+
const optionalHeaderSize = fileHeader.readUInt16LE(20);
|
|
1256
|
+
if (optionalHeaderSize > 4096) return err("invalid PE optional header size");
|
|
1257
|
+
const numberOfSections = fileHeader.readUInt16LE(6);
|
|
1258
|
+
const record = Buffer.alloc(24 + optionalHeaderSize);
|
|
1259
|
+
const recordRead = await handle.read(record, 0, record.length, offset);
|
|
1260
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1261
|
+
if (recordRead.bytesRead !== record.length) return err("invalid or truncated PE header");
|
|
1262
|
+
const codeView = await readPeCodeView(handle, offset, numberOfSections, record.subarray(24), optionalHeaderSize, signal);
|
|
1263
|
+
return parsePeRecord(record, codeView);
|
|
1264
|
+
};
|
|
1265
|
+
readPeCodeView = async (handle, peOffset, numberOfSections, optionalHeader, optionalHeaderSize, signal) => {
|
|
1266
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1267
|
+
const debugDir = peDebugDirectoryEntry(optionalHeader);
|
|
1268
|
+
if (debugDir === undefined || numberOfSections > 96) return undefined;
|
|
1269
|
+
const sectionTableOffset = peOffset + 24 + optionalHeaderSize;
|
|
1270
|
+
const sectionTableSize = numberOfSections * 40;
|
|
1271
|
+
const sectionTable = Buffer.alloc(sectionTableSize);
|
|
1272
|
+
const sectionRead = await handle.read(sectionTable, 0, sectionTableSize, sectionTableOffset);
|
|
1273
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1274
|
+
if (sectionRead.bytesRead !== sectionTableSize) return undefined;
|
|
1275
|
+
const debugFileOffset = peRvaToFileOffset(debugDir.debugRva, sectionTable, numberOfSections, debugDir.sizeOfHeaders, Math.min(debugDir.debugSize, 4096));
|
|
1276
|
+
if (debugFileOffset === undefined) return undefined;
|
|
1277
|
+
const maxDebugSize = Math.min(debugDir.debugSize, 4096);
|
|
1278
|
+
const debugDirectoryBuffer = Buffer.alloc(maxDebugSize);
|
|
1279
|
+
const debugDirRead = await handle.read(debugDirectoryBuffer, 0, maxDebugSize, debugFileOffset);
|
|
1280
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1281
|
+
const numEntries = Math.floor(debugDirRead.bytesRead / 28);
|
|
1282
|
+
for (let j = 0; j < numEntries; j++) {
|
|
1283
|
+
const entryOffset = j * 28;
|
|
1284
|
+
const type = debugDirectoryBuffer.readUInt32LE(entryOffset + 12);
|
|
1285
|
+
if (type !== 2) continue;
|
|
1286
|
+
const sizeOfData = debugDirectoryBuffer.readUInt32LE(entryOffset + 16);
|
|
1287
|
+
let pointerToRawData = debugDirectoryBuffer.readUInt32LE(entryOffset + 24);
|
|
1288
|
+
if (pointerToRawData === 0) {
|
|
1289
|
+
const addressOfRawData = debugDirectoryBuffer.readUInt32LE(entryOffset + 20);
|
|
1290
|
+
const mapped = peRvaToFileOffset(addressOfRawData, sectionTable, numberOfSections, debugDir.sizeOfHeaders, Math.min(sizeOfData, 4096));
|
|
1291
|
+
if (mapped === undefined) continue;
|
|
1292
|
+
pointerToRawData = mapped;
|
|
1293
|
+
}
|
|
1294
|
+
if (sizeOfData < 16) continue;
|
|
1295
|
+
const maxCodeViewRead = Math.min(sizeOfData, 4096);
|
|
1296
|
+
const codeViewBuffer = Buffer.alloc(maxCodeViewRead);
|
|
1297
|
+
const codeViewRead = await handle.read(codeViewBuffer, 0, maxCodeViewRead, pointerToRawData);
|
|
1298
|
+
throwIfTargetResolutionCancelled(signal);
|
|
1299
|
+
const parsed = parseCodeViewData(codeViewBuffer.subarray(0, codeViewRead.bytesRead), sizeOfData);
|
|
1300
|
+
if (parsed !== undefined) return parsed;
|
|
1301
|
+
}
|
|
1302
|
+
return undefined;
|
|
1303
|
+
};
|
|
1304
|
+
})))();
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
//#endregion
|
|
1308
|
+
export { classifyBinaryTargetFilesystemFailure, decodePeMachine, init_BinaryTargetResolver, init_binaryTarget, init_elfFixedHeader, init_peMachine, parseBinaryTarget, parseExecutableHeader, readElfFixedHeader };
|