Addonda değişiklik yapıldığında kendi kendini silmesi
Az önce forumu gezinirken bir arkadaşımızın sorusu üzerine bu konuyla ilgili bir bilgi vermek istedim. Forumda böyle bir bilgi var mı yok mu hiç bilmiyorum.
Bu olayın bir çok yolu var. Buradaki mantık "dosyanın değişip değişmediğini nasıl anlarız" sorusunun cevabıyla eşdeğer. Dolayısıyla da bu soruya verilebilecek cevap sayısı kadar yöntem mevcuttur. Örneğin dosyadaki harf sayısı, dosyadaki rakam sayısı, dosyanın boyutu, dosyanın satır sayısı gibi değerlerle bu olay gerçekleşebilir. Fakat en basit ve güvenilir yol olarak bilinen $crc identifier'ı ile bunu nasıl yapabileceğimizi anlatacağım.
$crc identifier'ı güncel bir çok kurulum programında kullanılmaktadır. Bunun en yaygın örneği Winamp'tır. Winamp'ın kurulum dosyasına bir virüs bulaştığında CRC hatası ile karşılaşırsınız ve kurulum gerçekleşmez.
CRC dediğimiz şey (Cyclic Redundancy Check - Dönüşsel Artıklık Denetimi) bize dosyanın 0 ile 9 sayıları ile A ile F harfleri arasındaki karakterlerle oluşan 8 basamaklı bir değer verir, ve dosyada en ufak bir değişiklik yapılsa bile bu değer değişir. Fakat satır sayısını, dosyanın boyutunu vs baz aldığımızda bunlarda yapılan herhangi bir değişiklik dosyanın başka bir yerinde yapılan değişiklik ile dengelenip dosyanın bu değişikliği farketmemesi sağlanabilir.
Örneğin boyutu 109byte olan bir addonumuz var. 109 byte 109 tane karaktere denk gelir. Bu addondan bir satır sildik diyelim. Satırda toplam 12 karakter vardı. Dolayısıyla dosya boyutumuz 97'ye indiği için dosya kendini silmeye çalışacaktır. Fakat dosyanın herhangi bir yerine 12 adet ; işareti koyduğunuzda hem 12 karakter eklenmiş olacak ve dosya boyutu eski haline gelecektir, hem de ; karakteri geçersiz karakter olduğu için addon sorunsuz bir şekilde çalışmaya devam edecektir.
Bu kadar genel bilgi yeterli sanırım, şimdi uygulamaya geçelim. Fakat size tavsiyem, bu başlığı iyice okuduğunuzdan emin olup öyle uygulayın.
Addon(lar) dosyasının adının xxx.mrc olduğunu ve bu dosyanın mIRC klasöründe olduğunu varsayalım. Öncelikle mIRC'i açıp;
//echo $crc(xxx.mrc)
komutunu yazıyoruz. Bu komutu yazdıktan sonra karşımıza 8 karakterli ve rakamlarla harflerden oluşmuş bir değer çıkacaktır. Bu değeri bir yere not ediyoruz. Daha sonra xxx.mrc dosyamızı açıyoruz. Dosyamızın herhangi bir yerinde boş bir satır ayarlayıp;
on *:start:{ if $crc(xxx.mrc) != OOO { write -c xxx.mrc } }
OOO kısmına az önce not aldığınız değeri yazıp üssteki kodu ekleyip dosyayı kaydediyoruz. Son olarak da;
/load -rs xxx.mrc
komutuyla addonumuzu tekrar yüklüyoruz. İşte bu kadar.
Tabi bu adımları uyguladıktan sonra farkedeceksiniz ki addonunuz silinmiş. Çünkü siz ilk başlarda yazdığım şeylerin hepsini çoktan unuttunuz bile, hatta bir cümlesini bile hatırlamıyorsunuz, değil mi? Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Dosyaya son eklemeyi yapmadan önce aldığımız $crc değeri ile dosyaya ekleme yaptıktan sonraki $crc değeri farklı olacağı için, son eklediğimiz on start event'ı yüzünden dosyanın $crc değeri değişecek ve dosya kendini silecektir. Bu durumda uygulamanız gereken basamakların sıralaması şu şekilde oluyor:
1- /unload -rs xxx.mrc komutunu uygulayarak dosyanın yüklü olmadığından emin olun.
2- Dosyamıza yukarıdaki örnekte vermiş olduğum on startlı kodu ekleyin, OOO yerine de %crc yazın.
3- //echo $crc(xxx.mrc) komutu ile crc değerini tekrar alın.
4- /set %crc OOO komutunda OOO yerine son aldığınız crc değerini yazarak %crc adında bir değer oluşturun.
5- Hata yapmadığınızdan eminseniz direkt olarak, emin değilseniz dualar eşliğinde /load -rs xxx.mrc komutu ile addon dosyanızı yükleyin.
Anlamayan arkadaşlar sorularını sormadan önce lütfen bir kez daha baştan sona okumayı denesinler. Aslında bu anlatım yerine 2 satırla buradaki bütün işlemleri her dosyaya uygulayabilecek bir addon yazılır ve 2dk bile sürmez, ama sizi hazıra alıştırıp kötülük yapmayı her ne kadar istesem de, bu kadar yazıyı yazdıktan sonra aklıma gelen o addonu yayınlamayıp enayi yerine düşmeyi hiç istemiyorum. Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. |