//Bu dkümanımla Reverse Engineering hakkında yazdığım dkümanlara son vermiş bulunuyorum. Reverse Engineering hakkında hemen hemen her türlü konudan bahsettim, uygulayarak gsterdim. Genel birçok konuyu konulara ayırarak, detaylardanda yazı aralarında bahsettim. Dkümanlar ncedende sylediğim gibi assembly ve programlama mantığını iyi kavramış kişilere ynelik yazdım. Çünkü sadece assembly yada programlama bilmekle bu iş olmuyor. Reverse Engineering ayrı bir konu. Dkümanlar bu konuyla uğraşan arkadaşlar için klavuz olacak, ileriye taşımak yada daha fazla detaya inmek size bağlı olacaktır. Forumda kaldığım sürece dkümanlarım hakkında yada Reverse Engineering konuları hakkında sorularınız varsa hepsini cevaplamaya çalışacağım. Dkümanlarımı birbiriyle bağlantılı olarak yazdım. O yüzden en eskisinden en yenisine doğru gidiniz. Ayrıca bu konularla ilgili çektiğim videolarada assembly/reverse engineering blümünden ulaşabilirsiniz. Okuyan arkadaşlar yorumlarını eksik etmezlerse sevinirim. Umarım Türkçe Reverse Engineering dküman eksiğini bir lçü azaltabilmiş ve tahribat.com üyelerine bu konuda birşeyler verebilmişimdir. Bu konuda desteğini esirgemeyen arkadaşlara ve tahribat.com dküman arşivine ekleyen reneye teşekkür ederim//Merhaba arkadaşlar bu yazımda self-modifying'den bahsedeceğim. Self-modifying'e programın verilerini şifreleme tekniği diyebiliriz. rneğin yazdığımız programı kısıtlı ve register edince sınırlamalar kalkıyor diyelim. Seri numara doğru girilince "Teşekkür ederiz. Programınız kaydedildi" gibi bir mesaj penceresi çıkarttığımızı varsayalım. Eğer programı korumadıysak 1 dakika içerisinde stringleri taratıp çıkan tabloda bunun yerini bulabilir ve hangi adresteyse oraya gidebiliriz. Yada güvenlik nlemi alınmamış programın assembly kodlarının ortada olması programın kısa sürede analizi ve kırılmasıyla sonuçlanır. Selfy-modifying tekniğinde program kendisi üzerinde değişiklik yapar. Her birleştiği dosyada farklı grünüm alan virüslerde buna rnektir. Self-modifying mantığını açıklarsak;ncelikle elimizde programımızı şifreleyecek harici bir program olduğunu düşünelim. İlk olarak harici program programımızın verileri çeşitli matematiksel işlemlerden geçirerek farklı bir grünüme sokar. Daha dosyaya programın verilerini eski haline getirecek kod eklenir. Son olarakta Entry point kodların eklendiği yerin ilk kodundaki adrese ayarlanır. Burada unutmamamız gereken nemli bir nokta var. Assembly'den bildiğiniz üzere her programın code ve data section'ı var. İşletim sistemi ve platformlara gre bunun dışında birçok section daha var. Fakat bunlar temel olanları. Code section çalıştırılabilir ve okunabilir. Data section ise okunabilir ve yazılabilir. Yani grdüğünüz üzere code section'a yazma izni verilmiyor. Eğer code section'a veri yazılmak istenirse program orada kırılır. Bunun için PE Header'da değişiklik yaparak. Code section'ın characteristics değerine yazılabiliri ekleyeceğiz. Bu şekilde code section'a veri yazabileceğiz. Çalışma mantığına gelirsek. Hatırlarsanız verileri eski haline getirecek kod eklemiş ve entry point'i buraya ayarlamıştık ve code section'ı yazılabilir hale getirmiştik. Programı akışı entry pointten başlayacak ve programa eklenen dngülerle ve işlemi terse çeviren matematiksel işlemlerle programımızın orjinal verileri eski haline getirilecek. Herşey tamamlandığında programımızın OEP zıplanacak ve program akışına devam edilecek. Programımızı korumasının yanında ktü niyetli program yazan kişilerde bu yntemi kullanarak antivirüslerden programlarını gizleyebilmekteler. Fakat günümüzde antivirüsler genel olarak bu tür şeylere karşı duyarlı hale geldiler. Fakat hala işe yaramakta. rneğin programımızın kodlarını eski haline getirip bir yerden sonra yeniden şifreleyebiliriz. Şyle düşünürsek;rnek amacıyla bu şekilde gsterilmiş. Yoksa program akışında byle çizgisel bir ilerleyiş yoktur. Aralarda dallanmaya sebep olacak fonksiyonlar, zıplamalar vs olabilir. Yani 45500de program 60000'e gidip sonra geri dnüşle 50000den devam edebilir.45000 Alttaki verileri çz...46000 Üstte kalan verileri tekrar şifrele, alttakileri çz...48000 Üstte kalan verileri tekrar şifrele, alttakileri çz... Bu şekilde devam ettiğini düşünelim program akışının. nceden geçtiğimiz yerleri tekrar şifreliyor. Sonradan geçeceğimiz yerlerin bir kısmınıda çzüyoruz. Bunları anlattıktan sonra gerçek bir program üzerinde bunu kısaca uygulayalım. GerekenlerOllydbgLordPE rnek program olarakta sadece form'dan oluşan Kod Enjeksiyonu dkümanımda kullandığım programımı kullanıyorum. Tahribat dosya arşivinden buradan indirebilirsiniz. Ayrıca kodların eklendiği rnek programı da buradan indirebilirsiniz. ncelikle kendimize boş alan arıyoruz ve yeterli alanı bulduğumuzda seçerek çift tıklıyoruz. Karşımıza gelen pencereden itibaren ve takiben programı şifrelememize yarayan kod bloğunu yazıyoruz. Programın sadece küçük bir kısmında yapacağız bu işlemi. Yani sadece üstteki resimde gzüken kod bloğunu. MOV ECX,44CA98 //Programı OEP'den itibaren şifrelemeye başlıyoruz. ECX'e OEP değerini veriyoruz. XOR DWORD PTR DS: ,12345 // 12345 ile xorluyoruzINC ECX // ECX'i arttırıyoruzCMP ECX,44CADE // Kod bloğunda resimde grüldüğü üzere son adres 44CADD Son olarak DDli biten adresinde üstünden geçiyor ve 1 artıyor. Bizde 1 üstü olan DE ile karşılaştırıyoruz. JNZ SHORT 0044CAED // ECX 0044CAED olana kadar xorlamaya devam ediyoruz. Olduysa program akışına devam ediyoruz. Aynı işlemi tersine çevirecek kod bloğu. Xorlardığımız birşeyi tekrar aynı değerle xorlarsak karşımıza aynı sonuç çıkar. MOV ECX,44CA98XOR DWORD PTR DS: ,12345INC ECX JNZ SHORT 0044CB01JMP SHORT 0044CA98 // İşlem tamamlandıysa OEP'e zıplıyoruz. Şimdi olayı açıklayalım. Programımıza nce şifreleyecek daha sonrada çzecek kod bloğu yerleştirdik. Resimde gzüken kod bloğunun ilk adresinden son adresine kadar hepsini xorlayacağımız için bir dngü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 dnüyoruz. İşlem tamamlandığında anlamsız veriler greceğ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 dnü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 XORluyoruz1 0 1 0 1 0 0 10 0 1 1 0 0 1 1 1 0 0 1 1 0 1 0AND Çıkan değeri tekrar ANDliyoruz1 0 1 0 0 0 1 00 0 1 1 0 0 1 1 0 0 1 0 0 0 1 0Grdüğünüz üzere AND ile ilk değeri geriye getiremedik. Olayın işleme mantığı bitlere gre olduğu için. Bitleri gstererek 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. Ve yaptığımız değişikleri kaydediyoruz. Herşeyi doğru yaptıysak programımız sorunsuzca çalışıyor. Şimdi programın işleyişiyle ilgili birkaç ekran grüntüsüne gzatalım. Ollydbg self-modifying olan programlarda olay karıştığı için yanlış gsterebiliyor. O yüzden kod ekranında sağ tıklayıp analysis->remove analysis seçerseniz daha düzgün bir şekilde takip edebilirsiniz. Eğer remove analysis çıkmıyorsa analiz edilmemiştir. O şekilde devam ediniz. En son OEP'e zıpladığınızda eski kodları aynen greceksiniz. Bu konu hakkında anlatacaklarım bu kadar. Yazı, rnek program ve ekran grüntüleri tamamen FireX'e aittir. Kopyalayanlar emeğe saygı duyarlarsa sevinirim. Saygılarımla..-anonimleştirildi-

