Reverse Engineering - Self Modifying

Şimdi olayı açıklayalım.Programımıza önce şifreleyecek daha sonrada çözecek kod bloğu yerleştirdik.Resimde gözüken kod bloğunun ilk adresinden son adresine kadar hepsini xorlayacağımız için bir döngüye ihtiyacımız var.ECX’e ilk adresin değerini veriyoruz ve o registerdaki değeri,yani içerisindeki adresi pointerla işaret ediyoruz. İşaret ettiğimiz adresteki verileri bizim belirlediğimiz herhangi bir değerde olabilir bu 12345 ile xorluyoruz.ECX’i 1 arttırıyoruz.Son adrese geldikmi diye kontrol ediyoruz.Gelmediysek xorladığımız yere geri dönüyoruz.

İşlem tamamlandığında anlamsız veriler göreceğiz.Yani şifrelendi.F8 ile adım adım izlerseniz anlık olarak olayı takip edebilirsiniz.

Daha sonra şifreyi çözeceğimiz yere geçiyoruz yine aynı mantıkla karşılaşıyoruz.Aynı değerle tekrar xorluyoruz ve değerler eski haline dönüyor.Son adrese ulaşmamızı kontrol ediyoruz.Geldiysek zaten program deşifre olmuş oluyor ve OEP’e zıplıyoruz.

Şimdi xor’dan bahsedelim. Xor kullanmamızın sebebi bir veriyi xorladıktan sonra çıkan veriyi tekrar xorlarsak eski veriyi elde edebiliyoruz.Örneğin abc 123 ile xorlanınca BF9 değeri ortaya çıkıyor. BF9 ile 123’ü xorlarsak tekrar abc değerini elde ederiz.Bunun yerine and kullandığımızı düşünelim ve sonuçlara bakalım.Aynı zamanda xor’u açıklayalım.

XOR                               Çıkan değeri tekrar XORluyoruz

1 0 1 0                          1 0 0 1
0 0 1 1                          0 0 1 1
-------                             --------
1 0 0 1                          1 0 1 0


AND                             Çıkan değeri tekrar ANDliyoruz

1 0 1 0                         0 0 1 0
0 0 1 1                         0 0 1 1
-------                            --------
0 0 1 0                         0 0 1 0

Gördüğünüz üzere AND ile ilk değeri geriye getiremedik.Olayın işleme mantığı bitlere göre olduğu için.Bitleri göstererek anlattım.Matematiksel mantıksal kapılar..

Verilerimizi şifrelerken başka geri getirme garantisi olan başka matematiksel işlemlerden de faydalanabilirdik.Fakat işlem çok uzamasın diye genel olarak kullanılan xordan bahsettim.

Şimdi LordPE ile programın entry pointini(şifreleme için yazdığımız ilk kod - 0004CAE8) değiştirelim ve code section’ı yazılabilir hale getirelim.

Tarih:
Hit: 4435
Yazar: anonim6918524

Taglar: reverse engineering - self modifying


Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.