cd /news/ai-tools/reverse-engineering-fortinet-with-ab… Β· home β€Ί topics β€Ί ai-tools β€Ί article
[ARTICLE Β· art-140049] src=github.com β†— pub= topic=ai-tools verified=true sentiment=↑ positive

Reverse Engineering Fortinet with Ablation

Ablation is a reverse engineering framework that matches the core disassembly, decompilation, and binary analysis capabilities of Ghidra, IDA Pro, and Binary Ninja, and pairs with an LLM to operate as a fully autonomous reverse engineering tool. Ablation loads a 50 MB binary in 35 seconds by analyzing only the functions a user is actively working on, whereas Ghidra and IDA Pro can take hours by parsing the entire file into a database first. The framework adds BERT-based semantic search, Jaccard and Dynamic Time Warping version diffing, cross-binary data-flow analysis, and multi-architecture support spanning x86, ARM, MIPS, PowerPC, RISC-V, ARC, and V850.

read9 min views1 publishedSep 26, 2026
Reverse Engineering Fortinet with Ablation
Image: Michielbdejong (auto-discovered)

Ablation is a reverse engineering framework that provides the exact same core disassembly, decompilation, and binary analysis capabilities as industry-standard tools like Ghidra, IDA Pro, and Binary Ninja. Combined with an LLM, it transforms into a fully autonomous reverse engineering tool.

Ablation is built for the modern landscape, and more importantly, the human.

Now reverse engineering is accessible to anyone. No matter your wallet or your barrier of entry into education, you can learn about reverse engineering as you reverse engineer.

flowchart TD
    Binary(["<b>Target Binary</b><br/><i>ELF Β· PE Β· firmware</i>"])
    Claude(["<b>Claude Code (Orchestrator)</b><br/><i>Central Agent Controller</i>"])

    Binary -->|"load"| BCtx["<b>BinaryContext</b><br/><i>PLT Β· Strings Β· Call Graph Β· XRefs</i>"]
    BCtx -->|"context"| Corpus["<b>Corpus Builder</b><br/><i>Semantic Embedding DB</i>"]
    BCtx -->|"context"| Taint["<b>Taint Engine</b><br/><i>Data Flow / Sinks</i>"]
    BCtx -->|"context"| Diffing["<b>Diffing Engine</b><br/><i>DTW / Version Delta</i>"]
    BCtx -->|"context"| FmtStr["<b>Format String</b><br/><i>Specifier Scanner</i>"]
    BCtx -->|"context"| Heap["<b>Heap Scanner</b><br/><i>Chunk / UAF Audit</i>"]
    BCtx -->|"context"| MultiArch["<b>Multi-Arch Engine</b><br/><i>MIPS Β· PPC Β· RISC-V Β· ARC Β· V850</i>"]
    BCtx -->|"context"| Driver["<b>Driver Engine</b><br/><i>Kernel IOCTL / BYOVD Audit</i>"]

    Corpus -->|"embeddings"| Semantic["<b>Semantic Search</b><br/><i>BERT Behavioral Fingerprints</i>"]

    Semantic -. "candidates" .-> Claude
    Taint -. "findings" .-> Claude
    Diffing -. "findings" .-> Claude
    FmtStr -. "findings" .-> Claude
    Heap -. "findings" .-> Claude
    MultiArch -. "findings" .-> Claude
    Driver -. "findings" .-> Claude

    Claude -->|"confirmed finding"| Registry["<b>Finding Registry</b><br/><i>Cross-Target Corpus</i>"]
    Registry -->|"seeds future sweeps"| Semantic

    classDef primary fill:#2a1a4a,stroke:#7c3aed,stroke-width:2px,color:#fff
    classDef foundation fill:#0d1117,stroke:#58a6ff,stroke-width:2px,color:#e5e7eb
    classDef engine fill:#171717,stroke:#404040,stroke-width:1px,color:#e5e7eb
    classDef feedback fill:#0d2818,stroke:#238636,stroke-width:2px,color:#e5e7eb

    class Claude,Binary primary
    class BCtx foundation
    class Corpus,Semantic,Taint,Diffing,FmtStr,Heap,MultiArch,Driver engine
    class Registry feedback
