🤖 AI Summary
This paper addresses the challenge of verifying micropatches in binary code. We propose an automated, binary-level differential analysis method for comparing two program versions. Leveraging angr-based symbolic execution, our approach identifies reachable final states under identical inputs, enabling fine-grained matching and root-cause attribution of differences in register states, memory contents, and side effects. We introduce a novel compatibility-aware state alignment mechanism to overcome mismatches arising from control- and data-flow inconsistencies at the binary level. An interactive web visualization interface—built with React and TypeScript—supports dynamic difference pruning, multi-dimensional filtering, and provenance exploration. Evaluated on real-world firmware and application binaries, our method demonstrates strong capability in verifying functional equivalence and security preservation of micropatches, significantly improving verification efficiency, precision, and interpretability.
📝 Abstract
This paper introduces cozy, a tool for analyzing and visualizing differences between two versions of a software binary. The primary use case for cozy is validating"micropatches": small binary or assembly-level patches inserted into existing compiled binaries. To perform this task, cozy leverages the Python-based angr symbolic execution framework. Our tool analyzes the output of symbolic execution to find end states for the pre- and post-patched binaries that are compatible (reachable from the same input). The tool then compares compatible states for observable differences in registers, memory, and side effects. To aid in usability, cozy comes with a web-based visual interface for viewing comparison results. This interface provides a rich set of operations for pruning, filtering, and exploring different types of program data.