Byl jsem požádán o aktualizaci některých maker Excelu 2003, ale projekty VBA jsou chráněny heslem a zdá se, že k nim chybí dokumentace... nikdo nezná hesla.
Existuje způsob, jak odstranit nebo prolomit heslo u projektu VBA?
Ano, pokud používáte tabulku ve formátu .xls
(výchozí formát aplikace Excel do roku 2003). Pro Excel 2007 a novější je výchozí formát .xlsx
, což je poměrně bezpečný formát, a tato metoda nebude fungovat.
Jak říká Treb, je to jednoduché porovnání. Jednou z metod je jednoduše vyměnit položku hesla v souboru pomocí hexadecimálního editoru (viz Hexadecimální editory pro Windows). Příklad krok za krokem:
Vytvořte nový jednoduchý soubor Excel.
V části VBA nastavte jednoduché heslo (například 1234).
Uložte soubor a ukončete jej. Poté zkontrolujte velikost souboru - viz Stewbob's gotcha.
Otevřete právě vytvořený soubor pomocí hexadecimálního editoru.
Zkopírujte řádky začínající následujícími klíči:
CMG=....
DPB=...
GC=...
PŘEDEM ZÁLOHUJTE soubor Excel, pro který neznáte heslo VBA, poté jej otevřete v hexadecimálním editoru a vložte výše uvedené zkopírované řádky z fiktivního souboru.
Uložte soubor excel a ukončete jej.
Nyní otevřete soubor excelu, ve kterém potřebujete vidět kód VBA. Heslo pro kód VBA bude jednoduše 1234 (jako v příkladu, který zde uvádím).
Pokud potřebujete pracovat s Excelem 2007 nebo 2010, níže jsou uvedeny další odpovědi, které by vám mohly pomoci, zejména tyto: 1, 2, 3.
EDIT únor 2015: Další metodu, která vypadá velmi slibně, najdete v této nové odpovědi od Đức Thanh Nguyễn.
Colin Pickard má vynikající odpověď, ale je tu jeden 'pozor' s tím. Existují případy (zatím jsem nepřišel na příčinu), kdy se celková délka "CMG=........GC=...." záznamu v souboru liší od jednoho excelového souboru k druhému. V některých případech bude mít tato položka 137 bajtů a v jiných 143 bajtů. Délka 137 bajtů je lichá, a pokud se tak stane při vytváření souboru s heslem '1234', stačí vytvořit jiný soubor a měl by přejít na délku 143 bajtů.
Pokud se pokusíte do souboru vložit nesprávný počet bajtů, při pokusu o otevření souboru v aplikaci Excel přijdete o svůj projekt VBA.
EDIT
Toto neplatí pro soubory aplikace Excel 2007/2010. Standardní formát souboru .xlsx je ve skutečnosti soubor .zip obsahující četné podsložky s formátováním, rozvržením, obsahem atd. uloženými jako data xml. U nechráněného souboru aplikace Excel 2007 stačí změnit příponu .xlsx na .zip, pak otevřít soubor zip a prohlédnout si všechna data xml. Je to velmi jednoduché.
Když však soubor aplikace Excel 2007 chráníte heslem, celý soubor .zip (.xlsx) je ve skutečnosti zašifrován pomocí šifrování RSA. Není již možné změnit příponu na .zip a procházet obsah souboru.
Ochrana spočívá v jednoduchém porovnání textu v aplikaci Excel. Načtěte Excel ve svém oblíbeném ladicím programu (Ollydbg je můj oblíbený nástroj), najděte kód, který provádí porovnání, a opravte jej tak, aby vždy vracel true, což by vám mělo umožnit přístup k makrům.