mindmap
  root((Local Decompilers))
    x86 Family
      x86 - 32
      x86 - 64
    ARM Family
      ARM - 32
      ARM - 64
    MIPS Family
      MIPS 32+nM
      MIPS - 64
    PowerPC Family
      PPC - 32
      PPC - 64
    RISC-V Family
      RISC-V 32
      RISC-V 64
    Embedded / Other
      ARC EM/HS
      V850 - 32
  • Semantic Search via BERT: Semantic search finds results based on meaning rather than exact keywords. BERT reads text and figures out what it means. Similar meanings get similar scores, so you can search by concept instead of exact words. By combining the two, it speeds up the main bottleneck of reverse engineering while finding the vulnerable functions.

  • Extreme Performance: A 50 MB binary loads in 35 seconds. Ghidra and IDA Pro can take hours because they parse the entire file into a database before you can do anything. Ablation only analyzes the functions you are actively working on, so you start immediately.

  • Version Diffing: Utilizing the Jaccard method to measure how much a function's behavior overlaps between releases and Dynamic Time Warping that tracks the "shape" of how a function executes across those versions of firmware or software that a vendor updated, Ablation confirms whether a patch actually changed the logic or just the packaging, because a cosmetic recompile can't hide an unpatched vulnerability.

  • Cross-Binary Analysis: Analyze every shared library in a firmware image simultaneously, tracking data flows across binary boundaries.

  • Entropy Mapper: Finds encrypted, compressed, or packed sections in a binary.

  • Crypto Audit: Scans for cryptography.

  • XorSolver: Recovers, then decrypts the target section which allows further reverse engineering.

Everything legacy tools have

Feature Ablation Ghidra IDA Pro Binary Ninja
Disassembler βœ… βœ… βœ… βœ…
Decompiler βœ… βœ… βœ… βœ…
Scripting API βœ… βœ… βœ… βœ…
Multi-Architecture βœ… βœ… βœ… βœ…
Binary Diffing βœ… βœ… βœ… βœ…

Capabilities legacy tools don't have

Feature Ablation Ghidra IDA Pro Binary Ninja
Semantic Search βœ… ❌ ❌ ❌
Autonomous Loop βœ… ❌ ❌ ❌
Pattern Library βœ… ❌ ❌ ❌
Cross-Binary Taint Tracking βœ… ❌ ❌ ❌
Version Diffing via DTW βœ… ❌ ❌ ❌
Finding Registry βœ… ❌ ❌ ❌
Load Time (50 MB) 35 sec 1-4 hrs Heavy DB Heavy DB
Cost Open Source Free / OSS $3,000+ Commercial

When executing commands like ablation sweep firmware.so --json results.json, Claude Code can interpret the JSON, identify suspicious functions, and automatically pivot to run ablation cfg to visualize logic or ablation taint to verify reachability.

This ReAct loop using claude-sonnet-5 for decompilation effectively replaces the junior analyst role during triage, surfacing only confirmed, exploitable paths for human review.

Recommended model: claude-sonnet-4-6 (released January 2026).

/model claude-sonnet-4-6

Ablation has been used to analyze production firmware and kernel drivers from Fortinet, Cisco, Axis, Fujitsu, MikroTik, Orka, TencentOS, Enigma2, and Skydio.

Following coordinated disclosure on Cisco FMC and ISE, the Cisco Product Security Incident Response Team (PSIRT) has adopted Ablation for internal vulnerability triage. Cisco PSIRT is actively using it to triage ongoing disclosure reports across Firepower Threat Defense (FTD), Cisco Secure Client (AnyConnect), HyperFlex, and Catalyst. Cisco Adaptive Security Appliance (ASA) LINA has also been reverse engineered using Ablation, with findings currently under coordinated triage via CERT/CC VINCE.

