Original page: http://www.backerstreet.com/rec/rec.htm
REC Studio je interaktivní dekompilátor.
Čte spustitelný soubor Windows, Linux, Mac OS X nebo raw a pokouší se vytvořit reprezentaci kódu a dat používaných k vytvoření spustitelného souboru ve stylu C.
Byl navržen pro čtení souborů vytvořených pro mnoho různých cílů a byl zkompilován na několika hostitelských systémech.
REC Studio 4 je kompletní přepis původního dekompilátoru REC. Využívá výkonnější analytické techniky, jako je částečné Single Static Assignment (SSA), umožňuje načítání souborů Mac OS X a podporuje 32 a 64 bitové binární soubory.
Přestože je stále ve vývoji, dosáhlo fáze, díky které je užitečnější než staré Rec Studio 2.
Stránky Rec Studio 2 jsou zde.
Funkce
Jak již bylo zmíněno, Rec Studio 4 je stále ve vývoji. Většina funkcí nezávislých na cíli byla dokončena, jako například:
- Multihost: Rec Studio běží na Windows XP/Vista/7, Ubuntu Linux, Mac OS X.
- Podpora symbolických informací pomocí Dwarf 2 a částečné rozpoznání formátu PDB společnosti Microsoft.
- C++ je částečně rozpoznáno: pozměněná jména generovaná gcc jsou demanglována, stejně jako je respektována dědičnost popsaná v dwarf2. C++ je však velmi široký a obtížný jazyk, takže některé funkce, jako jsou šablony, pravděpodobně nebudou nikdy podporovány.
- Typy a definice prototypů funkcí lze specifikovat v textových souborech. Některá standardní rozhraní Posix a Windows API jsou již k dispozici v balíčku Rec Studio.
- Je podporována interaktivita omezená na definici sekcí, štítků a vstupních bodů funkcí. Bude potřeba jej vylepšit, aby podporoval definici typů a parametrů funkcí v programu.
Tato tabulka ukazuje funkce specifické pro cíl, které byly dosud implementovány:
Vlastnosti | x86 (ia32) | x86_64 | Mips | PowerPC | mc68k | ARM |
Rozebíratel | Hotovo | Hotovo | Hotovo | Hotovo | Hotovo | Plánová |
PE COFF nakladač | Hotovo | Hotovo | n/a | n/a | n/a | n/a |
ELF nakladač | Hotovo | Hotovo | Hotovo | Hotovo | Hotovo | Plánová |
COFF nakladač | Hotovo | n/a | n/a | n/a | Hotovo | n/a |
Mac OS X nakladač | Hotovo | Hotovo | n/a | Plánová | n/a | Plánová |
Dwarf2 symbolické informace | Hotovo | Hotovo | Hotovo | Hotovo | n/a | Plánová |
COFF symbolické informace | Plánová | n/a | n/a | n/a | Plánová | n/a |
Volací konvence | Probíhá | Probíhá | Probíhá | Plánová | Plánová | Plánová |
32 a 64 bitů | Probíhá | Probíhá | n/a | n/a | n/a | n/a |
Plovoucí bod | Plánová | Plánová | n/a | n/a | n/a | n/a |
Windows ladicí program | Probíhá | Plánová | n/a | n/a | n/a | n/a |
Gdb ladicí program | Probíhá | Probíhá | n/a | n/a | n/a | n/a |
Zdroje REC nejsou ve veřejné doméně.
Ačkoli REC dokáže číst spustitelné soubory Win32 (aka PE) vytvořené Visual C++ nebo Visual Basic 5, existují omezení produkovaného výstupu. REC se pokusí použít jakékoli informace obsažené v tabulce symbolů .EXE. Pokud byl soubor .EXE zkompilován bez ladicích informací, pokud byl použit formát databázového souboru programu (.PDB) nebo Codeview (C7), nebo pokud byla povolena možnost optimalizace kompilátoru, nebude vytvořený výstup příliš dobrý. Spustitelné soubory Visual Basic 5 jsou navíc kombinací kódu podprogramu a dat formuláře. Pro REC je téměř nemožné určit, která je která. Jedinou možností je použít soubor .cmd a ručně určit, která oblast je kód a která oblast je data.
V praxi pouze spustitelné soubory C produkují smysluplný dekompilovaný výstup.
Reference
Několik dalších dekompilátorů je dostupných z různých zdrojů. Seznam najdete na mé stránce reverzního inženýrství.
Spíše překvapivě je vnitřní architektura dekompilátoru velmi podobná architektuře kompilátoru. Pro oba existuje kvalitní literatura. Stránka Poznámky k návrhu obsahuje informace o problémech, se kterými se autor dekompilátoru potýká, když se pokouší dekompilovat o něco složitější programy, než jsou jednoduché testy jednotek. Dekompilace stránka obsahuje odkazy a dokumentaci vztahující se k dekompilátory obecně.
Disertační práce Mika van Emmerika významně pokročila v oblasti dekompilace tím, že nastínila řešení základních problémů při dekompilaci binárních programů.
Disertační práce Cristiny Cifuentes Reverzní kompilační techniky podrobně popisuje teorii a implementaci dekompilátoru dcc pro 8086 DOSových programů.
Stránka Wotsit obsahuje odkazy na specifikace formátů objektových souborů jako COFF a ELF.
Některé koncepty související s analýzou kódu jsou popsány na stránkách referenčního ladicího programu.
Další základní knihy, které jsem během vývoje použil, jsou:
- „Překladače – principy, techniky a nástroje“, Aho, Sethi, Ullman, 1986 Addison-Wesley Publishing Co. ISBN 0-201-10088-6.
- „Pokročilý design a implementace kompilátoru“, Steven Muchnick, 1997 Morgan Kaufmann Publishers, ISBN 1-55860-320-4.
- „Jak fungují debuggery – Algoritmy, datové struktury a architektura“, Jonathan Rosemberg, 1996 John Wiley and Sons, ISBN 0-471-14966-7.
Demontáž používané v REC byly převzaty z různých zdrojů. Soubor copyrite v distribuci má seznam kreditů pro každý z disassemblerů používaných v REC. Zbytek kódu jsem napsal sám během posledních 25 let. Ve svém volném čase budu nadále vylepšovat REC, ale nemohu zaručit, že mohu opravit chyby nebo přidat nové funkce, procesory nebo hostitele.
Zřeknutí se odpovědnosti
O zákonnosti dekompilace se hodně diskutuje. Nástroje dekompilátoru jsou k dispozici pro různé platformy již dlouhou dobu. Dekompilátory spolu s dalšími nástroji, jako jsou debuggery, binární editory, disassemblery atd., by se měly používat pouze v případě, že vlastník programu má zákonné právo provádět zpětnou analýzu programu.
Soudy USA a dalších zemí stanovily, že je legální používat dekompilátory podle ustanovení o spravedlivém použití autorského zákona.
Chcete-li zjistit, kdy je legální používat dekompilátor, měli byste si přečíst text následujících případů:
- Sega Enterprises LTD proti Accolade, Inc.
- Atari Games Corp. proti Nintendo of America, Inc.
Také přečíst diskusi o zákonnosti pomocí emulátoru spustit binární program na jiného hostitele.
Backer Street Software nepodporuje použití nástrojů zpětného inženýrství pro nezákonné účely.
Copyright © 1997 – 2015 Backer Street Software – All rights reserved.
Dějiny:
9. března 2011 | Verze 4.0 Beta: Kompletní přepsání dekompilátoru pro podporu modernějších architektur (soubory MachO, x86_64). |
2. července 2007 | Verze 2.2: Opravená dekompilace nezpracovaných binárních souborů prostřednictvím souborů .cmd. Částečně implementované šíření registrových konstant. Opraveno mnoho 68k chyb. |
6. května 2007 | Verze 2.1: Přidána zpět možnost +dávka do RecStudia; použijte Ndisasm pro i386; lepší izolace importovaných dat pro binární soubory Windows |
20. září 2005 | Verze 2.0d: Další opravy chyb za 68k |
6. září 2005 | Verze 2.0c: Podpora pro soubory Linux .o a vylepšená podpora pro 68k |
15. srpna 2005 | Verze 2.0b: Vydání údržby. Podpora pro binárky kompilované Watcom a široké řetězce |
1. srpna 2005 | Verze 2.0a: Vydání údržby. Opravené pády, vylepšená kvalita se spustitelnými soubory Windows |
30. května 2005 | Verze 2.0: Windows GUI a interaktivní dekompilace |
19. září 2000 | Verze 1.6: Přidána podpora pro SPARC. |
16. března 1999 | Verze 1.5d: Obnovená detekce switch(). Přidána podpora pro big-endian MIPS. |
6. března 1999 | Verze 1.5: Podpora pro import/export informací v souborech Win95; nahradil GNU disassemblery freewarovým zdrojem; opraveno mnoho pádů |
22. listopadu 1998 | Verze 1.4a: Opravena nekonečná smyčka při dekompilaci souborů Win95; přidány prototypové soubory Windows |
15. listopadu 1998 | Verze 1.4: Přidána možnost prohlížeče v interaktivním režimu a generování stránky HTML |
30. července 1998
|
Verze 1.3b: Údržba: opraveny pády a různé problémy v 68k. |
15. února 1998 | Verze 1.3: Přidány cíle Motorola 68000 a PowerPC. |
7. prosince 1997 | Verze 1.2: opraveno uživatelské rozhraní PC. Nyní můžeme načíst 16bitové spustitelné soubory DOSu. Další opravy chyb. |
26. října 1997 | Verze 1.1: podpora více cílů (386 + R3000), načítání souborů ELF a PE, opraveno několik chyb. |
6. října 1997 | Portováno na Windows v režimu konzoly (recr4kpc.zip) a na SunOS (recr4ks4.tar.gz) |
20. září 1997 | Vytvořeno pro zpřístupnění recr4kl.zip. |