teşekkür etmekten yorulduk bee! =))) eywallah hacı, ben işlerimi bi toparlasam şunlara baştan bida bakıcamda =/ " ' "

: şimdi o 45500 den 60000 e atlıo ya neyse boşver :)))) Evet hoca onbinlerce satır asm kodu var. Dikey dalışa geçiyor :)

ellerine sağlık hocam. yine çok süper bişi. nerde lam bu adamın bilgi-destek madalyası : )

: açıklıyoruz firex aslında sırf dküman yazmak için yapılmış bir holy botudur. Sizinde fark ettiğiniz gibi hiç bir insan bu akdar dkümanı veremez. Bir kaç eleman toplaşıp dkümanlar buluyoruz firex adında ekliyoruz oh be rahatladım. Açıklamasaydın keşke sırrımızı?

Bilgi Destek tamam bi de MSYS madalyası monte edin arkada$a :D

artık alıstım ooooooo ne çok bilgililer var demiyorum BU KESİN FİREX diyorum saol firex kardesim... Buralar bizden sorulur... Ravage@tahribat.com

hacı deadın dedigi gibi firex programın olam crakle beni:D olum yeter hepsini bi ekitap haline getirip tek seferde yayınlasan daha süper olcak ANDY // Entelkoylu. Com Burası mezopotamya, küresel oyunun bumerang cehennemi. Tanrı bile dünya düzeni için peygamberlerini hep buraya gndermiş. Çünkü burası aslında yeryüzü cennetiymiş. Daha Fazla Bilgi İçin Profilimi İnceleyiniz...

açıklıyoruz firex aslında sırf dküman yazmak için yapılmış bir holy botudur. Sizinde fark ettiğiniz gibi hiç bir insan bu akdar dkümanı veremez. Bir kaç eleman toplaşıp dkümanlar buluyoruz firex adında ekliyoruz oh be rahatladım.

abi şükür bitirdim dkümanları bunları okumak için bize 1-2 ay wer sonra yenilerine başlarsın:D Her türlü piping işleriniz itina ile yapılır.

Banada msnden excalibur haber verdi :) Gerçekten çok sevindim teşekkür ederim. Bu konuda destekleyen tüm arkadaşlara teşekkürler.

şimdi o 45500 den 60000 e atlıo ya neyse boşver :)))) Bu niymiş la?

sağol dai uğraşmışsın eline sağlık biraz anlasam bunları toplayıp arşivleyecem ama hiç bişi bilmiom |sadece aptalların başarısı ders notu ile lçülür|

Bizi dküman manyağı yaptığın için saol fireX :)

bi firex basyapıtı daha... tskler.

Ben karar verdim bu adamın bi yerlerinde motor var eheuheuheuHoja şaka bi yana valla takdire şayan şeyler yapıyorsun sağol okuyacağım... Acıma Yetime Dner Koyar G...