The inherent differences between C++ and Java programs dictate that the methods used for reverse engineering their compiled executables will be languagespecific. This paper looks at the history of decompilers, disassemblers, and obfuscators in C++ and Java and presents the current state of the art for binary reverse engineering. An experimentation framework for evaluating tools is described, including methodology, benchmark programs, metrics, and reverse engineering tasks. Preliminary results of experiments conducted so far to assess the capability of a small select set of chosen popular tools are given. These results reveal languagespecific differences in the feasibility of the binary reverse engineering tasks on input programs with varying degrees of obfuscation (e.g., stripped vs. unstripped binaries). In addition, the results reveal the relative effort required to complete a task and an assessment of the value of the tools and techniques.
Lori Vinciguerra, Linda M. Wills, Nidhi Kejriwal,