This page contains links to projects peripherally related to decompilation. %TOC% ---++ Binary files * Information on the internal format of binary files at the [[http://www.wotsit.org][Wotsit's File Format Collection]]. ---+++ The format of Executable files * [[Win32PE]] (An In-Depth Look into the Win32 Portable Executable File Format) * [[Pc Exe Format]] from The Interrupt List by Ralph Brown * [[Ne Format]] (the NE (New Executable) format (16 bit Windows)) * [[ExeFmt]] A description of the New Executable (NE) 16-bit Windows format. * [[Pe Dump]] (PE dump program) * [[VXPE]] (VX Portable Executable Viewer) * [[PE Explorer]] (Commercial tool) * [[http://x86.ddj.com/ftp/manuals/tools/][Manuals]] on several executable file formats (OMF, PE, ELF, Dwarf, etc) ---+++ Tool generator tools These tools generate tools such as disassemblers, code generators, perhaps even architecture simulators from specification files. #NjmcToolkit * [[Njmc Tk]] The New Jersey Machine-Code Toolkit * [[http://www.cse.iitk.ac.in/users/rajiva/simnml][Sim-nML]] might be considered a competitor to the NJMC toolkit. Using specifications, you can generate disassemblers, code generators, simulators, etc. * [[http://sources.redhat.com/cgen][CGen]] is a framework for developing generators of CPU-related tools such as assemblers, disassemblers and simulators. * [[http://www.ee.princeton.edu/spam/pubs/ISDL-TR.html][ISDL]] (Instruction Set Description Language) may also be applicable. * [[http://www.obsidiansoftware.com/processor-description.htm][This page]] from [[http://www.obsidiansoftware.com][Obsidian Software]] has a great list of options and survey papers. ---+++ Resource extractors Resource extractors specialised for Visual Basic, .NET, etc are in other pages. * [[http://Inner-Smile.com/dl_res.htm][Resource-Grabber]], a tool that scans and extracts from PE binaries useful resources such as icons, bitmaps, sound files and more. ---+++ Fenris tools [[http://www.bindview.com/Services/RAZOR/Utilities/Unix_Linux/fenris_index.cfm][Fenris]] _is a multipurpose tracer, GUI debugger, stateful analyzer and partial decompiler intended to simplify bug tracking, security audits, code, algorithm, protocol analysis and computer forensics._ One of the tools, dress, can attempt to restore a symbol table in a stripped executable file (adding symbols for statically linked libraries that it recognises). It seems that this tool only supports gcc at present, but the idea is interesting. GPL'd and downloadable from the web page. Linux/x86 only. ---++ Binary file decompilation * Decompilation of executables (http://www.debugmode.com/dcompile), is a first-timer's tutorial into the process of decompilation and ethics. Also has the code for [[DecompilationCompilerSpecific#DisC_for_Turbo_C_2_0_2_01][DisC]], a simple decompiler for DOS Turbo C compiler generated executables. * [[http://www.crackingislife.com/tut/decompile.htm][Learn to Decompile Programs by hand now]] (a tutorial). * The [[http://revenge.berlios.de/index.php][Revenge]] project aims to produce a sort of dynamic decompiler, which records instruction executions, and learns the actual values taken by variables in running the project. As of January 2004, this project is still in the planning stages. ---++ Java and .NET related See [[JavaDecompilers#JavaLinks][Java Decompilers links]] or [[DotNetDecompilers#DotNetLinks][Dot Net Decompilers links]]. ---++ Delphi related * [[http://www.softpedia.com/public/cat/5/1/5-1-5.shtml][DeDe]] reproduces aspects of a Delphi compiled program. It also has a DCU Dumper to "retrieve near to pascal code of your DCU files". ---++ Conferences and workshops * The Working Conference on Reverse Engineering (WCRE) has decompilation in its list of relevant topics. * ACM SIGPLAN Symposium on Partial Evaluation and Program Manipulation - (PEPM). Specifically includes decompilation in its topics of interest. * The workshop on Source Code Analysis and Modification (SCAM) also lists decompilation in its list of relevant topics. * The European Conference on Software Maintenance and Reengineering (CSMR) includes topics such as "reverse engineering of embedded systems". Non European contributions are welcome. See [[http://www.rcost.unisannio.it/csmr2005/menu.html][CSMR 2005]], or http://reengineer.org. * The International Conference on Software Maintenance (ICSM) publishes some papers related to decompilation. ---++ Decompilation-related Theses * [[http://www.itee.uq.edu.au/~cristina/dcc/decompilation_thesis.ps.gz][Reverse Compilation Techniques]], C. Cifuentes, Queensland University of Technology PhD thesis, 1994. * [[http://vanemmerikfamily.com/mike/master.pdf][Static Single Assignment for Decompilation]], M. Van Emmerik, University of Queensland PhD thesis, 2007. Also available as [[http://vanemmerikfamily.com/mike/master.ps.gz][gzipped postscript]]. * [[http://www.cs.wisc.edu/wpis/papers/wysinwyx05.pdf][WYSINXYX: What You See is Not What You Execute]], Gogul Balakrishnan, University of Wisconsin-Maddison PhD thesis, 2007. Uses IDA Pro and custom code to analyse x86 binaries for security problems. * [[http://www.bth.se/fou/cuppsats.nsf/all/5197f1d4eb744970c1256bd700661c4a/$file/pt98der_master_thesis.pdf][Designing an Object-Oriented Decompiler]], D. Eriksson, Blekinge Institute of Technology Masters thesis, 2002. See also the [[http://desquirr.sourceforge.net][Desquirr IDA Pro plugin]]. * [[http://www.cse.dmu.ac.uk/~mward/martin/thesis][Proving Program Refinements and Transformations]], M. Ward, Oxford University PhD thesis, 1989. This is the basis for Ward's future work, which is able to transform assembly language to C on an industrial scale. ---++ Decompilation Papers * "[[http://www.cl.cam.ac.uk/users/am/research/decomp/][Type Based Decompilation]]", [[http://www.cl.cam.ac.uk/users/am/papers/][Alan Mycroft]]. _Proceedings of ESOP'99_, LNCS 1576, Springer-Verlag, 1999. * "Using a Decompiler for Real World Source Recovery", Mike Van Emmerik and Trent Waddington. In _Proceedings of the Working Conference on Reverse Engineering_, IEEE-CS Press, 2004. An extended version is available [[http://vanemmerikfamily.com/mike/experience_long.pdf][here]]. * "An Experimentation Framework for Evaluating Disassembly and Decompilation Tools for C++ and Java", L. Vinciguerra, L. Wills, N. Kejriwal, P. Martino and R. Vinciguerra. In _Proceedings of the Working Conference on Reverse Engineering_, Nov 2003, IEEE CS-Press, pages 14-23. ---++ Decompilation Books There are at present no books specifically on the subject of native executable decompilation. * "[[http://www.wiley.com/WileyCDA/WileyTitle/productCd-0764574817.html][Reversing: Secrets of Reverse Engineering]]" by Eldad Eilam has a chapter on native executable decompilation. Published by Wiley in April 2005. ISBN: 0-7645-7481-7. * [[http://www.oreilly.com/catalog/swarrior/?CMP=LEL-YQ4569013319]["Security Warrior"]] by Cyrus Peikari and Anton Chuvakin (O'Reilly 2004) has chapters on reverse engineering of machine code Windows [[http://www.aspfree.com/c/a/Windows-Security/Windows-Reverse-Engineering/][(online chapter)]], Linux, Windows CE, and more. * "[[http://www.amazon.com/exec/obidos/tg/detail/-/0201786958/ref=pd_sxp_f/104-8844603-9076744?v=glance&s=books][Exploiting Software : How to Break Code]]" by Greg Hoglund and Gary McGraw has a short section on disassembling and decompiling. Unfortunately, the authors confuse these two processes, and make statements like "[[ReverseEngineeringCompiler][REC]] provides 100% C source code recovery for some kinds of binary executables" (not true; it produces C-like output). Addison-Wesley 2004, ISBN 0201786958. * See also [[JavaDecompilers#JavaDecompilerBooks][Java decompilation books]]. ---+++ Online Collaborative Books * The collaborative book "[[http://www.acm.uiuc.edu/sigmil/RevEng/][Introduction to Reverse Engineering Software]]", by Mike Perry and Nasko Oskov, which is looking for contributions and a publisher. * The [[http://en.wikibooks.org][WikiBooks]] book on [[http://en.wikibooks.org/wiki/Reverse_Engineering][Reverse Engineering]]. ---++ Miscellaneous * [[http://hex-rays.com][Hex-rays decompiler plugin]]. IDA Pro has a commercial decompiler plugin now. * [[http://www.hexblog.com][Hexblog]], by Ilfak Guilfanov (author of IDA Pro), has a [[http://www.hexblog.com/decompilation/][decompilation]] category. Other categories, such as the [[http://www.hexblog.com/ida_pro/][IDA Pro]] category, are often of interest. * [[http://quantumg.blogspot.com][QuantumG's blog]] was mostly about decompilation, especially the earlier entries. Some very good information. * [[http://www.tbcnet.com/~clive/vcomwinp.html][Windows Source Project]], maintained by [[http://www.tbcnet.com/~clive/][Clive Turvey]]. * [[http://www.tech-faq.com/debuggers-disassemblers.shtml][List of Debuggers and Disassemblers]] (from http://www.tech-faq.com). Also their "[[http://www.tech-faq.com/decompiler.shtml][What is a Decompiler?]]" page. * [[http://www.thefreecountry.com/programming/disassemblers.shtml][Free Disassemblers, Decompilers, Binary / Hex Editors and Viewers]] (from http://www.thefreecountry.com). * [[ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/news/answers/assembly-language/x86][x86 Assembly Language FAQ]] * The [[Redo Project Archive]]. * You can use the [[http://www.csc.calpoly.edu/~bfriesen/software/console.shtml/#DLLMAN32][dllman32]] Windows Dynamic Link Library Investigator for finding dependencies among DLL's. * The [[http://www.softpanorama.org/index.shtml][Softpanorama]] page on [[http://www.softpanorama.org/Algorithms/decompilation.shtml][Decompilation and Decompilers]]. Softpanorama describes itself as "resources for the independent study in computer science and programming". * The [[Code Breakers Journal]]. * Bob Stout posted a short [[CCompilerHistory][history of PC C compilers]]. * http://www.codesites.com (development related links) * Fravia's page of Reverse engineering has a cracker's viewpoint, including a page on the legality of reverse engineering. The URL keeps changing; just search for it. * [[ProgramObfuscation]] could be considered a defence to decompilation. * DecompilationUrls (ordered alphabetically by URL). * The [[http://groups.yahoo.com/group/staticrecompilers][static recompilers]] Yahoo [[http://groups.yahoo.com][group]] have the goal of statically translating binary code (mostly old arcade games) from one architecture to another. There is a tool called Orion that emits a sort of unrolled interpreter of input machine instructions into C code. It's basically static binary translation, so the output is hard to read, and the original machine's instructions are very visible. Works on code from Z80, 6502, and a few other architectures. * Unconfirmed: John Banning and Hans Pufal's NLZ program, said to be part of Hunter Systems's XDOS suite. It was reportedly able to decompile PC applications and help port them to Unix workstations. Original contact: Hunter Systems, since acquired by Miltiport of Mountain View, CA, USA. * Search [[http://freshmeat.net][freshmeat]] for [[http://freshmeat.net/search/?q=decompiler§ion=projects&x=0&y=0]["decompiler"]] or [[http://freshmeat.net/search/?q=decompile§ion=projects&x=0&y=0]["decompile"]]. * Search [[http://sourceforge.net][SourceForge]] for [[http://sourceforge.net/search/?type_of_search=soft&exact=1&words=decompiler]["decompiler"]] or [[http://sourceforge.net/search/?type_of_search=soft&exact=1&words=decompile]["decompile"]]. * Search [[http://scholar.google.com][Google Scholar]] (in Beta at the time of writing) for [[http://scholar.google.com/scholar?hl=en&q=decompiler]["decompiler"]] or [[http://scholar.google.com/scholar?hl=en&q=decompilation]["decompilation"]]. * Search [[http://citeseer.ist.psu.edu/cs][CiteSeer.IST]] for [[http://citeseer.ist.psu.edu/cis?q=decompiler&submit=Search+Documents&cs=1]["decompiler"]] or [[http://citeseer.ist.psu.edu/cis?q=decompilation&submit=Search+Documents&cs=1]["decompilation"]]. *
([[http://dmoz.org][dmoz.org]], the Open Directory).
----- CategoryDecompilation