Er is mij gevraagd een aantal Excel 2003 macro's bij te werken, maar de VBA projecten zijn beveiligd met een wachtwoord, en het lijkt erop dat er een gebrek aan documentatie is... niemand kent de wachtwoorden.
Is er een manier om het wachtwoord van een VBA-project te verwijderen of te kraken?
Ja, dat kan, zolang u een .xls
formaat spreadsheet gebruikt (de standaard voor Excel tot 2003). Voor Excel 2007 en later is de standaard .xlsx
, wat een redelijk veilig formaat is, en deze methode zal niet werken.
Zoals Treb zegt, het is een eenvoudige vergelijking. Een methode is om eenvoudig de wachtwoordinvoer in het bestand te verwisselen met behulp van een hex-editor (zie Hex editors voor Windows). Stap voor stap voorbeeld:
Maak een nieuw eenvoudig excel bestand.
Stel in het VBA-gedeelte een eenvoudig wachtwoord in (bijvoorbeeld - 1234).
Sla het bestand op en sluit af. controleer vervolgens de bestandsgrootte - zie Stewbob's gotcha.
Open het bestand dat je zojuist hebt gemaakt met een hex editor.
Kopieer de regels die beginnen met de volgende sleutels:
CMG=....
DPB=...
GC=...
FIRST BACKUP het excel-bestand waarvan je het VBA-wachtwoord niet kent, open het dan met je hex-editor, en plak de hierboven gekopieerde regels uit het dummy-bestand.
Sla het excel bestand op en sluit af.
Open nu het excel bestand waar je de VBA code in wilt zien. Het wachtwoord voor de VBA code zal gewoon 1234 zijn (zoals in het voorbeeld dat ik hier laat zien).
Als u met Excel 2007 of 2010 moet werken, zijn er enkele andere antwoorden hieronder die kunnen helpen, met name deze: 1, 2, 3.
EDIT Feb 2015: voor een andere methode die er veelbelovend uitziet, kijk eens naar dit nieuwe antwoord van Đức Thanh Nguyễn.
Colin Pickard heeft een uitstekend antwoord, maar er is een 'watch out' met dit. Er zijn gevallen (ik heb de oorzaak nog niet gevonden) waar de totale lengte van de "CMG=........GC=...." entry in het bestand verschilt van het ene excel bestand naar het andere. In sommige gevallen is deze invoer 137 bytes, en in andere 143 bytes. De lengte van 137 bytes is de oneven lengte, en als dit gebeurt wanneer u uw bestand maakt met het '1234' wachtwoord, maak dan gewoon een ander bestand, en het zou moeten overspringen op de 143 bytes lengte.
Als u probeert het verkeerde aantal bytes in het bestand te plakken, zult u uw VBA project verliezen wanneer u probeert het bestand met Excel te openen.
EDIT
Dit geldt niet voor Excel 2007/2010-bestanden. Het standaard .xlsx-bestandsformaat is eigenlijk een .zip-bestand met tal van submappen met de opmaak, lay-out, inhoud, enz., opgeslagen als xml-gegevens. Voor een onbeveiligd Excel 2007 bestand, kunt u gewoon de .xlsx extensie veranderen in .zip, dan het zip bestand openen en door alle xml gegevens kijken. Het is heel eenvoudig.
Echter, wanneer u een wachtwoord voor een Excel 2007 bestand instelt, wordt het gehele .zip (.xlsx) bestand versleuteld met RSA encryptie. Het is niet langer mogelijk om de extensie te wijzigen in .zip en door de inhoud van het bestand te bladeren.
De bescherming is een eenvoudige tekstvergelijking in Excel. Laad Excel in je favoriete debugger (Ollydbg is mijn favoriete tool), zoek de code die de vergelijking maakt en zet deze zo dat deze altijd true teruggeeft, dit zou je toegang moeten geven tot de macro's.