rea-agents 6.0.0 → 6.2.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/README.md +26 -18
- package/bridge/android/ReaJadxBridge.java +14 -5
- package/bridge/ghidra/ReaGhidraBridge.java +205 -51
- package/bridge/hopper_bridge.py +314 -127
- package/bridge/mitmproxy/capture.py +0 -2
- package/bridge/native/rea_lldb_tracer.py +630 -94
- package/bridge/process/ProcessRunTokenReader.swift +39 -5
- package/bridge/pwntools/recorded_crash_impl.py +4 -0
- package/dist/android/JadxConfiguration.js +274 -31
- package/dist/android/JadxMcpTransport.js +18 -2
- package/dist/android/JadxProtocol.js +6 -0
- package/dist/android/JadxProvider.js +76 -37
- package/dist/android/JadxSession.js +23 -4
- package/dist/application/AnalysisContextQueries.js +8 -35
- package/dist/application/AnalysisDocument.js +32 -0
- package/dist/application/AppBundleExecutable.js +67 -21
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CallPathTracing.js +19 -3
- package/dist/application/CapabilityInventory.js +48 -11
- package/dist/application/ClientConfigurationDocument.js +917 -8
- package/dist/application/ClientRegistrationIdentity.js +26 -5
- package/dist/application/ClientRegistrationStatus.js +29 -14
- package/dist/application/DirectAnalysis.js +56 -51
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +19 -21
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +25 -13
- package/dist/application/EnhancedLiteralTracing.js +22 -25
- package/dist/application/EnhancedTools.js +64 -17
- package/dist/application/EvidenceBundleFiles.js +30 -13
- package/dist/application/FunctionAnalysisEvidence.js +2 -3
- package/dist/application/InventoryProjectionEvidence.js +4 -3
- package/dist/application/InvestigationProviders.js +11 -2
- package/dist/application/JsonFiles.js +83 -28
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/ProcedureAddressResolution.js +11 -0
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionCoverageService.js +7 -4
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReconstructionObligationLedgerService.js +4 -3
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +21 -17
- package/dist/application/SetupClientConfiguration.js +10 -15
- package/dist/application/SetupHost.js +21 -29
- package/dist/application/SetupPlan.js +11 -9
- package/dist/application/SupportedClients.js +34 -1
- package/dist/application/Uninstall.js +82 -29
- package/dist/application/Update.js +18 -3
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +57 -36
- package/dist/application/WebModuleTraceService.js +4 -2
- package/dist/application/WebNetworkCaptureService.js +4 -2
- package/dist/application/WebRuntimeService.js +5 -3
- package/dist/application/WebScriptExportService.js +32 -6
- package/dist/application/WebSourceLocationService.js +4 -2
- package/dist/application/WorkflowEvidence.js +105 -0
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
- package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
- package/dist/application/binary/BinarySession.js +161 -93
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +4 -4
- package/dist/application/binary/BinarySessionRecords.js +26 -4
- package/dist/application/binary/BinarySessionStatus.js +18 -7
- package/dist/application/binary/CompositeProvider.js +16 -17
- package/dist/application/binary/LazyAnalysisProvider.js +8 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
- package/dist/application/evm/EvmInterfaceService.js +4 -2
- package/dist/application/homebrew.js +48 -0
- package/dist/application/investigation/EvidenceLedger.js +21 -7
- package/dist/application/investigation/InvestigationRecords.js +8 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
- package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
- package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
- package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
- package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
- package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
- package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
- package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
- package/dist/application/managed/ManagedReconstructionService.js +4 -3
- package/dist/application/process/ProcessCli.js +25 -17
- package/dist/application/process/ProcessEvidence.js +4 -4
- package/dist/application/workflowInputError.js +18 -0
- package/dist/artifacts/ArtifactProvider.js +48 -13
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
- package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
- package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
- package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
- package/dist/artifacts/apple/NibArchive.js +81 -14
- package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
- package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +59 -38
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureCompleteness.js +2 -0
- package/dist/browser/CdpCaptureEventHandlers.js +78 -15
- package/dist/browser/CdpCaptureEventTypes.js +5 -1
- package/dist/browser/CdpCaptureEvents.js +25 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpConnection.js +30 -11
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- package/dist/browser/CdpOptionalCommand.js +2 -3
- package/dist/browser/CdpPageCapture.js +23 -1
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
- package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
- package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +39 -22
- package/dist/browser/WebSourceMapFetcher.js +426 -72
- package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +41 -1
- package/dist/browser/history/CaptureRelease.js +5 -0
- package/dist/browser/history/HarCaptureAdapter.js +3 -3
- package/dist/browser/history/HarJson.js +3 -2
- package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisSelector.js +23 -0
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/applicationCommands.js +2 -3
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +100 -37
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +10 -9
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +7 -3
- package/dist/cli/jsonOutput.js +4 -99
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +3 -5
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/utilityCommands.js +9 -9
- package/dist/cli/webRuntimeCommands.js +8 -8
- package/dist/cli.js +18 -9
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -1
- package/dist/cliJsonInput.js +24 -5
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -13
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraStartupTimeout.js +12 -0
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +30 -0
- package/dist/config/parseConfig.js +8 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +2 -2
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +7 -5
- package/dist/contracts/enhancedToolContracts.js +7 -6
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/hopperMemoryContracts.js +2 -5
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +2 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/managed/managedToolContracts.js +7 -14
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +5 -3
- package/dist/contracts/officialToolContracts.js +16 -16
- package/dist/contracts/promptContracts.js +5 -5
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +3 -7
- package/dist/contracts/sessionStatusContract.js +2 -4
- package/dist/contracts/sessionToolContracts.js +18 -8
- package/dist/contracts/sessionToolSchemas.js +3 -19
- package/dist/contracts/toolContractExamples.js +0 -1
- package/dist/contracts/toolContractHelpers.js +4 -1
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -1
- package/dist/contracts/toolOutputSchemaGroups.js +160 -115
- package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
- package/dist/contracts/toolSchemaMetadata.js +41 -33
- package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +8 -3
- package/dist/domain/analysisErrorCore.js +6 -1
- package/dist/domain/analysisErrorPresentation.js +90 -20
- package/dist/domain/analysisErrorProjection.js +130 -32
- package/dist/domain/analysisSnapshot.js +29 -31
- package/dist/domain/analysisView/analysisView.js +243 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidAnalysis.js +2 -4
- package/dist/domain/android/androidApplication.js +18 -10
- package/dist/domain/apple/appleApplication.js +42 -15
- package/dist/domain/apple/dyldEnvironment.js +73 -0
- package/dist/domain/apple/dylibResolution.js +130 -12
- package/dist/domain/apple/dylibResolutionFindings.js +9 -7
- package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
- package/dist/domain/apple/keyedArchive.js +35 -3
- package/dist/domain/apple/machoContainer.js +54 -0
- package/dist/domain/apple/plistNumbers.js +76 -0
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +16 -3
- package/dist/domain/artifactIdentity.js +29 -0
- package/dist/domain/artifactInventoryEvidence.js +28 -40
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/bridgeCandidateProjection.js +71 -0
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +1 -0
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationError.js +24 -5
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioValues.js +5 -10
- package/dist/domain/bundleComparison.js +3 -2
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalJsonDigestSteps.js +133 -0
- package/dist/domain/canonicalOrdering.js +9 -5
- package/dist/domain/changedBehavior.js +9 -9
- package/dist/domain/comparisonSourceEvidence.js +40 -0
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +13 -1
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +65 -36
- package/dist/domain/evidenceBundle.js +47 -8
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/evidenceErrors.js +12 -1
- package/dist/domain/explicitSensitiveFailure.js +17 -1
- package/dist/domain/firmware/firmwareAnalysis.js +6 -7
- package/dist/domain/functionComparison.js +4 -5
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +23 -34
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +2 -37
- package/dist/domain/hopperErrors.js +23 -2
- package/dist/domain/hopperValues.js +51 -8
- package/dist/domain/immutableJson.js +114 -0
- package/dist/domain/inputIssueProjection.js +3 -0
- package/dist/domain/javascript/electronActiveObservation.js +47 -64
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
- package/dist/domain/javascript/javascriptAstValues.js +20 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
- package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
- package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
- package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
- package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascript/javascriptRecovery.js +3 -8
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
- package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
- package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptSourceParser.js +6 -2
- package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/jsonSerialization.js +109 -0
- package/dist/domain/jsonValue.js +90 -6
- package/dist/domain/localPath.js +6 -0
- package/dist/domain/managed/managedApplicationGraph.js +10 -10
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedInspectionEvidence.js +16 -0
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
- package/dist/domain/managed/managedNativeVerification.js +3 -11
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +37 -13
- package/dist/domain/native/nativeCallPartialObservation.js +33 -0
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +21 -16
- package/dist/domain/process/processCaptureCoverage.js +67 -0
- package/dist/domain/process/processCaptureExample.js +2 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +81 -13
- package/dist/domain/process/processComparison.js +79 -26
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +35 -12
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +15 -11
- package/dist/domain/process/processTraceSpecification.js +3 -4
- package/dist/domain/propertyListKeys.js +1 -1
- package/dist/domain/propertyListXmlText.js +19 -0
- package/dist/domain/providerAdapterError.js +3 -1
- package/dist/domain/providerOperationHealth.js +54 -0
- package/dist/domain/reconstructionCoverage.js +5 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionVerification.js +9 -46
- package/dist/domain/reconstructionVerificationSchemas.js +4 -3
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +8 -45
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- package/dist/domain/webBundleAnalysis.js +20 -8
- package/dist/domain/webBundleAnalyzerInspection.js +13 -8
- package/dist/domain/webBundleAnalyzerResult.js +41 -2
- package/dist/domain/webCaptureDiff.js +0 -1
- package/dist/domain/webCaptureDiffSchemas.js +6 -3
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webRuntime.js +19 -7
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webSourceLocation.js +1 -0
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +3 -5
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareFiles.js +1 -1
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
- package/dist/ghidra/GhidraClient.js +126 -34
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDiagnostics.js +7 -7
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +13 -12
- package/dist/ghidra/GhidraInstallation.js +58 -33
- package/dist/ghidra/GhidraInventoryValues.js +14 -4
- package/dist/ghidra/GhidraJavaLaunch.js +66 -0
- package/dist/ghidra/GhidraLauncher.js +47 -22
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
- package/dist/ghidra/GhidraProviderClient.js +36 -15
- package/dist/ghidra/GhidraSessionError.js +13 -7
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
- package/dist/ghidra/GhidraTransport.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +65 -56
- package/dist/hopper/HopperAnalysisProfile.js +65 -12
- package/dist/hopper/HopperCleanup.js +63 -22
- package/dist/hopper/HopperClient.js +288 -59
- package/dist/hopper/HopperFileOffset.js +237 -0
- package/dist/hopper/HopperMachOImage.js +197 -0
- package/dist/hopper/HopperOperationStage.js +6 -0
- package/dist/hopper/HopperProvider.js +71 -19
- package/dist/hopper/HopperProviderCapabilities.js +19 -1
- package/dist/hopper/HopperRegexSearch.js +134 -0
- package/dist/hopper/HopperRegexWorker.js +27 -0
- package/dist/hopper/HopperRequestQueue.js +68 -19
- package/dist/hopper/HopperTargetLease.js +133 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +3 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +20 -18
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
- package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
- package/dist/inspector/V8InspectorProvider.js +82 -36
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
- package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
- package/dist/main/shutdown.js +11 -3
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +22 -2
- package/dist/main.js +11 -18
- package/dist/mcpDoctor.js +62 -2
- package/dist/native/AppleDispatchCoverage.js +47 -6
- package/dist/native/AppleDispatchDecodeFacts.js +6 -0
- package/dist/native/AppleDispatchMetadata.js +6 -3
- package/dist/native/AppleMachoFixups.js +48 -24
- package/dist/native/AppleMachoSelection.js +48 -22
- package/dist/native/AppleObjcCategories.js +6 -2
- package/dist/native/AppleObjcDispatchFacets.js +5 -2
- package/dist/native/AppleObjcProperties.js +2 -1
- package/dist/native/AppleSwiftDispatchFacets.js +27 -21
- package/dist/native/AppleSwiftVtables.js +21 -15
- package/dist/native/CommandRunner.js +87 -88
- package/dist/native/LldbCallTracer.js +372 -103
- package/dist/native/LldbRetainedObservations.js +178 -0
- package/dist/native/NativeCallObservation.js +62 -3
- package/dist/native/NativeMacOSProvider.js +122 -31
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/SignatureTargetBinding.js +155 -0
- package/dist/native/parsers/lipo.js +71 -1
- package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
- package/dist/process/DarwinProcessRunTokenReader.js +23 -10
- package/dist/process/ExecFileOutput.js +108 -6
- package/dist/process/OwnedCommand.js +7 -2
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +204 -57
- package/dist/process/ProcessOwnershipObservation.js +60 -9
- package/dist/process/ProviderProcess.js +39 -10
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +15 -2
- package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
- package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
- package/dist/process/capture/ProcessHarness.js +21 -25
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +157 -0
- package/dist/server/createServer.js +61 -41
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -5
- package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +1 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +13 -10
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
- package/dist/server/registerBrowserScenarioTool.js +3 -6
- package/dist/server/registerBrowserTools.js +13 -18
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +9 -20
- package/dist/server/registerElectronTools.js +10 -15
- package/dist/server/registerEnhancedTools.js +36 -77
- package/dist/server/registerEvidenceTools.js +3 -6
- package/dist/server/registerEvmTools.js +2 -5
- package/dist/server/registerFirmwareTools.js +2 -5
- package/dist/server/registerFunctionComparisonTool.js +15 -12
- package/dist/server/registerInvestigationTools.js +16 -17
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
- package/dist/server/registerOfficialTools.js +4 -21
- package/dist/server/registerProcessComparisonTool.js +74 -48
- package/dist/server/registerRecordedCrashTools.js +2 -5
- package/dist/server/registerSessionRecordTools.js +19 -24
- package/dist/server/registerSessionStatusTool.js +19 -6
- package/dist/server/registerSessionTools.js +20 -18
- package/dist/server/registerWebModuleTool.js +2 -5
- package/dist/server/registerWebNetworkCaptureTool.js +2 -5
- package/dist/server/registerWebRuntimeTools.js +4 -9
- package/dist/server/registerWebScriptTool.js +2 -5
- package/dist/server/registerWebSourceLocationTool.js +2 -5
- package/dist/server/runDerivedOperation.js +15 -3
- package/dist/server/sessionAvailabilityPolicy.js +0 -1
- package/dist/server/toolRegistrationOptions.js +2 -2
- package/dist/server/toolResult.js +75 -51
- package/dist/server/toolResultEncoding.js +34 -0
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/install.sh +1 -1
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +44 -30
- package/scripts/electron-active-hook-boundaries.cjs +18 -20
- package/scripts/electron-active-hook.cjs +241 -37
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +12 -3
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/ghidra/GhidraDefaults.js +0 -2
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
|
|
2
2
|
import { AnalysisError } from "../../domain/analysisErrorBase.js";
|
|
3
|
-
import { AnalysisAccessDeniedError, AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, } from "../../domain/analysisErrorCore.js";
|
|
3
|
+
import { AnalysisAccessDeniedError, AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, AnalysisResourceConstraintError, AnalysisTimeoutError, } from "../../domain/analysisErrorCore.js";
|
|
4
4
|
import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
|
|
5
5
|
import { ProviderCleanupError } from "../../domain/providerCleanupError.js";
|
|
6
6
|
import { WEB_NETWORK_CAPTURE_LIMITS, } from "../../domain/webNetworkCapture.js";
|
|
7
7
|
import { OwnedCommandFailure } from "../../process/OwnedCommand.js";
|
|
8
|
+
import { HAR_CAPTURE_HEAP_LIMITS } from "./CaptureRelease.js";
|
|
8
9
|
const OPERATION = "inspect_web_network_capture";
|
|
9
10
|
/** Preserve the origin and typed cause of a historical capture failure. */
|
|
10
11
|
export const historicalCaptureFailure = (input, cause, phase, options) => {
|
|
@@ -30,6 +31,13 @@ export const historicalCaptureFailure = (input, cause, phase, options) => {
|
|
|
30
31
|
return new AnalysisTimeoutError(OPERATION, WEB_NETWORK_CAPTURE_LIMITS.timeoutMs);
|
|
31
32
|
if (cause.reason === "output-limit")
|
|
32
33
|
return new AnalysisOutputError(OPERATION, cause.message);
|
|
34
|
+
if (phase === "decoder" &&
|
|
35
|
+
input.format === "har" &&
|
|
36
|
+
cause.reason === "process" &&
|
|
37
|
+
(cause.snapshot?.signal === "SIGABRT" ||
|
|
38
|
+
(cause.snapshot?.signal === null && cause.snapshot.exitCode === 134)) &&
|
|
39
|
+
/FATAL ERROR:[^\r\n]*heap out of memory/u.test(cause.snapshot.stderr.text))
|
|
40
|
+
return captureMemoryFailure(input, "The HAR decoder exhausted its fixed V8 heap", cause);
|
|
33
41
|
}
|
|
34
42
|
if (options?.signal?.aborted)
|
|
35
43
|
return new AnalysisCancelledError(OPERATION);
|
|
@@ -99,3 +107,35 @@ export const historicalCaptureFailure = (input, cause, phase, options) => {
|
|
|
99
107
|
},
|
|
100
108
|
});
|
|
101
109
|
};
|
|
110
|
+
/** Preserve a decoder's observed memory failure and its actual workload limits. */
|
|
111
|
+
export const captureMemoryFailure = (input, reason, cause) => new AnalysisResourceConstraintError(OPERATION, "memory", `${reason}: ${input.capture_path}. No complete capture result is available.`, {
|
|
112
|
+
boundary: "historical-capture-decoder",
|
|
113
|
+
capture_path: input.capture_path,
|
|
114
|
+
format: input.format,
|
|
115
|
+
maximum_input_bytes: WEB_NETWORK_CAPTURE_LIMITS.inputBytes,
|
|
116
|
+
maximum_reply_bytes: WEB_NETWORK_CAPTURE_LIMITS.outputBytes,
|
|
117
|
+
...(input.format === "har"
|
|
118
|
+
? {
|
|
119
|
+
old_generation_heap_mib: HAR_CAPTURE_HEAP_LIMITS.oldGenerationMiB,
|
|
120
|
+
semi_space_heap_mib: HAR_CAPTURE_HEAP_LIMITS.semiSpaceMiB,
|
|
121
|
+
}
|
|
122
|
+
: {}),
|
|
123
|
+
...(cause instanceof OwnedCommandFailure
|
|
124
|
+
? {
|
|
125
|
+
observed_exit_code: cause.snapshot?.exitCode ?? null,
|
|
126
|
+
observed_signal: cause.snapshot?.signal ?? null,
|
|
127
|
+
}
|
|
128
|
+
: {}),
|
|
129
|
+
}, {
|
|
130
|
+
cause,
|
|
131
|
+
remediationAction: `Use a smaller capture exported by its producer, or another decoder with sufficient capacity for the original capture. Preserve the original for provenance; a subset does not establish complete-capture coverage.${input.format === "har" ? ` REA's HAR old-generation heap is fixed at ${HAR_CAPTURE_HEAP_LIMITS.oldGenerationMiB} MiB; inherited NODE_OPTIONS cannot raise it.` : ""}`,
|
|
132
|
+
...(cause instanceof OwnedCommandFailure && cause.snapshot !== null
|
|
133
|
+
? {
|
|
134
|
+
capturedOutput: {
|
|
135
|
+
stdout: cause.snapshot.stdout.text,
|
|
136
|
+
stderr: cause.snapshot.stderr.text,
|
|
137
|
+
truncated: cause.snapshot.diagnosticTruncated ?? false,
|
|
138
|
+
},
|
|
139
|
+
}
|
|
140
|
+
: {}),
|
|
141
|
+
});
|
|
@@ -4,6 +4,11 @@ export const HAR_CAPTURE_PROVIDER_IDENTITY = {
|
|
|
4
4
|
name: "REA HAR capture adapter",
|
|
5
5
|
version: "har-schema@2.0.0;jsonc-parser@3.3.1;lossless-json@4.3.1",
|
|
6
6
|
};
|
|
7
|
+
/** Fixed V8 heap settings used by the owned HAR decoder process. */
|
|
8
|
+
export const HAR_CAPTURE_HEAP_LIMITS = {
|
|
9
|
+
oldGenerationMiB: 192,
|
|
10
|
+
semiSpaceMiB: 8,
|
|
11
|
+
};
|
|
7
12
|
/** Native executable profile verified with unchanged mitmproxy raw-state decoding. */
|
|
8
13
|
export const MITMPROXY_CAPTURE_PROVIDER_IDENTITY = {
|
|
9
14
|
id: "mitmproxy-native-tnetstring",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fileURLToPath } from "node:url";
|
|
2
|
-
import { HAR_CAPTURE_PROVIDER_IDENTITY } from "./CaptureRelease.js";
|
|
2
|
+
import { HAR_CAPTURE_PROVIDER_IDENTITY, HAR_CAPTURE_HEAP_LIMITS, } from "./CaptureRelease.js";
|
|
3
3
|
/** HAR's parser/schema packages run in one bounded Node heap, without network or target execution. */
|
|
4
4
|
export class HarCaptureAdapter {
|
|
5
5
|
format = "har";
|
|
@@ -8,8 +8,8 @@ export class HarCaptureAdapter {
|
|
|
8
8
|
return {
|
|
9
9
|
command: process.execPath,
|
|
10
10
|
arguments: [
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
`--max-old-space-size=${HAR_CAPTURE_HEAP_LIMITS.oldGenerationMiB}`,
|
|
12
|
+
`--max-semi-space-size=${HAR_CAPTURE_HEAP_LIMITS.semiSpaceMiB}`,
|
|
13
13
|
"--v8-pool-size=1",
|
|
14
14
|
"--single-threaded",
|
|
15
15
|
fileURLToPath(new URL("./HarCaptureProcess.js", import.meta.url)),
|
|
@@ -43,8 +43,9 @@ export const parseHarJson = (text) => {
|
|
|
43
43
|
});
|
|
44
44
|
},
|
|
45
45
|
onObjectProperty: (key) => {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
// Prototype-named members are kept as ordinary own properties: the
|
|
47
|
+
// members map keys them without prototype setters, and
|
|
48
|
+
// Object.fromEntries materializes them as own data properties.
|
|
48
49
|
const frame = frames.at(-1);
|
|
49
50
|
if (frame?.kind !== "object")
|
|
50
51
|
throw new TypeError("JSON visitor emitted a property outside an object.");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { historicalCaptureFailure } from "./CaptureFailures.js";
|
|
1
|
+
import { historicalCaptureFailure, captureMemoryFailure, } from "./CaptureFailures.js";
|
|
2
2
|
import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { writeFile } from "node:fs/promises";
|
|
@@ -117,7 +117,9 @@ export class HistoricalCaptureDecoder {
|
|
|
117
117
|
},
|
|
118
118
|
},
|
|
119
119
|
]);
|
|
120
|
-
if (reply.reason === "
|
|
120
|
+
if (reply.reason === "resource-limit")
|
|
121
|
+
throw captureMemoryFailure(input, reply.message);
|
|
122
|
+
if (reply.reason === "decoder")
|
|
121
123
|
throw new ProviderAdapterError(input.format, OPERATION, {
|
|
122
124
|
diagnostics: {
|
|
123
125
|
phase: "decoder",
|
|
@@ -5,6 +5,7 @@ import { fileURLToPath } from "node:url";
|
|
|
5
5
|
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
|
6
6
|
import { MITMPROXY_CAPTURE_PROVIDER_IDENTITY } from "./CaptureRelease.js";
|
|
7
7
|
const OPERATION = "inspect_web_network_capture";
|
|
8
|
+
const MITMDUMP_REQUIREMENT = "Native capture decoding requires Linux and an absolute REA_MITMDUMP_COMMAND path to caller-supplied mitmdump 12.2.3; HAR needs no external engine.";
|
|
8
9
|
/** Native mitmproxy decoding is offline and uses only an explicitly configured Linux tool. */
|
|
9
10
|
export class MitmproxyCaptureAdapter {
|
|
10
11
|
environment;
|
|
@@ -18,12 +19,13 @@ export class MitmproxyCaptureAdapter {
|
|
|
18
19
|
if (process.platform !== "linux" ||
|
|
19
20
|
command === undefined ||
|
|
20
21
|
!isAbsolute(command))
|
|
21
|
-
throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION,
|
|
22
|
+
throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, MITMDUMP_REQUIREMENT, { userMessage: MITMDUMP_REQUIREMENT });
|
|
22
23
|
try {
|
|
23
24
|
await access(command, constants.R_OK | constants.X_OK);
|
|
24
25
|
}
|
|
25
26
|
catch (cause) {
|
|
26
|
-
|
|
27
|
+
const reason = `Configured mitmdump executable is unavailable: ${command}.`;
|
|
28
|
+
throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, reason, { cause, userMessage: reason });
|
|
27
29
|
}
|
|
28
30
|
return {
|
|
29
31
|
command,
|
package/dist/catalogIdentity.js
CHANGED
|
@@ -4,7 +4,6 @@ import { z } from "zod";
|
|
|
4
4
|
import { PROMPT_CONTRACTS } from "./contracts/promptContracts.js";
|
|
5
5
|
import { TOOL_CONTRACTS } from "./contracts/toolContracts.js";
|
|
6
6
|
import { CLI_COMMAND_NAMES } from "./cliCommandNames.js";
|
|
7
|
-
export { CLI_COMMAND_NAMES } from "./cliCommandNames.js";
|
|
8
7
|
const sortedToolContracts = [...TOOL_CONTRACTS].sort((left, right) => left.name.localeCompare(right.name));
|
|
9
8
|
const createToolCatalog = () => sortedToolContracts.map((contract) => ({
|
|
10
9
|
name: contract.name,
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
2
|
+
/** Preserve a CLI selector supplied positionally or through its named option. */
|
|
3
|
+
export const resolveCliAnalysisSelector = (positional, named, option, operation) => {
|
|
4
|
+
if (positional !== undefined && named !== undefined && positional !== named)
|
|
5
|
+
throw new AnalysisInputError(operation, undefined, [
|
|
6
|
+
{
|
|
7
|
+
path: [option],
|
|
8
|
+
reason: "invalid_value",
|
|
9
|
+
message: `The positional selector and --${option} select different objects; supply one selector.`,
|
|
10
|
+
},
|
|
11
|
+
]);
|
|
12
|
+
const selected = named ?? positional;
|
|
13
|
+
if (selected === undefined)
|
|
14
|
+
throw new AnalysisInputError(operation, undefined, [
|
|
15
|
+
{
|
|
16
|
+
path: [option],
|
|
17
|
+
reason: "missing_argument",
|
|
18
|
+
message: `Supply a positional selector or --${option}=<value>. Use the named option for values beginning with a dash.`,
|
|
19
|
+
expected: "string",
|
|
20
|
+
},
|
|
21
|
+
]);
|
|
22
|
+
return selected;
|
|
23
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "incur";
|
|
2
|
+
import { inspectAnalysisViewValidated } from "../application/analysisView/AnalysisViewService.js";
|
|
3
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
4
|
+
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
5
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
6
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
7
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
8
|
+
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
9
|
+
import { inspectAnalysisViewInputSchema } from "../domain/analysisView/analysisView.js";
|
|
10
|
+
/** Project selected views of completed analysis Evidence through the CLI. */
|
|
11
|
+
export const registerAnalysisViewCommands = (cli, logger) => {
|
|
12
|
+
cli.command(CLI_COMMANDS.inspectAnalysisView, {
|
|
13
|
+
description: "Project a selected view of completed layout or JavaScript application Evidence JSON",
|
|
14
|
+
args: z.object({
|
|
15
|
+
inputJson: z.string().describe("Inline workflow JSON or JSON file path"),
|
|
16
|
+
}),
|
|
17
|
+
run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.inspectAnalysisView, async () => {
|
|
18
|
+
const input = await parseCliJsonInput(args.inputJson, CLI_COMMANDS.inspectAnalysisView);
|
|
19
|
+
if (!input.ok)
|
|
20
|
+
return input.error;
|
|
21
|
+
const parsed = inspectAnalysisViewInputSchema.safeParse(input.value);
|
|
22
|
+
if (!parsed.success)
|
|
23
|
+
return {
|
|
24
|
+
error: "Application workflow failed",
|
|
25
|
+
...projectAnalysisError(analysisInputErrorFromIssues(CLI_COMMANDS.inspectAnalysisView, parsed.error.issues, input.value)),
|
|
26
|
+
};
|
|
27
|
+
const result = inspectAnalysisViewValidated(parsed.data);
|
|
28
|
+
return result.ok
|
|
29
|
+
? jsonValueSchema.parse(result.value)
|
|
30
|
+
: {
|
|
31
|
+
error: "Application workflow failed",
|
|
32
|
+
...projectAnalysisError(result.error),
|
|
33
|
+
};
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
};
|
|
@@ -9,7 +9,6 @@ import { buildReconstructionObligationLedgerEvidenceValidated } from "../applica
|
|
|
9
9
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
10
10
|
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
11
11
|
import { logCliCommand } from "../cliLogging.js";
|
|
12
|
-
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
13
12
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
14
13
|
import {} from "../domain/analysisErrorBase.js";
|
|
15
14
|
import { androidApplicationProjectionInputSchema } from "../domain/android/androidApplication.js";
|
|
@@ -20,7 +19,7 @@ import { traceJavaScriptSemanticsInputSchema } from "../domain/javascript/javasc
|
|
|
20
19
|
import { compareApplicationVersionsInputSchema } from "../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
|
|
21
20
|
import { compareSourceToBundleInputSchema } from "../domain/javascript/sourceToBundleComparisonSchemas.js";
|
|
22
21
|
import { compareJavaScriptExportShapesInputSchema } from "../domain/javascript/javascriptExportShapeComparisonSchemas.js";
|
|
23
|
-
import {
|
|
22
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
24
23
|
import { reconstructionObligationLedgerInputSchema } from "../domain/reconstructionObligationLedgerSchemas.js";
|
|
25
24
|
/** Register CLI equivalents of provider-neutral application graph workflows. */
|
|
26
25
|
export const registerApplicationCommands = (cli, logger) => {
|
|
@@ -133,7 +132,7 @@ const registerJsonCommand = ({ cli, logger, name, description, inputSchema, work
|
|
|
133
132
|
if (!parsed.success)
|
|
134
133
|
return {
|
|
135
134
|
error: "Application workflow failed",
|
|
136
|
-
...projectAnalysisError(
|
|
135
|
+
...projectAnalysisError(analysisInputErrorFromIssues(name, parsed.error.issues, input.value)),
|
|
137
136
|
};
|
|
138
137
|
const result = workflow(parsed.data);
|
|
139
138
|
return result.ok
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
|
-
import { runProviderAnalysis } from "../composition/directAnalysis.js";
|
|
3
2
|
import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
|
|
4
3
|
import { logCliCommand } from "../cliLogging.js";
|
|
5
4
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
6
|
-
export const registerArtifactCommands = (cli, logger) => {
|
|
7
|
-
registerInspectionCommand(cli, logger);
|
|
8
|
-
registerExtractionCommand(cli, logger);
|
|
9
|
-
registerInterfaceBuilderCommand(cli, logger);
|
|
10
|
-
registerAssetCatalogCommand(cli, logger);
|
|
11
|
-
registerDylibResolutionCommand(cli, logger);
|
|
5
|
+
export const registerArtifactCommands = (cli, logger, runProviderAnalysis) => {
|
|
6
|
+
registerInspectionCommand(cli, logger, runProviderAnalysis);
|
|
7
|
+
registerExtractionCommand(cli, logger, runProviderAnalysis);
|
|
8
|
+
registerInterfaceBuilderCommand(cli, logger, runProviderAnalysis);
|
|
9
|
+
registerAssetCatalogCommand(cli, logger, runProviderAnalysis);
|
|
10
|
+
registerDylibResolutionCommand(cli, logger, runProviderAnalysis);
|
|
12
11
|
cli.command(CLI_COMMANDS.inspectKeyedArchive, {
|
|
13
12
|
description: "Inspect a Foundation keyed archive as an object-reference graph",
|
|
14
13
|
args: z.object({
|
|
@@ -42,7 +41,7 @@ export const registerArtifactCommands = (cli, logger) => {
|
|
|
42
41
|
}, logger)),
|
|
43
42
|
});
|
|
44
43
|
};
|
|
45
|
-
const registerDylibResolutionCommand = (cli, logger) => {
|
|
44
|
+
const registerDylibResolutionCommand = (cli, logger, runProviderAnalysis) => {
|
|
46
45
|
cli.command(CLI_COMMANDS.traceDylibResolution, {
|
|
47
46
|
description: "Trace dyld load-path resolution for a Mach-O or every executable in an app bundle",
|
|
48
47
|
args: z.object({
|
|
@@ -66,7 +65,7 @@ const registerDylibResolutionCommand = (cli, logger) => {
|
|
|
66
65
|
}, logger)),
|
|
67
66
|
});
|
|
68
67
|
};
|
|
69
|
-
const registerAssetCatalogCommand = (cli, logger) => {
|
|
68
|
+
const registerAssetCatalogCommand = (cli, logger, runProviderAnalysis) => {
|
|
70
69
|
cli.command(CLI_COMMANDS.inspectAssetCatalog, {
|
|
71
70
|
description: "Inspect compiled Apple asset catalog metadata",
|
|
72
71
|
args: z.object({ path: z.string().describe("Apple .app bundle path") }),
|
|
@@ -89,7 +88,7 @@ const registerAssetCatalogCommand = (cli, logger) => {
|
|
|
89
88
|
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.inspectAssetCatalog, () => runProviderAnalysis(args.path, "inspect_asset_catalog", { offset: options.offset, limit: options.limit }, logger)),
|
|
90
89
|
});
|
|
91
90
|
};
|
|
92
|
-
const registerInterfaceBuilderCommand = (cli, logger) => {
|
|
91
|
+
const registerInterfaceBuilderCommand = (cli, logger, runProviderAnalysis) => {
|
|
93
92
|
cli.command(CLI_COMMANDS.decodeInterfaceBuilder, {
|
|
94
93
|
description: "Decode compiled storyboard and nib archives from an app bundle",
|
|
95
94
|
args: z.object({
|
|
@@ -130,7 +129,7 @@ const registerInterfaceBuilderCommand = (cli, logger) => {
|
|
|
130
129
|
}, logger)),
|
|
131
130
|
});
|
|
132
131
|
};
|
|
133
|
-
const registerExtractionCommand = (cli, logger) => {
|
|
132
|
+
const registerExtractionCommand = (cli, logger, runProviderAnalysis) => {
|
|
134
133
|
cli.command(CLI_COMMANDS.extractArtifact, {
|
|
135
134
|
description: "Extract all regular artifact contents safely",
|
|
136
135
|
args: z.object({
|
|
@@ -142,7 +141,7 @@ const registerExtractionCommand = (cli, logger) => {
|
|
|
142
141
|
}, logger)),
|
|
143
142
|
});
|
|
144
143
|
};
|
|
145
|
-
const registerInspectionCommand = (cli, logger) => {
|
|
144
|
+
const registerInspectionCommand = (cli, logger, runProviderAnalysis) => {
|
|
146
145
|
cli.command(CLI_COMMANDS.inspectArtifact, {
|
|
147
146
|
description: "Inspect one artifact and return all available observations and next probes",
|
|
148
147
|
args: z.object({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { registerCoreBinaryCommands } from "./coreBinaryCommands.js";
|
|
2
2
|
import { registerCoreNativeCommands } from "./coreNativeCommands.js";
|
|
3
3
|
/** Register core binary and native deep-analysis CLI commands. */
|
|
4
|
-
export const registerCoreAnalysisCommands = (cli, logger, resultOutput) => {
|
|
5
|
-
registerCoreBinaryCommands(cli, logger, resultOutput);
|
|
6
|
-
registerCoreNativeCommands(cli, logger);
|
|
4
|
+
export const registerCoreAnalysisCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
|
|
5
|
+
registerCoreBinaryCommands(cli, logger, runDirectAnalysis, resultOutput);
|
|
6
|
+
registerCoreNativeCommands(cli, logger, runDirectAnalysis);
|
|
7
7
|
};
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
2
|
import { stat } from "node:fs/promises";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
|
-
import {
|
|
4
|
+
import { resolveCliAnalysisSelector } from "./analysisSelector.js";
|
|
5
5
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
6
6
|
import { logCliCommand } from "../cliLogging.js";
|
|
7
7
|
import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
|
|
8
8
|
import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
|
|
9
|
+
import { withCommandCancellation } from "./commandCancellation.js";
|
|
9
10
|
/** Register provider-neutral binary overview and procedure CLI commands. */
|
|
10
|
-
export const registerCoreBinaryCommands = (cli, logger, resultOutput) => {
|
|
11
|
-
registerOverviewCommands(cli, logger, resultOutput);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
export const registerCoreBinaryCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
|
|
12
|
+
registerOverviewCommands(cli, logger, runDirectAnalysis, resultOutput);
|
|
13
|
+
registerDecompileCommand(cli, logger, runDirectAnalysis);
|
|
14
|
+
registerFunctionCommand(cli, logger, runDirectAnalysis);
|
|
15
|
+
registerInstructionsCommand(cli, logger, runDirectAnalysis);
|
|
16
|
+
registerSearchCommand(cli, logger, runDirectAnalysis);
|
|
17
|
+
registerXrefsCommand(cli, logger, runDirectAnalysis);
|
|
18
|
+
registerTraceCommand(cli, logger, runDirectAnalysis);
|
|
17
19
|
};
|
|
18
|
-
const registerOverviewCommands = (cli, logger, resultOutput) => {
|
|
20
|
+
const registerOverviewCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
|
|
19
21
|
const overviewOptions = z.object({
|
|
20
22
|
snapshot: z
|
|
21
23
|
.string()
|
|
@@ -31,9 +33,17 @@ const registerOverviewCommands = (cli, logger, resultOutput) => {
|
|
|
31
33
|
path: z.string().describe("App, program, or analysis database path"),
|
|
32
34
|
}),
|
|
33
35
|
options: overviewOptions,
|
|
34
|
-
run: ({ args, options, format }) =>
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
run: async ({ args, options, format }) => {
|
|
37
|
+
const output = resultOutput === undefined
|
|
38
|
+
? undefined
|
|
39
|
+
: { output: resultOutput, command: CLI_COMMANDS.analyze, format };
|
|
40
|
+
// Route JavaScript targets exactly like analyze-javascript-application,
|
|
41
|
+
// including typed cancellation; cancellation wraps logging so its exit
|
|
42
|
+
// code is not replaced by the logged failure status.
|
|
43
|
+
if (await routesToJavaScriptAnalysis(args.path, options))
|
|
44
|
+
return withCommandCancellation((signal) => logCliCommand(logger, "analyze", () => runCliJavaScriptApplicationAnalysis({ input_path: resolve(args.path) }, output, signal)));
|
|
45
|
+
return logCliCommand(logger, "analyze", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"])));
|
|
46
|
+
},
|
|
37
47
|
});
|
|
38
48
|
cli.command(CLI_COMMANDS.inspect, {
|
|
39
49
|
description: "Inspect an app overview with evidence",
|
|
@@ -43,13 +53,24 @@ const registerOverviewCommands = (cli, logger, resultOutput) => {
|
|
|
43
53
|
options: overviewOptions,
|
|
44
54
|
run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
45
55
|
});
|
|
56
|
+
};
|
|
57
|
+
const registerDecompileCommand = (cli, logger, runDirectAnalysis) => {
|
|
46
58
|
cli.command(CLI_COMMANDS.decompile, {
|
|
47
59
|
description: "Read one part of an app as code",
|
|
48
60
|
args: z.object({
|
|
49
61
|
path: z.string().describe("App or program path"),
|
|
50
|
-
address: z
|
|
62
|
+
address: z
|
|
63
|
+
.string()
|
|
64
|
+
.min(1)
|
|
65
|
+
.optional()
|
|
66
|
+
.describe("Procedure name or address"),
|
|
51
67
|
}),
|
|
52
68
|
options: z.object({
|
|
69
|
+
procedure: z
|
|
70
|
+
.string()
|
|
71
|
+
.min(1)
|
|
72
|
+
.optional()
|
|
73
|
+
.describe("Procedure name or address; use --procedure=<value> for leading dashes"),
|
|
53
74
|
snapshot: z
|
|
54
75
|
.string()
|
|
55
76
|
.min(1)
|
|
@@ -58,17 +79,16 @@ const registerOverviewCommands = (cli, logger, resultOutput) => {
|
|
|
58
79
|
"target-format": formatSelectionOption,
|
|
59
80
|
provider: providerSelectionOption,
|
|
60
81
|
}),
|
|
61
|
-
run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", {
|
|
82
|
+
run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", {
|
|
83
|
+
procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "procedure_pseudo_code"),
|
|
84
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
62
85
|
});
|
|
63
86
|
};
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return runCliJavaScriptApplicationAnalysis({ input_path: resolve(path) }, output);
|
|
70
|
-
return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]));
|
|
71
|
-
};
|
|
87
|
+
/** Select static JavaScript analysis only when no binary-analysis option applies. */
|
|
88
|
+
const routesToJavaScriptAnalysis = async (path, options) => options.provider === undefined &&
|
|
89
|
+
options.snapshot === undefined &&
|
|
90
|
+
options["target-format"] === undefined &&
|
|
91
|
+
(await isJavaScriptApplicationPath(path));
|
|
72
92
|
const isJavaScriptApplicationPath = async (path) => {
|
|
73
93
|
const lower = path.toLowerCase();
|
|
74
94
|
if (lower.endsWith(".asar"))
|
|
@@ -85,14 +105,19 @@ const isJavaScriptApplicationPath = async (path) => {
|
|
|
85
105
|
return false;
|
|
86
106
|
}
|
|
87
107
|
};
|
|
88
|
-
const registerXrefsCommand = (cli, logger) => {
|
|
108
|
+
const registerXrefsCommand = (cli, logger, runDirectAnalysis) => {
|
|
89
109
|
cli.command(CLI_COMMANDS.xrefs, {
|
|
90
110
|
description: "List bounded references to an analyzed address",
|
|
91
111
|
args: z.object({
|
|
92
112
|
path: z.string().describe("App or program path"),
|
|
93
|
-
address: z.string().describe("
|
|
113
|
+
address: z.string().min(1).optional().describe("Address or symbol name"),
|
|
94
114
|
}),
|
|
95
115
|
options: z.object({
|
|
116
|
+
address: z
|
|
117
|
+
.string()
|
|
118
|
+
.min(1)
|
|
119
|
+
.optional()
|
|
120
|
+
.describe("Address or symbol name; use --address=<value> for leading dashes"),
|
|
96
121
|
snapshot: z
|
|
97
122
|
.string()
|
|
98
123
|
.min(1)
|
|
@@ -101,17 +126,24 @@ const registerXrefsCommand = (cli, logger) => {
|
|
|
101
126
|
"target-format": formatSelectionOption,
|
|
102
127
|
provider: providerSelectionOption,
|
|
103
128
|
}),
|
|
104
|
-
run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", {
|
|
129
|
+
run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", {
|
|
130
|
+
address: resolveCliAnalysisSelector(args.address, options.address, "address", "xrefs"),
|
|
131
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
105
132
|
});
|
|
106
133
|
};
|
|
107
|
-
const registerTraceCommand = (cli, logger) => {
|
|
134
|
+
const registerTraceCommand = (cli, logger, runDirectAnalysis) => {
|
|
108
135
|
cli.command(CLI_COMMANDS.trace, {
|
|
109
136
|
description: "Trace a literal feature through analyzed references",
|
|
110
137
|
args: z.object({
|
|
111
138
|
path: z.string().describe("App or program path"),
|
|
112
|
-
query: z.string().min(1).describe("Literal feature query"),
|
|
139
|
+
query: z.string().min(1).optional().describe("Literal feature query"),
|
|
113
140
|
}),
|
|
114
141
|
options: z.object({
|
|
142
|
+
query: z
|
|
143
|
+
.string()
|
|
144
|
+
.min(1)
|
|
145
|
+
.optional()
|
|
146
|
+
.describe("Complete literal feature query; use --query=<value> for leading dashes"),
|
|
115
147
|
caseSensitive: z
|
|
116
148
|
.boolean()
|
|
117
149
|
.default(false)
|
|
@@ -128,19 +160,28 @@ const registerTraceCommand = (cli, logger) => {
|
|
|
128
160
|
caseSensitive: "case-sensitive",
|
|
129
161
|
},
|
|
130
162
|
run: ({ args, options }) => logCliCommand(logger, "trace", () => runDirectAnalysis(args.path, "trace_feature", {
|
|
131
|
-
query: args.query,
|
|
163
|
+
query: resolveCliAnalysisSelector(args.query, options.query, "query", "trace_feature"),
|
|
132
164
|
case_sensitive: options.caseSensitive,
|
|
133
165
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
134
166
|
});
|
|
135
167
|
};
|
|
136
|
-
const registerFunctionCommand = (cli, logger) => {
|
|
168
|
+
const registerFunctionCommand = (cli, logger, runDirectAnalysis) => {
|
|
137
169
|
cli.command(CLI_COMMANDS.function, {
|
|
138
170
|
description: "Analyze one complete function with evidence",
|
|
139
171
|
args: z.object({
|
|
140
172
|
path: z.string().describe("App or program path"),
|
|
141
|
-
address: z
|
|
173
|
+
address: z
|
|
174
|
+
.string()
|
|
175
|
+
.min(1)
|
|
176
|
+
.optional()
|
|
177
|
+
.describe("Procedure name or address"),
|
|
142
178
|
}),
|
|
143
179
|
options: z.object({
|
|
180
|
+
procedure: z
|
|
181
|
+
.string()
|
|
182
|
+
.min(1)
|
|
183
|
+
.optional()
|
|
184
|
+
.describe("Procedure name or address; use --procedure=<value> for leading dashes"),
|
|
144
185
|
snapshot: z
|
|
145
186
|
.string()
|
|
146
187
|
.min(1)
|
|
@@ -149,17 +190,28 @@ const registerFunctionCommand = (cli, logger) => {
|
|
|
149
190
|
"target-format": formatSelectionOption,
|
|
150
191
|
provider: providerSelectionOption,
|
|
151
192
|
}),
|
|
152
|
-
run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", {
|
|
193
|
+
run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", {
|
|
194
|
+
procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "analyze_function"),
|
|
195
|
+
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
153
196
|
});
|
|
154
197
|
};
|
|
155
|
-
const registerInstructionsCommand = (cli, logger) => {
|
|
198
|
+
const registerInstructionsCommand = (cli, logger, runDirectAnalysis) => {
|
|
156
199
|
cli.command(CLI_COMMANDS.instructions, {
|
|
157
200
|
description: "Read every raw instruction without decompiling",
|
|
158
201
|
args: z.object({
|
|
159
202
|
path: z.string().describe("App or program path"),
|
|
160
|
-
address: z
|
|
203
|
+
address: z
|
|
204
|
+
.string()
|
|
205
|
+
.min(1)
|
|
206
|
+
.optional()
|
|
207
|
+
.describe("Procedure name or address"),
|
|
161
208
|
}),
|
|
162
209
|
options: z.object({
|
|
210
|
+
procedure: z
|
|
211
|
+
.string()
|
|
212
|
+
.min(1)
|
|
213
|
+
.optional()
|
|
214
|
+
.describe("Procedure name or address; use --procedure=<value> for leading dashes"),
|
|
163
215
|
snapshot: z
|
|
164
216
|
.string()
|
|
165
217
|
.min(1)
|
|
@@ -169,18 +221,27 @@ const registerInstructionsCommand = (cli, logger) => {
|
|
|
169
221
|
provider: providerSelectionOption,
|
|
170
222
|
}),
|
|
171
223
|
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.instructions, () => runDirectAnalysis(args.path, "read_function_instructions", {
|
|
172
|
-
procedure: args.address,
|
|
224
|
+
procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "read_function_instructions"),
|
|
173
225
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
174
226
|
});
|
|
175
227
|
};
|
|
176
|
-
const registerSearchCommand = (cli, logger) => {
|
|
228
|
+
const registerSearchCommand = (cli, logger, runDirectAnalysis) => {
|
|
177
229
|
cli.command(CLI_COMMANDS.search, {
|
|
178
230
|
description: "Search every analyzed string or procedure name",
|
|
179
231
|
args: z.object({
|
|
180
232
|
path: z.string().describe("App or program path"),
|
|
181
|
-
pattern: z
|
|
233
|
+
pattern: z
|
|
234
|
+
.string()
|
|
235
|
+
.min(1)
|
|
236
|
+
.optional()
|
|
237
|
+
.describe("Literal text or regex pattern"),
|
|
182
238
|
}),
|
|
183
239
|
options: z.object({
|
|
240
|
+
pattern: z
|
|
241
|
+
.string()
|
|
242
|
+
.min(1)
|
|
243
|
+
.optional()
|
|
244
|
+
.describe("Complete literal text or regex pattern; use --pattern=<value> for leading dashes"),
|
|
184
245
|
kind: z
|
|
185
246
|
.enum(["strings", "procedures"])
|
|
186
247
|
.default("strings")
|
|
@@ -203,7 +264,9 @@ const registerSearchCommand = (cli, logger) => {
|
|
|
203
264
|
}),
|
|
204
265
|
alias: { caseSensitive: "case-sensitive" },
|
|
205
266
|
run: ({ args, options }) => logCliCommand(logger, "search", () => runDirectAnalysis(args.path, options.kind === "strings" ? "search_strings" : "search_procedures", {
|
|
206
|
-
pattern: args.pattern,
|
|
267
|
+
pattern: resolveCliAnalysisSelector(args.pattern, options.pattern, "pattern", options.kind === "strings"
|
|
268
|
+
? "search_strings"
|
|
269
|
+
: "search_procedures"),
|
|
207
270
|
mode: options.mode,
|
|
208
271
|
case_sensitive: options.caseSensitive,
|
|
209
272
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
|
-
import { runDirectAnalysis } from "../composition/directAnalysis.js";
|
|
3
2
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
4
3
|
import { logCliCommand } from "../cliLogging.js";
|
|
5
4
|
import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
|
|
6
5
|
/** Register native load-image, memory, and annotation CLI commands. */
|
|
7
|
-
export const registerCoreNativeCommands = (cli, logger) => {
|
|
8
|
-
registerAnnotationCommand(cli, logger);
|
|
6
|
+
export const registerCoreNativeCommands = (cli, logger, runDirectAnalysis) => {
|
|
7
|
+
registerAnnotationCommand(cli, logger, runDirectAnalysis);
|
|
9
8
|
cli.command(CLI_COMMANDS.inspectNativeLoadImage, {
|
|
10
9
|
description: "Verify loaded native bytes, source mappings, relocations and entry",
|
|
11
10
|
args: z.object({ path: z.string().describe("Local executable path") }),
|
|
@@ -160,11 +159,11 @@ export const registerCoreNativeCommands = (cli, logger) => {
|
|
|
160
159
|
run: ({ args, options }) => logCliCommand(logger, command, () => runDirectAnalysis(args.path, operation, { address: args.address }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
161
160
|
});
|
|
162
161
|
}
|
|
163
|
-
registerNativeApiCommand(cli, logger);
|
|
164
|
-
registerNativeUiActionCommand(cli, logger);
|
|
165
|
-
registerNativeDispatchMetadataCommand(cli, logger);
|
|
162
|
+
registerNativeApiCommand(cli, logger, runDirectAnalysis);
|
|
163
|
+
registerNativeUiActionCommand(cli, logger, runDirectAnalysis);
|
|
164
|
+
registerNativeDispatchMetadataCommand(cli, logger, runDirectAnalysis);
|
|
166
165
|
};
|
|
167
|
-
const registerNativeDispatchMetadataCommand = (cli, logger) => {
|
|
166
|
+
const registerNativeDispatchMetadataCommand = (cli, logger, runDirectAnalysis) => {
|
|
168
167
|
cli.command(CLI_COMMANDS.inspectNativeDispatchMetadata, {
|
|
169
168
|
description: "Inspect typed Objective-C and Swift dispatch metadata",
|
|
170
169
|
args: z.object({
|
|
@@ -190,7 +189,7 @@ const registerNativeDispatchMetadataCommand = (cli, logger) => {
|
|
|
190
189
|
run: async ({ args, options }) => logCliCommand(logger, "inspect-native-dispatch-metadata", () => runDirectAnalysis(args.path, "inspect_native_dispatch_metadata", { max_records: options.maxRecords }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
191
190
|
});
|
|
192
191
|
};
|
|
193
|
-
const registerNativeUiActionCommand = (cli, logger) => {
|
|
192
|
+
const registerNativeUiActionCommand = (cli, logger, runDirectAnalysis) => {
|
|
194
193
|
cli.command(CLI_COMMANDS.traceNativeUiAction, {
|
|
195
194
|
description: "Trace a compiled UI action selector to its native handler and direct callees",
|
|
196
195
|
args: z.object({
|
|
@@ -238,7 +237,7 @@ const registerNativeUiActionCommand = (cli, logger) => {
|
|
|
238
237
|
}, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
239
238
|
});
|
|
240
239
|
};
|
|
241
|
-
const registerNativeApiCommand = (cli, logger) => {
|
|
240
|
+
const registerNativeApiCommand = (cli, logger, runDirectAnalysis) => {
|
|
242
241
|
cli.command(CLI_COMMANDS.inspectNativeApi, {
|
|
243
242
|
description: "Reconstruct one native function API boundary with evidence",
|
|
244
243
|
args: z.object({
|
|
@@ -257,7 +256,7 @@ const registerNativeApiCommand = (cli, logger) => {
|
|
|
257
256
|
run: ({ args, options }) => logCliCommand(logger, "inspect-native-api", () => runDirectAnalysis(args.path, "inspect_native_api", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
258
257
|
});
|
|
259
258
|
};
|
|
260
|
-
const registerAnnotationCommand = (cli, logger) => {
|
|
259
|
+
const registerAnnotationCommand = (cli, logger, runDirectAnalysis) => {
|
|
261
260
|
cli.command(CLI_COMMANDS.annotateNativeFunction, {
|
|
262
261
|
description: "Edit function annotations and return refreshed analysis",
|
|
263
262
|
args: z.object({
|