Hero Image
- Abdullah Gulabi

Şifreli Excel Dosyaları Açma, Excel Şifre Kırma

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:

  1. 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).
  2. 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).
  3. Sayfa koruma şifresi - Çalışma sayfaları için şifre "Worksheet".  Hücreleri değiştirmeyi engeller. (yöntemi var).
  4. 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).
  5. 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ı?

  1. Görev çubuğundaki arama kutusuna dosya gezgini yazın ve arama sonuçlarından Dosya Gezgini'ni seçin.
  2. 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.

xlsx-to-zip-file-ext

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.

Workbook-xml-code

\xl\worksheets\sheet1.xml dosyasında ise, aşağıda işaretlenen yer şifrenin konumunu göstermektedir.

Worksheet-xml-code

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.