Assembly String İşlemleri

Pentester

Özel Üye
8 Eyl 2016
1,646
996
Merhabalar, bu konumuzda Assembly programlama dilinde string işlemlerini inceleyeceğiz. Hemen bir şeyler yazalım ve üzerine konuşalım.

aqqwf.png


Burada db yani 1 byte=8bitlik değer tutan p ve e karakterlerini tuttum. Source code kısmı bize bunu söylüyor. Üst tarafa bakalım 1000 ve 1001 offset değerlerimizde p ve e karakterlerini görüyoruz. 70 hex değeri olarak, 112 signed olarak p karakterini işaret ediyor. 1.offseti de bu şekilde siz yorumlayın.
Bunları variables yani değişken tablomuzdan da inceleyebiliriz.


aqXL6.png


P ve e yani 2 element, hex karşılıkları sırayla gördüğünüz gibi.

aqOSF.png


ASCII olarak da görebiliyoruz. Buradan aktarabileceğim string tanımlaması yaparken byte, Word, double Word tiplerinde tanımlayabiliriz.

String işlemlerinde hedef veya kaynak kaydedicisi olarak AX registerı kullanılırken bellek adresini SI ve DI kaydedicileri tutar. Bir yazının bir yerden kopyalanması olayını düşünürsek kaynak olarak DS, hedef olarak ES kullanılır. Aşağıdaki örneği inceleyelim.


aqiHn.png


İlk satırda data segmenti adresini alıyorum. Sonraki iki satırda bu adresleri ds ve es segmentlerine aktarıyorum.

a5CRU.png


Şimdi satır satır incelediğimiz data segmentinin adresinin ax registerına aktarıldığını görüyoruz bunun da 712 adresine sahip olduğunu görmekteyiz.

a55db.png


Single step dediğim zaman 712 değeri ax içerisine kopyalandı gördüğünüz gibi. Sağ tarafta mov komutu işlendi, sol tarafta 712 değeri ax içerisine düştü. Şimdi ise 2.satırı işleyeceğiz ve DS segmentimize bakacağız.

a5uE3.png


DS segmentime AX içerisindeki 712 değeri kopyalandı şimdi 1 adım daha ilerleyelim.

a5p0r.png


Son adımda ES segmentime de ilgili değer aktarıldı yani burada AX’in bellek adresi DS ve ES segmentlerine kopyalandı. Bu şekilde temel olarak bir işleyişe göz atmış olduk. Stringlerimizden devam edelim.

a5Jda.png


Şimdi bu kodlarımızı inceleyelim. Lea komutu ile isim değişkeni içindeki offset değeri si segmentine, isim2 içindeki offset ise di segmentine atanıyor. İsim2 değeri 4.offsetten başlayacaktır. Yani isim2’nin offset değeri olan 4 di segmentine atanacaktır.

Burada en üst kısma gelirsek define byte tipinde yani 1 byte değerinde pent karakterleri isim değişkeninde tutuluyor. Burada isim2 değişkeni için ise 5 byte yer ayrılıyor.


Şimdi bu kodlarımızı işletelim.

a5oyX.png


Tek tek pent karakterleri isim2 değişkeni içerisine aktarıldı.

aEE8R.png


Şimdi bu kod satırlarımızda ise lodsb ile isim değişkeni içindeki ilk offset olan p harfi ax registerı içine aktarılacak. Stosb bu p harfini alacak ve isim2’nin içine yerleştirecek.

aEcGM.png


Yani program işlevini bitirdiği zaman isim2 içine p harfi atanacaktır.

aEG76.png


Buradaki örneğimizde ise cmpsb komutunu inceleyeceğiz.

Bu program işlendiği zaman bizim bayraklarımızdan zero flag 1 değerini alacaktır.


aEehF.png


Şimdi bu nedir? Bizim burada iki adet aynı değerleri taşıyan değişkenlerimiz var. İlgili offsetler alınıyor lea komutu ile ve en sonda ise cmpsb devreye giriyor. Yani bu komutumuz 2 değerin eşit olup olmadığını kontrol ediyor karşılaştırma yapıyor ve olumlu ise zero flag 1 yanıyor. Bizim iki değerimizin de offseti e harfini taşıyor haliyle eşit olduklarından karşılaştırma sonucunda değerlerin aynı olduğunu görüyoruz.

aEaYc.png


Burada ise p karakteri ax içine aktarılıyor cx registerı ise isim değerimizin veri sayısını tutuyor. scasb ise p harfini isim değişkenimiz içinde arıyor ve bulursa zero flag 1 değerini alıyor. Aksi halde zero flag 0 değerinde kalacaktır.

Bu konumuzda string işlemleri üzerine biraz örnek yaptık. Okuduğunu için teşekkür ederim. Diğer konularımıza Assembly bölümünden bakabilirsiniz.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.