The Cosmic Turtle of Code
Where
Talks
ShmooCon 2024
Duration
47 min
Shows how call graphs, coverage overlays and trace views help reverse engineers and fuzzers understand binary code faster.
Summary
The speaker, a code security reviewer, starts from the observation that people read code top to bottom, which makes it hard to hold the structure of many functions in mind. He compares a single function's control flow graph with a call graph and shows how the same logic becomes harder to follow once functions are reordered or split across files. These graph views are decades old and have long been built into reverse engineering tools such as IDA Pro and Binary Ninja, but they are most useful when they can be scripted.
To test this idea he wrote Ariadne, a Binary Ninja plugin built on NetworkX that renders a live call graph as the user navigates the binary. Applied to reachability, it traced a path from an entry point to a vulnerable function in an old CVE. For a data-flow question, intersecting the ancestor sets of two file-handling functions revealed a shared parent, main. Overlaying fuzzing coverage data showed that POST request handling was never reached, which pointed the fuzzer toward the string comparisons that gated it. He also tried patch analysis on a complex libwebp heap bug and found that static graphs struggled with allocation lifetimes and ordering, which are time-dependent.
He then surveyed time-based views, including instruction-address scatter plots, the DARPA filament view, flame graphs, and the tenant plugin, and showed an animated visualization of a live head-to-head CTF. His takeaway is that graphs supplement rather than replace find and cross-reference workflows, and that the designer should decide whether a view is for comparison or for interactive drill-down.
Related talks
Talks·30 min
Petr Pucil · Mikhail Yakshin
Shows how a declarative format language turns binary file and protocol descriptions into parsers across many languages.
Talks·17 min
Chris Lopez
Walks through how Swift binaries look in arm64 disassembly, covering strings, arrays, metadata and calling conventions.
Day 2 Stream 2·52 min
Dmitriy Beryoza
Introduces reverse engineering concepts, legal considerations, tooling and a self-study path for analyzing closed-source software.


