Affiliation:
1. NEC Laboratories America, Inc., Princeton, NJ
2. University of Wisconsin and GrammaTech, Inc., Ithaca, NY
Abstract
Over the last seven years, we have developed static-analysis methods to recover a good approximation to the variables and dynamically allocated memory objects of a stripped executable, and to track the flow of values through them. The article presents the algorithms that we developed, explains how they are used to recover Intermediate Representations (IRs) from executables that are similar to the IRs that would be available if one started from source code, and describes their application in the context of program understanding and automated bug hunting.
Unlike algorithms for analyzing executables that existed prior to our work, the ones presented in this article provide useful information about memory accesses, even in the absence of debugging information. The ideas described in the article are incorporated in a tool for analyzing Intel x86 executables, called CodeSurfer/x86. CodeSurfer/x86 builds a system dependence graph for the program, and provides a GUI for exploring the graph by (i) navigating its edges, and (ii) invoking operations, such as forward slicing, backward slicing, and chopping, to discover how parts of the program can impact other parts.
To assess the usefulness of the IRs recovered by CodeSurfer/x86 in the context of automated bug hunting, we built a tool on top of CodeSurfer/x86, called Device-Driver Analyzer for x86 (DDA/x86), which analyzes device-driver executables for bugs. Without the benefit of either source code or symbol-table/debugging information, DDA/x86 was able to find known bugs (that had been discovered previously by source-code analysis tools), along with useful error traces, while having a low false-positive rate. DDA/x86 is the first known application of program analysis/verification techniques to industrial executables.
Funder
National Science Foundation
Division of Computing and Communication Foundations
HSARPA
Air Force Research Laboratory
Office of Naval Research
Publisher
Association for Computing Machinery (ACM)
Cited by
146 articles.
订阅此论文施引文献
订阅此论文施引文献,注册后可以免费订阅5篇论文的施引文献,订阅后可以查看论文全部施引文献
1. NativeSummary: Summarizing Native Binary Code for Inter-language Static Analysis of Android Apps;Proceedings of the 33rd ACM SIGSOFT International Symposium on Software Testing and Analysis;2024-09-11
2. Define-Use Guided Path Exploration for Better Forced Execution;Proceedings of the 33rd ACM SIGSOFT International Symposium on Software Testing and Analysis;2024-09-11
3. Compiling with Abstract Interpretation;Proceedings of the ACM on Programming Languages;2024-06-20
4. Polynima: Practical Hybrid Recompilation for Multithreaded Binaries;Proceedings of the Nineteenth European Conference on Computer Systems;2024-04-22
5. BinVuGAL: Binary vulnerability detection method based on graph neural network combined with assembly language model;Proceedings of the 2024 3rd International Conference on Cryptography, Network Security and Communication Technology;2024-01-19