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.