Sayfalar

6 Aralık 2008

aMSN'de Unutulan MSN şifrelerini kurtarma

Bugün açık kaynak programcılığa bir kez daha hayran oldum; Msn şifremi unutmuştum. Genellikle önemsemediğim hesap şifrelerini programlarda kayıtlı tutarım. Bu yüzden aklımda kalmazlar. Ama bu kez eposta kutuma bir onaylama mektubu gittiği için açmak zorunda kaldım. Tabii ki şifreyi hatırlayamadım. Bunun için aMSN forumuna baktım ama benim gibi şifresini unutan herkes ilk oraya başvurmuş. Başta şifre sorunlarında yardımcı olan programcı, sonunda bu durumdan usanıp kullanıcılara iyi niyet dileklerini bildirmiş. :)

Şimdi yaptığım işe gelelim:

aMSN'de kullanıcı ayarları ve parolası ~/.amsn/msn_hesabı/config.xml dosyasında şifrelenmiş olarak yer alır. Parola ise encpassword etiketinin altında yer alıyor. Kaynak kodlarını indirip incelediğimde config.xml dosyasının config.tcl betiği tarafından oluşturulduğunu öğrendim. Parola aşagıdaki kodlarla şifreleniyor:


#Save encripted password
if { ([::config::getKey save_password]) && ($password != "")} {
set key [string range "${loginback}dummykey" 0 7]
binary scan [::des::encrypt $key "${password}\n"] h* encpass
puts $file_id " <entry>\n <attribute>encpassword</attribute>\n <value>$encpass</value>\n </entry>"
}

Burada amsn_des.tcl içindeki ::des::encrypt kullanılarak parolamız şifreleniyor. İlk olarak şifre çözmeyi buradan denedim. Ama benim için vakit kaybıydı. Daha sonra yine config.tcl'nin içinde yer alan aşağıdaki kodu farkettim. Yukarıdaki kodda parola şifrelenip config.xml içinde saklandığı gibi, aşağıdaki kodda da config.xml'nin içinden okunarak şifresi çözülüyor ve değer döndürüyor.

#Get the encrypted password
if {[::config::getKey encpassword]!=""} {
set key [string range "[::config::getKey login]dummykey" 0 7]
set password [::config::getKey encpassword]
catch {set encpass [binary format h* [::config::getKey encpassword]]}
catch {set password [::des::decrypt $key $encpass]}
#puts "Password length is: [string first "\n" $password]\n"
set password [string range $password 0 [expr { [string first "\n" $password] -1 }]]
#puts "Password is: $password\nHi\n"
::config::unsetKey encpassword
}
Bu kodda #puts "Password is: $password\nHi\n" satırı dikkatinizi çekmiştir. Bu satır aslında şifreyi ekrana yansıtmak için hazırlanmış olmalı. Daha sonra iptal edilmiş. Bu satırı düzenleyerek şifremi bir dosyanın içine yazdırdım. Bunun için söz konusu satırın altına aşağıdaki satırları ekledim ve kaydettim.

set outfile [open "/home/hasan/istebu.txt" w]
puts $outfile "Password is: $password"
close $outfile

aMSN'yi çalıştırıp, msn hesabımı açtığımda parolam ~/istebu.txt dosyasına yerleşti. :)

Örnek

~$ locate amsn/config.tcl
/usr/share/amsn/config.tcl
~$ sudo cp /usr/share/amsn/config.tcl /usr/share/amsn/YEDEK_config.tcl
~$ sudo nano -w /usr/share/amsn/config.tcl
~$ echo $HOME
/home/hasan

#puts "Password is: $password\nHi\n" satırını bulup altına:

  set outfile [open "/home/hasan/istebu.txt" w]
puts $outfile "Password is: $password"
close $outfile

satırlarını ekleyip kaydedin. Şimdi aMSN'yi açın, kayıtlı msn hesabınıza girer girmez ev dizininde istebu.txt oluşacaktır. Şifreniz onun içinde.