Presently described is a decompilation method of operation and system for
parsing executable code, identifying and recursively modeling data flows, identifying
and recursively modeling control flow, and iteratively refining these models to
provide a complete model at the nanocode level. The nanocode decompiler may be
used to determine if flaws, security vulnerabilities, or general quality issues
exist in the code. The nanocode decompiler outputs in a standardized, human-readable
intermediate representation (IR) designed for automated or scripted analysis and
reporting. Reports may take the form of a computer annotated and/or partially human
annotated nanocode listing in the above-described IR. Annotations may include plain
English statements regarding flaws and pointers to badly constructed data structures,
unchecked buffers, malicious embedded code or "trap doors," and the like. Annotations
may be generated through a scripted analysis process or by means of an expert-enhanced,
quasi-autonomous system.