CVE Product Title CVSS Advisory
CVE-2026-76420 Secure Firewall Management Center (FMC) Peer Impersonation 9.0 Critical cisco-sa-fmc2-multivulns-HXgcqRG
CVE-2026-76412 Secure Firewall Management Center (FMC) Privilege Escalation to root 8.5 High cisco-sa-fmc2-multivulns-HXgcqRG
CVE-2026-76413 Secure Firewall Management Center (FMC) Single Sign-On Token Forgery 8.5 High cisco-sa-fmc2-multivulns-HXgcqRG
CVE-2026-76447 Identity Services Engine (ISE) OCSP Responder Authentication Bypass 5.3 Medium cisco-sa-ise-multiauth-bypass-sgD2HbL4

End-to-end analysis of the ML native binaries bundled in FortiSOAR 8.0.0, from RPM extraction through BinaryContext, string xrefs, and capstone disassembly to confirmed findings.

flowchart TD
    RPM["elasticsearch-8.19.19-x86_64.rpm<br/>649MB Β· FortiSOAR 8.0.0 third-party bundle"]

    RPM -->|rpm2cpio / cpio| EXTRACT["x-pack-ml/platform/linux-x86_64/"]

    EXTRACT --> PI["bin/pytorch_inference<br/>397KB Β· stripped PIE Β· x86-64"]
    EXTRACT --> CTRL["bin/controller<br/>128KB Β· stripped PIE Β· x86-64"]
    EXTRACT --> LIBS["lib/libMlCore.so<br/>lib/libtorch_cpu.so"]

    subgraph TRACK_PI ["pytorch_inference track"]
        direction TB
        BCI["BinaryContext.load_or_build()<br/>32 func starts Β· 551 strings Β· PLT built"]
        BCI --> SS["ctx.strings scan<br/>aten::from_file VA 0x51560<br/>aten::save VA 0x51570<br/>validElasticLicenseKeyConfirmed 0x52e08"]
        SS --> XREF["ctx.string_xrefs()<br/>both ops xref β†’ 0x17499, 0x174af<br/>ctx.func_containing() β†’ init fn 0x10000"]
        XREF --> DA1["capstone disasm 0x17450<br/>lea rsi β†’ aten::from_file Β· call set::insert<br/>lea rsi β†’ aten::save Β· call set::insert<br/>CONFIRMED: exactly 2 blacklist entries"]
        DA1 --> DA2["capstone disasm 0x16511<br/>cmp qword ptr [r9], 0<br/>je β†’ model loads Β· ne β†’ handleFatal<br/>empty set = bypass confirmed"]
    end

    subgraph TRACK_LIBS ["library analysis"]
        direction TB
        NM["nm -D libMlCore.so<br/>spawn at 0xfdb20 Β· ctor at 0xfcfd0"]
        NM --> DA3["capstone disasm libMlCore.so:0xfdbc7<br/>cmp entry length == exe_path length<br/>memcmp at 0xfdbdb<br/>proper equality check Β· no prefix bypass"]
        LSCAN["re.findall aten:: in libtorch_cpu.so<br/>2481 distinct ops found<br/>2 blocked Β· 2479 unblocked"]
    end

    subgraph TRACK_CTRL ["controller track"]
        direction TB
        BCC["BinaryContext.load_or_build()<br/>18 func starts Β· PLT Β· strings"]
        BCC --> XREF2["ctx.string_xrefs() on 5 path strings<br/>./autodetect Β· ./categorize<br/>./data_frame_analyzer Β· ./normalize<br/>./pytorch_inference<br/>all xref at 0x9a04-0x9a5e"]
        XREF2 --> DA4["capstone disasm 0x99e9<br/>call CProgName::progDir()<br/>call COsFileFuncs::chdir()<br/>chdir to binary dir before spawn"]
        DA4 --> DA5["capstone disasm 0x11500<br/>args vector from command pipe tokens<br/>passed raw to spawn() at 0x11699<br/>no validation"]
    end

    PI --> BCI
    PI --> BCC
    LIBS --> NM
    LIBS --> LSCAN

    DA2 --> F1
    LSCAN --> F1["F1 Β· HIGH<br/>verifySafeModel blocks 2 of 2481 ops<br/>upload malicious .pt via ML API<br/>seccomp BPF not yet decoded, CIA impact open"]

    DA3 --> F2
    XREF2 --> F2["F2 Β· LOW<br/>controller spawn allowlist is sound<br/>but args vector unchecked<br/>requires elasticsearch user pipe access"]

    DA5 --> F2

    SS --> F3["F3 Β· INFO<br/>license gate = JSON field only<br/>no cryptographic verification"]

    classDef finding fill:#1a1a2e,stroke:#e94560,stroke-width:2px,color:#fff
    classDef tool fill:#16213e,stroke:#0f3460,stroke-width:1px,color:#e5e7eb
    classDef binary fill:#0f3460,stroke:#533483,stroke-width:2px,color:#fff
    classDef input fill:#533483,stroke:#7c3aed,stroke-width:2px,color:#fff

    class F1,F2,F3 finding
    class BCI,BCC,NM,LSCAN,SS,XREF,XREF2,DA1,DA2,DA3,DA4,DA5 tool
    class PI,CTRL,LIBS binary
    class RPM,EXTRACT input
