Sizde benim gibi Excel’de bazı işler için eklenti kullanır mısınız? Geçen yazdığım Excel Sayfa Koruma Şifresi Kırma yazımda verdiğim kodların benzerini kullan bir Excel eklentisi var ancak geliştiricisi kodlarını şifrelemiş ve belirli bir süre sonra kullanılamıyor. Bunun gibi Excel eklentilerini çözmek için Office Malware Scanner adındaki bir program yardımımıza koşuyor.

Office Malware Scanner’ı https://www.reconstructer.org/code.html adresinden indirip bir klasöre açın.

Aynı klasöre içeriğini çözmek istediğiniz .xlam uzantılı dosyayı atın. Eklentinin uzantısını .zip yapıp Winrar veya benzeri bir programla açın.

“xl” isimli klasörün içindeki vbaProject.bin dosyasını dışarı çıkartın.

Komut İstemine geçip officemalscanner.exe vbaproject.bin info komutunu çalıştırın.

Bulunduğunuz klasörün içinde yeni bir klasör oluşacak ve VBA kodları, formlar, makrolar bu klasörün içinde çözülmüş halde gelecek.

vbakirma

Yazdığım ufak bir projede cURL ile çektiğim JSON verisini bir türlü PHP’de json_decode fonksiyonu ile kullanamıyordum. Nedenini araştırıp buldum. Hem kodları kaybetmeyeyim, hemde benzer problem ile karşılaşanlara yardımcı olayım dedim.

UTF-8 ile hayatımıza girmiş olan BOM (Byte Order Mark), dosyanın UTF-8 formatında olduğunu belirtmek için eklenen bir başlıktır. Dosyanın başına eklenen unicode U+FEFF karakteridir. Hex olarak 0xEF,0xBB,0xBF; ascii olarak  karakterlerine karşılık gelir. Bu karakterlerin dosyanın başında bulunması bazı zamanlarda sorunlara yol açar. Örneğin benim durumumda JSON verisi olarak çektiğimi sandığım veride aslında ilk başındaki BOM yüzünden JSON olarak kullanamadım. Görülebilen bir karakter olmadığı için de hemen fark edilmiyor.

Benzer bir durumla karşılaştığınızda aşağıdaki kodla gelen veriyi bin2hex fonksiyonu ile 16lık sisteme dönüştürerek efbbbf karakterlerinin olup olmadığına bakıyoruz. Eğer varsa bunları siliyoruz.

if (0 === strpos(bin2hex($data), 'efbbbf')) {
$data = substr($data, 3);
}

Çoğunlukla Excel belgeleriyle uğraşıyorsanız ve bazı belgeler denklemleri korumak veya sırf kullanıcıyı sinir etmek için sayfa koruması ile korunuyorsa, bu şifreleri kırmanız gerektiği zamanlar olabilir. İşte aşağıdaki vba kodları bu işe yarıyor.

Excel belgesini açıp üstteki Geliştirisi sekmesinden Visual Basic butonuna tıklayarak editörü açın. Sol taraftaki listede dosyanın sayfalarının olduğu liste göreceksiniz. Şifresini kırmak istediğiniz dosyanın adına sağ tıklayın ve Insert menüsünden Module yazanı seçin. Listenin alt kısmına Module1 isminde yeni bir modül açılacaktır. Aşağıdaki kodları kopyalayın ve editörün sol üstündeki küçük Excel logolu butona basarak Excel’e geri dönün. Yine Geliştirici sekmesindeki Makrolar butonuna tıklayın. İki tane makro göreceksiniz. SifreAc yazan makroya çift tıklayın ve biraz bekleyin.

Şifre kırma işlemi bittiğinde tüm sayfaların şifrelerinin olduğu bir pencere göreceksiniz. Ayrıca alt kısımdaki metin alanını kopyalayarak Not Defteri vb. bir programa yedekleyebilirsiniz. Kırma işlemi bittiğinde tüm sayfaların korumaları kaldırımış olur.

Dim sonuc
Sub SifreAc()
sonuc = "Sayfaların Şifreleri"
For sayfaid = 1 To Worksheets.Count
Worksheets.Item(sayfaid).Activate
SifreKir
Next
InputBox sonuc, , sonuc
End Sub
Sub SifreKir()
On Error Resume Next
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
For i = 65 To 66
For j = 65 To 66
For k = 65 To 66
For l = 65 To 66
For m = 65 To 66
For i1 = 65 To 66
For i2 = 65 To 66
For i3 = 65 To 66
For i4 = 65 To 66
For i5 = 65 To 66
For i6 = 65 To 66
For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
sonuc = sonuc & vbCrLf & ActiveSheet.Name & " : " & Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
End Sub