<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>program-analysis on The Trail of Bits Blog</title><link>https://miscreants.github.io/blog.trailofbits.com/categories/program-analysis/</link><description>Recent content in program-analysis on The Trail of Bits Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 19 Dec 2025 00:00:00 -0500</lastBuildDate><atom:link href="https://miscreants.github.io/blog.trailofbits.com/categories/program-analysis/index.xml" rel="self" type="application/rss+xml"/><item><title>Can chatbots craft correct code?</title><link>https://miscreants.github.io/blog.trailofbits.com/2025/12/19/can-chatbots-craft-correct-code/</link><pubDate>Fri, 19 Dec 2025 07:00:00 -0500</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2025/12/19/can-chatbots-craft-correct-code/</guid><description>LLMs fundamentally differ from compilers because they lack determinism and semantic guarantees, making them useful coding assistants but unreliable for autonomous code generation without human review and formal verification.</description></item><item><title>Security flaws in an SSO plugin for Caddy</title><link>https://miscreants.github.io/blog.trailofbits.com/2023/09/18/security-flaws-in-an-sso-plugin-for-caddy/</link><pubDate>Mon, 18 Sep 2023 08:00:42 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2023/09/18/security-flaws-in-an-sso-plugin-for-caddy/</guid><description>We identified 10 security vulnerabilities within the caddy-security plugin for the Caddy web server that could enable a variety of high-severity attacks in web applications, including client-side code execution, OAuth replay attacks, and unauthorized access to resources. During our evaluation, Caddy was deployed as a reverse proxy […]</description></item><item><title>How to avoid the aCropalypse</title><link>https://miscreants.github.io/blog.trailofbits.com/2023/03/30/acropalypse-polytracker-blind-spots/</link><pubDate>Thu, 30 Mar 2023 08:00:22 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2023/03/30/acropalypse-polytracker-blind-spots/</guid><description>The aCropalypse is upon us! Last week, news about CVE-2023-21036, nicknamed the &amp;ldquo;aCropalypse,&amp;rdquo; spread across Twitter and other media, and I quickly realized that the underlying flaw could be detected by our tool, PolyTracker. I&amp;rsquo;ll explain how PolyTracker can detect files affected by the vulnerability even without specific file format knowledge.</description></item><item><title>What child is this?</title><link>https://miscreants.github.io/blog.trailofbits.com/2022/12/20/process-reparenting-microsoft-windows/</link><pubDate>Tue, 20 Dec 2022 08:00:25 -0500</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2022/12/20/process-reparenting-microsoft-windows/</guid><description>A Primer on Process Reparenting in Windows. Process reparenting is a technique used in Microsoft Windows to create a child process under a different parent process than the one making the call to CreateProcess. Malicious actors can use this technique to evade security products or break process ancestry ties, making detection more […]</description></item><item><title>Magnifier: An Experiment with Interactive Decompilation</title><link>https://miscreants.github.io/blog.trailofbits.com/2022/08/25/magnifier-an-experiment-with-interactive-decompilation/</link><pubDate>Thu, 25 Aug 2022 09:00:30 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2022/08/25/magnifier-an-experiment-with-interactive-decompilation/</guid><description>Today, we are releasing Magnifier, an experimental reverse engineering user interface I developed during my internship. Magnifier asks, “What if, as an alternative to taking handwritten notes, reverse engineering researchers could interactively reshape a decompiled program to reflect what they would normally record?” With Magnifier, the decompiled C code isn’t the end—it’s […]</description></item><item><title>Using mutants to improve Slither</title><link>https://miscreants.github.io/blog.trailofbits.com/2022/08/17/using-mutants-to-improve-slither/</link><pubDate>Wed, 17 Aug 2022 09:00:12 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2022/08/17/using-mutants-to-improve-slither/</guid><description>Improving static analysis tools can be hard; once you’ve implemented a good tool based on a useful representation of a program and added a large number of rules to detect problems, how do you further enhance the tool’s bug-finding power? One (necessary) approach to coming up with new rules […]</description></item><item><title>Maat: Symbolic execution made easy</title><link>https://miscreants.github.io/blog.trailofbits.com/2022/02/23/maat-symbolic-execution-made-easy/</link><pubDate>Wed, 23 Feb 2022 07:00:08 -0500</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2022/02/23/maat-symbolic-execution-made-easy/</guid><description>We have released Maat, a cross-architecture, multi-purpose, and user-friendly symbolic execution framework. It provides common symbolic execution capabilities such as dynamic symbolic execution (DSE), taint analysis, binary instrumentation, environment simulation, and constraint solving. Maat is easy-to-use, is based on the popular Ghidra intermediate representation (IR) language p-code, prioritizes runtime performance, and has […]</description></item><item><title>Write Rust lints without forking Clippy</title><link>https://miscreants.github.io/blog.trailofbits.com/2021/11/09/write-rust-lints-without-forking-clippy/</link><pubDate>Tue, 09 Nov 2021 00:30:40 -0500</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2021/11/09/write-rust-lints-without-forking-clippy/</guid><description>Originally published May 20, 2021 This blog post introduces Dylint, a tool for loading Rust linting rules (or “lints”) from dynamic libraries. Dylint makes it easy for developers to maintain their own personal lint collections. Previously, the simplest way to write a new Rust lint was to fork Clippy, Rust’s […]</description></item><item><title>Detecting Bad OpenSSL Usage</title><link>https://miscreants.github.io/blog.trailofbits.com/2020/05/29/detecting-bad-openssl-usage/</link><pubDate>Fri, 29 May 2020 07:50:06 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2020/05/29/detecting-bad-openssl-usage/</guid><description>OpenSSL is one of the most popular cryptographic libraries out there; even if you aren’t using C/C++, chances are your programming language’s biggest libraries use OpenSSL bindings as well. It’s also notoriously easy to mess up due to the design of its low-level API. Yet many of these mistakes fall into […]</description></item><item><title>Two New Tools that Tame the Treachery of Files</title><link>https://miscreants.github.io/blog.trailofbits.com/2019/11/01/two-new-tools-that-tame-the-treachery-of-files/</link><pubDate>Fri, 01 Nov 2019 07:00:18 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2019/11/01/two-new-tools-that-tame-the-treachery-of-files/</guid><description>Parsing is hard, even when a file format is well specified. But when the specification is ambiguous, it leads to unintended and strange parser and interpreter behaviors that make file formats susceptible to security vulnerabilities. What if we could automatically generate a “safe” subset of any file format, along with an associated, verified parser? That’s […]</description></item><item><title>Siderophile: Expose your Crate’s Unsafety</title><link>https://miscreants.github.io/blog.trailofbits.com/2019/07/01/siderophile-expose-your-crates-unsafety/</link><pubDate>Mon, 01 Jul 2019 11:30:06 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2019/07/01/siderophile-expose-your-crates-unsafety/</guid><description>Today we released a tool, siderophile, that helps Rust developers find fuzzing targets in their codebases. Siderophile trawls your crate’s dependencies and attempts to finds every unsafe function, expression, trait method, etc. It then traces these up the callgraph until it finds the function in your crate that uses the unsafety. It ranks the functions […]</description></item><item><title>Performing Concolic Execution on Cryptographic Primitives</title><link>https://miscreants.github.io/blog.trailofbits.com/2019/04/01/performing-concolic-execution-on-cryptographic-primitives/</link><pubDate>Mon, 01 Apr 2019 07:50:55 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2019/04/01/performing-concolic-execution-on-cryptographic-primitives/</guid><description>For my winternship and springternship at Trail of Bits, I researched novel techniques for symbolic execution on cryptographic protocols. I analyzed various implementation-level bugs in cryptographic libraries, and built a prototype Manticore-based concolic unit testing tool, Sandshrew, that analyzed C cryptographic primitives under a symbolic and concrete environment. Sandshrew is a first step […]</description></item><item><title>The Good, the Bad, and the Weird</title><link>https://miscreants.github.io/blog.trailofbits.com/2018/10/26/the-good-the-bad-and-the-weird/</link><pubDate>Fri, 26 Oct 2018 06:50:13 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2018/10/26/the-good-the-bad-and-the-weird/</guid><description>Let’s automatically identify weird machines in software. Combating software exploitation has been a cat-and-mouse game ever since the Morris worm in 1988. Attackers use specific exploitation primitives to achieve unintended code execution. Major software vendors introduce exploit mitigation to break those primitives. Back and forth, back and forth. The mitigations have certainly raised the bar […]</description></item><item><title>Protecting Software Against Exploitation with DARPA’s CFAR</title><link>https://miscreants.github.io/blog.trailofbits.com/2018/09/10/protecting-software-against-exploitation-with-darpas-cfar/</link><pubDate>Mon, 10 Sep 2018 09:00:55 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2018/09/10/protecting-software-against-exploitation-with-darpas-cfar/</guid><description>Today, we’re going to talk about a hard problem that we are working on as part of DARPA’s Cyber Fault-Tolerant Attack Recovery (CFAR) program: automatically protecting software from 0-day exploits, memory corruption, and many currently undiscovered bugs. You might be thinking: “Why bother? Can’t I just compile my code with exploit mitigations like stack guard, […]</description></item><item><title>Rattle – an Ethereum EVM binary analysis framework</title><link>https://miscreants.github.io/blog.trailofbits.com/2018/09/06/rattle-an-ethereum-evm-binary-analysis-framework/</link><pubDate>Thu, 06 Sep 2018 02:30:38 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2018/09/06/rattle-an-ethereum-evm-binary-analysis-framework/</guid><description>Most smart contracts have no verified source code, but people still trust them to protect their cryptocurrency. What’s more, several large custodial smart contracts have had security incidents. The security of contracts that exist on the blockchain should be independently ascertainable. Ethereum VM (EVM) Bytecode Ethereum contracts are compiled to EVM – the Ethereum Virtual […]</description></item><item><title>Optimizing Lifted Bitcode with Dead Store Elimination</title><link>https://miscreants.github.io/blog.trailofbits.com/2018/07/06/optimizing-lifted-bitcode-with-dead-store-elimination/</link><pubDate>Fri, 06 Jul 2018 07:50:11 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2018/07/06/optimizing-lifted-bitcode-with-dead-store-elimination/</guid><description>Tim Alberdingk Thijm As part of my Springternship at Trail of Bits, I created a series of data-flow-based optimizations that eliminate most “dead” stores that emulate writes to machine code registers in McSema-lifted programs. For example, applying my dead-store-elimination (DSE) passes to Apache httpd eliminated 117,059 stores, or 50% of the store operations to Remill’s […]</description></item><item><title>State Machine Testing with Echidna</title><link>https://miscreants.github.io/blog.trailofbits.com/2018/05/03/state-machine-testing-with-echidna/</link><pubDate>Thu, 03 May 2018 06:50:48 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2018/05/03/state-machine-testing-with-echidna/</guid><description>Property-based testing is a powerful technique for verifying arbitrary properties of a program via execution on a large set of inputs, typically generated stochastically. Echidna is a library and executable I’ve been working on for applying property-based testing to EVM code (particularly code written in Solidity). Echidna is a library for generating random sequences of […]</description></item><item><title>Vulnerability Modeling with Binary Ninja</title><link>https://miscreants.github.io/blog.trailofbits.com/2018/04/04/vulnerability-modeling-with-binary-ninja/</link><pubDate>Wed, 04 Apr 2018 06:50:35 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2018/04/04/vulnerability-modeling-with-binary-ninja/</guid><description>Plenty of static analyzers can perform vulnerability discovery on source code, but what if you only have the binary? How can we model a vulnerability and then check a binary to see if it is vulnerable? The short answer: use Binary Ninja’s MLIL and SSA form. Together, they make it easy to build and solve a system of equations with a theorem prover that takes binaries and turns them, alchemy-like, into vulnerabilities!</description></item><item><title>Use our suite of Ethereum security tools</title><link>https://miscreants.github.io/blog.trailofbits.com/2018/03/23/use-our-suite-of-ethereum-security-tools/</link><pubDate>Fri, 23 Mar 2018 00:28:08 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2018/03/23/use-our-suite-of-ethereum-security-tools/</guid><description>Two years ago, when we began taking on blockchain security engagements, there were no tools engineered for the work. No static analyzers, fuzzers, or reverse engineering tools for Ethereum. So, we invested significant time and expertise to create what we needed, adapt what we already had, and refine the work continuously over dozens of audits. […]</description></item><item><title>Manticore: Symbolic execution for humans</title><link>https://miscreants.github.io/blog.trailofbits.com/2017/04/27/manticore-symbolic-execution-for-humans/</link><pubDate>Thu, 27 Apr 2017 00:00:00 -0400</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2017/04/27/manticore-symbolic-execution-for-humans/</guid><description>Manticore helps us quickly take advantage of symbolic execution, taint analysis, and instrumentation to analyze binaries.</description></item><item><title>Devirtualizing C++ with Binary Ninja</title><link>https://miscreants.github.io/blog.trailofbits.com/2017/02/13/devirtualizing-c-with-binary-ninja/</link><pubDate>Mon, 13 Feb 2017 06:50:32 -0500</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2017/02/13/devirtualizing-c-with-binary-ninja/</guid><description>In my first blog post, I introduced the general structure of Binary Ninja’s Low Level IL (LLIL), as well as how to traverse and manipulate it with the Python API. Now, we’ll do something a little more interesting. Reverse engineering binaries compiled from object-oriented languages can be challenging, particularly when it comes to virtual functions. […]</description></item><item><title>Breaking Down Binary Ninja’s Low Level IL</title><link>https://miscreants.github.io/blog.trailofbits.com/2017/01/31/breaking-down-binary-ninjas-low-level-il/</link><pubDate>Tue, 31 Jan 2017 06:50:09 -0500</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2017/01/31/breaking-down-binary-ninjas-low-level-il/</guid><description>Hi, I’m Josh. I recently joined the team at Trail of Bits, and I’ve been an evangelist and plugin writer for the Binary Ninja reversing platform for a while now. I’ve developed plugins that make reversing easier and extended Binary Ninja’s architecture support to assist in playing the microcorruption CTF. One of my favorite features of […]</description></item><item><title>Semantic Analysis of Native Programs with CodeReason</title><link>https://miscreants.github.io/blog.trailofbits.com/2014/02/23/semantic-analysis-of-native-programs-introducing-codereason/</link><pubDate>Sun, 23 Feb 2014 22:59:13 -0500</pubDate><guid>https://miscreants.github.io/blog.trailofbits.com/2014/02/23/semantic-analysis-of-native-programs-introducing-codereason/</guid><description>Have you ever wanted to make a query into a native mode program asking about program locations that write a specific value to a register? Have you ever wanted to automatically deobfuscate obfuscated strings? Reverse engineering a native program involves understanding its semantics at a low level until a high level picture of functionality emerges. […]</description></item></channel></rss>