pip install git+https://github.com/Ablation-Tool/ablation

With LLM features:

pip install "git+https://github.com/Ablation-Tool/ablation#egg=ablation[llm]"

Reach out directly. If there's anything you'd like added or improved on or just report a bug.

See LICENSE.

Nicholas Michael Kloster & Claude

Books (All obtained from O'Reilly Media | www.oreilly.com)

Title Author
The Art of Software Security Assessment Dowd, McDonald, Schuh
Practical Binary Analysis Dennis Andriesse
Practical Malware Analysis Sikorski, Honig
Practical Reverse Engineering Dang, Gazet, Bachaalany
Hacking: The Art of Exploitation (2e) Jon Erickson
Learning Linux Binary Analysis Ryan O'Neill
Windows Internals Part 1 & 2 Yosifovich, Russinovich
Rootkits: Subverting the Windows Kernel Hoglund, Butler
Advanced Compiler Design and Implementation Muchnick
Engineering a Compiler Cooper, Torczon
Security Engineering (3rd ed.) Ross Anderson
Practical IoT Hacking Chantzis et al.
The Art of Mac Malware Patrick Wardle
Mathematical Concepts and Methods in Modern Biology Robeva, Hodge

Research Papers

Title Authors
Finding Taint-Style Vulnerabilities in Linux-based Embedded Firmware with SSE-based Alias Analysis Cheng, Zheng, Liu, Guan, Liu, Li, Zhu, Ye, Sun
iResolveX: Multi-Layered Indirect Call Resolution via Static Reasoning and Learning-Augmented Refinement Santra et al.
Extracting Protocol Format as State Machine via Controlled Static Loop Analysis Shi, Xu, Zhang @qingkaishi
NEMETYL: Message Type Identification of Binary Network Protocols using Continuous Segment Similarity Kleber et al. @vs-uulm
Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice Adrian et al. @dadrian
Nonce-Disrespecting Adversaries: Practical Forgery Attacks on GCM in TLS BΓΆck et al. @hannob
Whitening Sentence Representations for Better Semantics and Faster Retrieval Su et al. @bojone
Constant Propagation with Conditional Branches Wegman, Zadeck
A Simple, Fast Dominance Algorithm Cooper, Harvey, Kennedy
libdft: Practical Dynamic Data Flow Tracking for Commodity Systems Kemerlis et al. @vkemerlis

Honorable Mention

Microsoft Excel (Data Analysis ToolPak) When analyzing closed infrastructure or securing black-box systems, this exact process is called timing analysis or telemetry reverse engineering. Without source code, the Data Analysis ToolPak mathematically deconstructs how an application works on the backend by strictly observing its inputs and outputs.

── more in #ai-tools 4 stories Β· sorted by recency
── more on @ablation 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/reverse-engineering-…] indexed:0 read:9min 2026-09-26 Β· β€”