Excel'de dosyaları şifrelemenin, koruma altına almanın birkaç yolu var. Bu makalemizde şifreli excel dosyalarının, bilmediğimiz şifreyi açma, şifre kırma işlemlerinden bahsedeceğiz.
Bu yazı aslında sevgili Mark'ın Excel Off The Grid sitesindeki bir sayfanın sadece bir kısmı. Kendisi başvuru kaynağı olabilecek efsane bir Excel sayfası işletiyor. Bu yazının orijinal haline https://exceloffthegrid.com/removing-cracking-excel-passwords-with-vba/ bağlantısından ulaşabilirsiniz. Bu yazı, sevgili Mark'ın müsaadesi ile sayfasından alıntılar ve çevirileri ile hazırlanmıştır.
Thank you Mark for the great content and the consent to share!
Yazımıza dönelim.
tl:dr; türlü türlü şifreler var. bazılarını açabiliriz, çözümler en sonda.
Excel şifreleme işini birkaç türde ele alıyor:
- Dosya açılış şifresi - dosyayı açma yetkisi. Dosyanın açılmasını engeller. Şifre girilmeden dosya açılamaz. (kötü haber, bunu kırmak zor).
- Dosya düzenleme şifresi - açılış şifresine benzer mantıkla çalışan dosya düzenleme "edit" şifresi. Dosyanın açılmasına izin verir ancak herhangi bir değişiklik yapılmasına izin vermez. Şifre girilirse, düzenleme yapılabilir. (yöntemi var).
- Sayfa koruma şifresi - Çalışma sayfaları için şifre "Worksheet". Hücreleri değiştirmeyi engeller. (yöntemi var).
- Kitap koruma şifresi - sayfa koruma şifresine benzer mantıkta çalışan, Çalışma kitabı için şifre "Workbook". Sayfa oluşturmayı yada sayfanın ismini değiştirmeyi engeller. (yöntemi var).
- VBA nesne şifreleri - VBA düzenlemesi yapılmasını engeller. (yöntemi var).
Excel'in şifrelere bakış açısı şu şekildedir:
- Şifreleme "Encryption": 2007 sürümü sonrasında Excel'in koruma düzeyi önemli ölçüde arttı. 128 bit veya 256 bit şifreleme kullanılıyor.
- XML Dosya kodu: 2007 sonrasında Excel .xlsx uzantısını kullanmaya başladı. Bilinmesi gereken nokta şu ki dosya, tüm içerik ve şifreleme işlemleri XML kodunun bir parçası. Metin düzenleyici ile XML kodu düzenleyebilen herkes dosyayı ve şifresini değiştirebilir, açabilir veya herhangi bir şekilde müdahale edebilir demektir (Yani herkes!).
- VBA Proje Kütüphanesi - VBA projeleri Excel dosya formatı yapısı içerisinde binary dosya olarak saklanır. Şifreler veya şifrelerin şifrelenmiş "encrypted" halleri de bu içeriğe dahildir.
Şimdi sıra ile Encryption, XML ve VBA şifrelerini nasıl açabileceğimize gelelim:
Encryption
Bu şifrelerini kırmanın kolay bir yöntemi yok. Kaba kuvvet ile, yani her kombinasyonu deneyerek bu tür şifreleri kırmak günler, haftalar hatta aylar sürebilir. Şifre ne kadar karmaşık ise kırmak da o kadar zahmetli olur.
Bu tür şifreleri kırabildiğini iddia eden ücretli üçüncü parti çözümler var denemek isteyenler için.
XML Şifreleri
Excel, şifreleri XML dosyası içerisinde doğrudan saklamaz. Bir algoritma ile şifreler dönüştürülür ve dosya içinde bu saklanır. Aynı algoritmaya girip, aynı dönüşmüş sonucu veren bir şifre girildiğinde koruma yani şifre kaldırılmış ve dosya açılmış olur.
Dosya Düzenleme Şifresi
Dosya eğer yukarıda iki (2) numarada bahsi geçen Dosya Düzenleme Şifresi (Modify File Password) ile korundu ise, dosyayı farklı bir isimle kaydederek bu korumayı kolayca kaldırabilirsiniz.
Sayfa ve Kitap Koruma Şifreleri (Manuel Yöntem)
Xlsx dosyalarından bahsedilmişti. Bir göz atalım.
Öncelikle bilgisayarınızda dosya uzantılarını görebildiğinden emin olun. Nasıl mı?
- Görev çubuğundaki arama kutusuna dosya gezgini yazın ve arama sonuçlarından Dosya Gezgini'ni seçin.
- Görünüm'ün altındaki Dosya Gezgini'nde yer alan Göster/gizle grubundan Dosya adı uzantıları onay kutusunu seçin.
Dosya uzantısını artık göründüğüne göre, şifresini kırmak istediğiniz dosyanın uzantısını .zip olarak değiştirin.
Zip dosyasını açın ve \xl\workbooks.xml dosyasını açın. Aşağıda işaretlenen kısımlar Dosya Düzenleme ve Çalışma Kitabı şifrelerinin kodlandığı yeri göstermektedir.
\xl\worksheets\sheet1.xml dosyasında ise, aşağıda işaretlenen yer şifrenin konumunu göstermektedir.
Bu kodlarda düzenleme yaparak şifreyi kaldırıp, dosya uzantısını tekrar .xlsx olarak düzeltip herşeyi yoluna koyabiliriz.
Ya da macro kullanabiliriz:
Yeni bir Excel çalışma kitabı açın, aşağıdaki kodu Visual Basic Editor içindeki standart modül içine yapıştırın ve çalıştırın.
Sub RemoveProtection()
Dim dialogBox As FileDialog
Dim sourceFullName As String
Dim sourceFilePath As String
Dim sourceFileName As String
Dim sourceFileType As String
Dim newFileName As Variant
Dim tempFileName As String
Dim zipFilePath As Variant
Dim oApp As Object
Dim FSO As Object
Dim xmlSheetFile As String
Dim xmlFile As Integer
Dim xmlFileContent As String
Dim xmlStartProtectionCode As Double
Dim xmlEndProtectionCode As Double
Dim xmlProtectionString As String
'Open dialog box to select a file
Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)
dialogBox.AllowMultiSelect = False
dialogBox.Title = "Select file to remove protection from"
If dialogBox.Show = -1 Then
sourceFullName = dialogBox.SelectedItems(1)
Else
Exit Sub
End If
'Get folder path, file type and file name from the sourceFullName
sourceFilePath = Left(sourceFullName, InStrRev(sourceFullName, "\"))
sourceFileType = Mid(sourceFullName, InStrRev(sourceFullName, ".") + 1)
sourceFileName = Mid(sourceFullName, Len(sourceFilePath) + 1)
sourceFileName = Left(sourceFileName, InStrRev(sourceFileName, ".") - 1)
'Use the date and time to create a unique file name
tempFileName = "Temp" & Format(Now, " dd-mmm-yy h-mm-ss")
'Copy and rename original file to a zip file with a unique name
newFileName = sourceFilePath & tempFileName & ".zip"
On Error Resume Next
FileCopy sourceFullName, newFileName
If Err.Number <> 0 Then
MsgBox "Unable to copy " & sourceFullName & vbNewLine _
& "Check the file is closed and try again"
Exit Sub
End If
On Error GoTo 0
'Create folder to unzip to
zipFilePath = sourceFilePath & tempFileName & "\"
MkDir zipFilePath
'Extract the files into the newly created folder
Set oApp = CreateObject("Shell.Application")
oApp.Namespace(zipFilePath).CopyHere oApp.Namespace(newFileName).items
'loop through each file in the \xl\worksheets folder of the unzipped file
xmlSheetFile = Dir(zipFilePath & "\xl\worksheets\*.xml*")
Do While xmlSheetFile <> ""
'Read text of the file to a variable
xmlFile = FreeFile
Open zipFilePath & "xl\worksheets\" & xmlSheetFile For Input As xmlFile
xmlFileContent = Input(LOF(xmlFile), xmlFile)
Close xmlFile
'Manipulate the text in the file
xmlStartProtectionCode = 0
xmlStartProtectionCode = InStr(1, xmlFileContent, "<sheetProtection")
If xmlStartProtectionCode > 0 Then
xmlEndProtectionCode = InStr(xmlStartProtectionCode, _
xmlFileContent, "/>") + 2 '"/>" is 2 characters long
xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _
xmlEndProtectionCode - xmlStartProtectionCode)
xmlFileContent = Replace(xmlFileContent, xmlProtectionString, "")
End If
'Output the text of the variable to the file
xmlFile = FreeFile
Open zipFilePath & "xl\worksheets\" & xmlSheetFile For Output As xmlFile
Print #xmlFile, xmlFileContent
Close xmlFile
'Loop to next xmlFile in directory
xmlSheetFile = Dir
Loop
'Read text of the xl\workbook.xml file to a variable
xmlFile = FreeFile
Open zipFilePath & "xl\workbook.xml" For Input As xmlFile
xmlFileContent = Input(LOF(xmlFile), xmlFile)
Close xmlFile
'Manipulate the text in the file to remove the workbook protection
xmlStartProtectionCode = 0
xmlStartProtectionCode = InStr(1, xmlFileContent, "<workbookProtection")
If xmlStartProtectionCode > 0 Then
xmlEndProtectionCode = InStr(xmlStartProtectionCode, _
xmlFileContent, "/>") + 2 ''"/>" is 2 characters long
xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _
xmlEndProtectionCode - xmlStartProtectionCode)
xmlFileContent = Replace(xmlFileContent, xmlProtectionString, "")
End If
'Manipulate the text in the file to remove the modify password
xmlStartProtectionCode = 0
xmlStartProtectionCode = InStr(1, xmlFileContent, "<fileSharing")
If xmlStartProtectionCode > 0 Then
xmlEndProtectionCode = InStr(xmlStartProtectionCode, xmlFileContent, _
"/>") + 2 ''"/>" is 2 characters long
xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _
xmlEndProtectionCode - xmlStartProtectionCode)
xmlFileContent = Replace(xmlFileContent, xmlProtectionString, "")
End If
'Output the text of the variable to the file
xmlFile = FreeFile
Open zipFilePath & "xl\workbook.xml" & xmlSheetFile For Output As xmlFile
Print #xmlFile, xmlFileContent
Close xmlFile
'Create empty Zip File
Open sourceFilePath & tempFileName & ".zip" For Output As #1
Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
Close #1
'Move files into the zip file
oApp.Namespace(sourceFilePath & tempFileName & ".zip").CopyHere _
oApp.Namespace(zipFilePath).items
'Keep script waiting until Compressing is done
On Error Resume Next
Do Until oApp.Namespace(sourceFilePath & tempFileName & ".zip").items.Count = _
oApp.Namespace(zipFilePath).items.Count
Application.Wait (Now + TimeValue("0:00:01"))
Loop
On Error GoTo 0
'Delete the files & folders created during the sub
Set FSO = CreateObject("scripting.filesystemobject")
FSO.deletefolder sourceFilePath & tempFileName
'Rename the final file back to an xlsx file
Name sourceFilePath & tempFileName & ".zip" As sourceFilePath & sourceFileName _
& "_" & Format(Now, "dd-mmm-yy h-mm-ss") & "." & sourceFileType
'Show message box
MsgBox "The workbook and worksheet protection passwords have been removed.", _
vbInformation + vbOKOnly, Title:="Password protection"
End Sub
Yukarıdaki kodu çalıştırın. Şifresi kırılacak dosyayı seçin ve OK diyin. Yeni bir dosya düzenleme, sayfa ve kitap şifreleri kaldırılmış şekilde oluşturulacaktır.
VBA Proje Şifreleri
Visual Basic Editor'ü kandırarak, doğru şifrenin girildiğine inandıran çok güzel bir macro var. Bağlantıdan erişebilirsiniz. https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project bu yöntem ile, standard excel vba şifre özelliği ile şifrelenen dosyalar açılabilir. Üçüncü parti yazılım ile şifrelenen vba projeleri açılamayabilir.
Umarım faydalı bulursunuz.