Помолиха ме да актуализирам някои макроси на Excel 2003, но проектите VBA са защитени с парола и изглежда, че липсва документация... никой не знае паролите.
Има ли начин да се премахне или разбие паролата на VBA проект?
Да, има, стига да използвате електронна таблица във формат .xls
(по подразбиране за Excel до 2003 г.). За Excel от 2007 г. нататък по подразбиране е .xlsx
, който е доста защитен формат и този метод няма да работи.
Както казва Треб, това е просто сравнение. Един от методите е просто да смените записа на паролата във файла с помощта на шестобатен редактор (вижте Шестобатен редактор за Windows). Пример стъпка по стъпка:
Създайте нов прост файл на Excel.
Във VBA частта задайте проста парола (например 1234).
Запазете файла и излезте. След това проверете размера на файла - вижте Stewbob's gotcha
Отворете току-що създадения файл с шестнадесетичен редактор.
Копирайте редовете, започващи със следните ключове:
CMG=....
DPB=...
GC=...
ПЪРВО Бекъпнете файла на Excel, за който не знаете паролата на VBA, след това го отворете с шестобалния си редактор и поставете копираните по-горе редове от фиктивния файл.
Запишете файла excel и излезте.
Сега отворете excel файла, в който трябва да видите VBA кода. Паролата за кода VBA ще бъде просто 1234 (както в примера, който показвам тук).
Ако ви се налага да работите с Excel 2007 или 2010, по-долу има някои други отговори, които могат да ви помогнат, особено тези: 1, 2, 3.
ЕДИТ февруари 2015 г.: за друг метод, който изглежда много обещаващ, погледнете този нов отговор от Đức Thanh Nguyễn.
Колин Пикард има отличен отговор, но има един 'внимавайте' с това. Има случаи (все още не съм разбрал причината), в които общата дължина на "CMG=........GC=...." записа във файла е различна в различните екселски файлове. В някои случаи този запис е 137 байта, а в други - 143 байта. Дължината от 137 байта е нечетната и ако това се случи, когато създавате файла си с паролата '1234', просто създайте друг файл и той трябва да премине към дължината от 143 байта.
Ако се опитате да вмъкнете грешния брой байтове във файла, ще загубите проекта си VBA, когато се опитате да отворите файла с Excel.
ЕДИТ
Това не е валидно за файлове на Excel 2007/2010. Стандартният формат на файла .xlsx всъщност представлява .zip файл, съдържащ множество подпапки с форматиране, оформление, съдържание и т.н., съхранени като xml данни. За незащитен файл на Excel 2007 можете просто да промените разширението .xlsx на .zip, след което да отворите zip файла и да прегледате всички xml данни. Това е много просто.
Когато обаче защитите с парола файл на Excel 2007, целият .zip (.xlsx) файл всъщност се криптира с помощта на RSA криптиране. Вече не е възможно да се промени разширението на .zip и да се прегледа съдържанието на файла.
Защитата е просто текстово сравнение в Excel. Заредете Excel в любимата си програма за отстраняване на грешки (Ollydbg е моят избор), намерете кода, който прави сравнението, и го поправете така, че винаги да връща true, което ще ви позволи да получите достъп до макросите.