#2-SSDT Hooking

SSDT(System Service Descriptor Table)Hook

Serinin 1.Partında user tarafındaydık bugün kernele iniyoruz.Driver geliştirme ve rootkitler hakkında bilgilerimiz burada devreye giriyor.

System Service Descriptor Table

Sistem çağrılarının bulunduğu tablodur.4 tane SST(System Service Table) içerir.
Mesela NtOpenProcess API’si çağrıldığında işlenecek fonksiyon bu tablolara bakılarak
bulunur.SSDT Hook edilmesi ise NtOpenProcess API‘si çağrıldığından gerçek fonksiyonu değil tanımladığımız fonksiyonun çağrılmasıdır.Kendi fonksiyonumuzu tanımlamak için aynı prototipte bir fonksiyon adresi ile yer değiştirilmesi gerekir.”NtoskrnlWindows_NT_Operation_Kernel‘ in kısaltılmışıdır.Kernel Image olarak bilinir.Proses ve bellek yönetimi gibi çeşitli hizmetlerden sorumludur.

SSDT Hook sadece Rootkit’ler tarafından değil Anti-Virus üreticileri tarafından sistemin işleyişini kontrol etmek için kullanılır.

Hooking’den önce ve sonrası

Adsız

Adsız

 

SSDT yapısı aşağıdaki gibi tanımlanıyor.
Adsız

SSDT Hooking’e başlamadan önce bir durum daha var.Tablonun bulunduğu alan yazmaya karşı korulmalıdır.Nasıl kaldırılacağını araştırdıktan sonra bir kaç yöntem gördüm.

CR0 yazmacının WP bitini değiştirmek
MDL(Memory Descriptor List) kullanmak
CR0 yani Control Register 0 işlemcinin çalışmasını düzenleyebilen flaglere sahiptir.WP(WriteProtect) 0 set edildiğinde işlemci read-only alanların yazılmasına izin vermez.WP bitini bozduğumuzda bu korumayı atlatmış oluruz.

Adsız

SSDT Hook’da amacımız tabloda bulunan bir fonksiyonun adresini alıp, aynı prototipde bir fonksiyon yaratıp o adrese yerleştirmek.

Adsız

SSDT yapısını tanımladıktan sonra servis numaralarını almak için GetServiceNumber‘ı tanımladık.
Orjinal adreslerin yerine koyacağımız fonksiyonları tanımladık..Hedeflediğimiz
proses(calc.exe) ismini almak için ZwQueryInformationProcess fonksiyonundan
yararlanıyoruz.
NTTerminateProcess ve NtLoadDriver fonksiyonlarının orjinal adreslerini depolamak için değişkenler tanımladık.

Adsız

NtTerminateProcess orjinal fonksiyonun yerine koyacağımız aynı prototipte bir fonksiyon yaratıyoruz.Amacımız prosesler içinde calc.exe’yi bulup görev yöneticisinde işlemi sonlandırmaya çalışırken bunun engellemesi.Bu oluşturduğumuz fonksiyonu
NtTerminateProcess’in orjinal adresine yerleştireceğiz.
HookNtLoadDriver fonksiyonunda ise sürücümüzü DebugView’de görüntülemek için
oluşturduk.

Adsız

Yukarıda main bölümünde(DriverEntry)Orjinal fonksiyonların adreslerini almak için ilk önce servis numaralarını alıyoruz.Sonra wp bitini bozuyoruz yani read-only moddan çıkartıyoruz.Aldığımız servis numaraları sayesinde fonksiyonların adreslerini alıyoruz ve bunu dizide saklıyoruz.Bu orjinal adresleri değişkenlere aktarıyoruz.Orjinal adreslerin tutulduğu SSDTAddress dizisine sırayla yarattığımız aynı prototipteki fonksiyonları yerleştiriyoruz ve tekrar wp bitini read-only konumuna getiriyoruz.
Kaynak kodumuzu yazdığımıza göre test etmeye geldi sıra.
Visual Studio 2015 üzerinde geliştirdim ve test edeceğim Windows sürümü olarak
Windows7’yi seçtim.

AdsızAdsız

Yazdığımız hook çalıştı.Kernel’de fonksiyonların tutulduğu tablodan, hedeflediğimiz fonksiyonu alıp yerine istediğimiz işlemleri yapacak bir fonksiyon oluşturup yerleştirdik ve kernel seviyesinde bir müdahale ettik.

Kaynak kodu github adresimde paylaştım.

https://github.com/ahmtglrr/SSDTHook

#1-Hooking

Api Hooking

Yazıya başlamadan önce belirli bir seviyede C ve C++ bildiğinizi düşünerek ve user
mode , kernel mode , virtual address hakkında önden bilgi vererek başlayacağım.
Aşağıdaki tabloda bazı kancalama tiplerinin nereye ait olduğu veriliyor.

Adsız

Adsız

User Mode & Kernel Mode

Windows’da iki tür vardır.User mode ve kernel mode.Uygulamalar user mode’da , OS
bileşenleri ise kernel mode’da çalışır.
Bazı driver’lar kernel bazıları ise user mode’da çalışır.
User mode bir uygulama başlattığınızda windows bir proses yaratır.Bu proses bir sanal adres boşluğuna(virtual address space) ve handle tablosuna sahiptir.Ve bunlar özeldir.
Yani private.Çünkü diğer uygulamalar bu prosesin sanal adresine ulaşıp verilerine bir zarar veremesin diye private olarak tanımlanmıştır.Bu sayede uygulama başka bir uygulamaya ait verileri değiştiremez.
Ve bir uygulama crash olduğunda , o prosesin sanal adresi ve handle tablosu ile sınırlıdır yani diğer uygulamalar ve işletim sistemleri etkilenmez.
User mode uygulaması işletim sistemi için ayrılmış olan sanal adreslere ulaşamaz.
Kernel mode’da çalışan kodlar sadece tek bir sanal adres uzayını paylaşırlar.Kernel mode sürücüsü(driver) kendisini diğer sürücülerden ve işletim sisteminden izole edemez. Eğer kernel mode sürücüsü yanlış bir adrese yazılır ise diğer sürücüler ve işletim sistemi verileri tehlikeye girer. Kernel mode driver’ı crash olursa işletim sistemi’de çökebilir.

Sanal Adres Uzayı(Virtual Address Space)

Adsız

Bir proses hafıza yerine(memory location) okunduğunda veya yazıldığında sanal adres kullanır.Okuma veya yazma anında proses sanal adresi fiziksel adrese çevirir.
Birbirinden farklı işlemlerde kullanılan sanal adresler birbirinden izole edilmiştir.Bir işlem başka bir proses veya os tarafından kullanılan fiziksel belleği değiştiremez.

User Space & System Space

notepad.exe gibi uygulamalar user mode ‘ da çalışır ve private bir sanal adrese sahiptir veadreslerin bulunduğu boşluk user space olarak adlandırılır.Kernel mode’da çalışan tüm kodlar tek bir sanal adrestedir ve system space olarak adlandırılır.32 bit bir Windows’da totalde 2^32 yani 4 GB’lik bir sanal adres vardır.Genelde lower(düşük) olan 2 GB’lik bölümü user space , upper(yüksek) olan 2GB’lik bölümü ise system spacekullanır.

Adsız

Api Hook & Injection

İki tür hook vardır. Local ve Global Hook.
Local Hook = Spesifik bir uygulamaya uygulanan hook tipidir.
Global Hook = Sistemde ki bütün prosesleri etkileyen bir hook tipidir.
Burada yapacağımız işlem local hook.Bir prosesi hedefleyip sistemden çalışan proseslerin bilgisini alıp hedeflediğimi prosesi gizlemek.Bunun için NTQuerySystemInformation fonksiyonundan yararlanarak system_process_information yapısı ile proses bilgisi çekeceğiz.

Adsız

Ntdll içinden NtQuerySystemInformation adresini bulup yerine hook fonksiyonumuzu
yerleştireceğiz.

Adsız

Aşağıdaki kod parçasında ise ilk prosesden başlayıp tüm prosesleri dolaşıyor.İmageName çalışan prosesin yürütülebilir dosyasını gösteriyordu.wcsncmp fonksiyonu ise dizeleri karşılaştırmak için kullanılıyor.Bu döngüde atlatmak istediğimiz prosesin .exe ismini giriyoruz.Eğer prosesi bulamaz ise döngü sonlanıyor.
Kaynak kodu github’da paylaşıcam.

Adsız

Projeyi build etmeden önce hedef yolumuzu ve uzantısını belirtiyoruz.

Adsız

Oluşturduğumuz dll’i enjekte etmek için manuel inject aracı buldum ve onu kullandım.

Adsız

Hedefimiz tasklist’de notepad’i gizlemekti.ManuelInject aracını yönetici olarak çalıştırdıktan sonra görev yöneticisinde notepad’in gizlediğini gördük.

Hookinge başlamadan önce dll geliştirme driver geliştirme gibi konuları ele alırsanız sonrasında daha kolay bir başlangıç olacaktır.

Kaynak kod:
https://github.com/ahmtglrr/ApiHook

Gh0st Rat Analysis

gh0st icon

MD5 : 05D8C65417E946FEE515EE5B69066F4D

SHA1 : 04C42103419066E8C2BA2118CAC2029EE478FED5

Language : Chinese

Original File Name : 360Safe.exe

Packers : VMProtect

Entry Point : 0x422124

Gh0st.Exe

Virtual Size                     Virtual Address                   Raw Size

.pepsi                   00021000                            00001000                              000103CA

.text                      00003000                            00022000                               0000175C

.vmp                    00000E2A                           00025000                                00001000

.reloc                   00000210                           00026000                                 00000400

.rsrc                     00001000                           00027000                                 00000800

Ntuser.dll

MD5 : f1c3dbc49985eab22e89d3dc86452ea5
SHA1 : 7933383d1edf9c56fc82fdadacf335cc59562a49

virustotal

Description:

Gh0st is Remote Access Trojan.Gh0St is Chinese made.The malware packed vmprotect but true payload not packed.Have two stages.First gh0st.exe run and droping the payload.Gh0st need to admin rights for to work properly.

Anti-Analysis:

Malware is packed with VMProtect.And all functions visible.

Other Techniques ;

ClearEventLog : Clear Windows Event Logs.cleareventlog

LookUpPrivilegeValueA : Checking to malware on the debugger.

debugchec

Network:

Mozilla/4.0 (compatible)

61.128.171[.]115 : 8080 –> Control And Command

Send Data

send

Host-Computer:

360svc – Services name
C:\Documents and Settings\Local User\ntuser.dll – Payload Service
reg-Registry add services
logofsys
Creating log file — windows\system32\LogOfSystem.key

Keylog:

Webcam:

web

Other:

regedit

Enable Admin Remote:

remoteaccess

GetStartupInfo:

getstart

Malware Purpose:

Gh0st rat after execute dropped the ntuser.dll in “c:\documentsettings\localuser”.Later ,add to regedit HKLM service(360svc) and with runnig commandline “svchost -k netsvcs”.

Ntuser.dll true payload and not packed but gh0st.exe using .vmprotect.

Communication with the control and command center is being established with TCP Socket and using to WS32.Library.

#1-Basit Anti-Debug Fonksiyonları

Zararlı yazılımlar da sıkça kullanılan anti-debug teknikleri içeren bir seri yazmak istiyordum.

Basit seviyeden başlayıp seviye seviye gitmeyi düşünüyorum.İlk olarak bazı basit ama etkili WinApi fonksiyonları ile seriye başladım.

IsDebuggerPresent Fonksiyonu

Peb (Process Enviroment Block) Nedir ?

PEB şuan ki süreçle ilgili verileri alan , değerleri altında tutan bir yapıdır.Her Processin kendi PEB’si vardır ve kullanıcı processin PEB’sine ulaşailir.Aşağıdaki kod parçacığında PEB içinde Isdebugged alanı kontrol ediliyor.

code

Programı Ollydbg ile çalıştırdığımızda aşağıdaki görüntüyü elde ediyoruz.

12

FindWindow Fonksiyonu

findwindowcode

ollydbg

Yukarıda Ollydbg penceresinin ismine dikkat edin çünkü oradaki yazan başlık kod tarafında pencerenin isminin yazılması gereken yere aynen yazılması gerekiyor çünkü FindWindow fonksiyonu pencere başlığını dikkate alır.


Serinin 2.Bölümünde muhtemelen thread local storage ve PE başlıklarını bozma ile ilgili olabilir.

Bir sonraki yazılarımızda görüşmek üzere…

Photo.scr.exe Zararlı Analizi

MD5: ABA2D86ED17F587EB6D57E6C75F64F05

Kullandığı kütüphaneler;

import directory.PNG

Daha sonra senaryo hakkında ipucu için stringlere göz atmaya başladım;string

Temp dosyasına bir  uygulama bırakıyor “NsCpuCNMiner32.exe” .Daha sonra register da kendisini başlangıca ekliyor.

npc.PNG

ms.PNG

Bunların yanında çok sayıda site adresleri gözüme çarptı bunun için wireshark ile ağ trafiğini izlemeye karar verdim.

si.PNG

Bu web sitelerine http request olduğunu gördüm bir yandan ise aynı anda çok fazla sayıda ftp bağlantıları mevcuttu fakat hepsi başarısızdı.

ftp2

Daha sonra “NsCpuCNMiner32.exe” uygulamasını immunity debugger ile açmaya çalıştm fakat  anti-debug hatta anti-vm önlemi alınmış olduğunu gördüm.antidbg

Hangi yöntem ile önlem alındığını görmek için IDA ile çalıştırdım ve orada gördüğüm şey şu idi;

tls

Burada bir hata ayıklama işlemi olur ise TLS fonksiyonlarının ilk önce çalışıp ve hata ayıklama işlemi olmadan programı sonlandırdığını fark ettim.

TLS Nedir (Thread Local Storage – İşlemcik Yerel Deposu) ?

Windows işletim sisteminde her işlemciğin kendisine özgü veri saklayabilmesini mümkün kılan bir mekanizmadır.TLS sayesinde her işlemciğin kendisine özgü veri saklayabileceği bir alan oluşturabilir, daha sonra bir indeks ile diğer işlemcikler tarafından bu veriye ulaşabiliriz.

Fakat bu özet geçilecek bir konu olmadığı için başka bir başlıkda geniş geniş bu konuya değineceğim fakat şimdilik şuna da bakabilirsiniz.

Windows TLS Fonksiyonları

Bulgulardan ve coin madenciliği hakkında araştrmalarımdan yola çıkarak  bu zararlının bulaştığı bilgisayar da coin madenciliği yaptığını genel tabir olarak bir “CPU Miner” olduğu gözüküyor.CPU kullanımını tavana çıkartarak coin üretmeye çalışıyor.Ve tahmin ediyorum ki bunlar aşağıdaki  web sitelerinin havuzlarında toplanıyor ;

txt

 

Bu tür bir zararlıyı ilk defa analiz ediyorum ve devamı gelecek.Günümüzde bu tür zararlılar artık son kullancılarda sık görünmeye başladı ve bundan habersiz binlerce kullanıcı var.

Olumlu olumsuz yorumlarınızı bekliyorum.

Kali Linux İle Metasploit Kullanımı

Kali Linux Vmware Kurulumu

Kali linux’ u iso dosyası şeklinde indirdikten sonra, Wmware workstationu çalıştırın ve sol üst köşede File>Create New Virtual Machine seçeneğine tıklayın. Karşınıza gelen seçeneklerden İnstaller disc image file (iso) seçenegini seçin ve iso dosyasının olduğu dizini gösterin.

Sonra next tuşuna basıp vereceğimiz isim ve dosya yolu adımına geçiyoruz.

HDD boyutunu ayarlamak için next’e tıklıyoruz.

Description: C:\Users\Kayzersoze\Desktop\desktopp\cezeri\foto\metasploit-mix-3.png

Sonraki adımda customize hardware seçeneğine tıklayıp ram, işlemci bv. gibi ayarları düzeltebiliyoruz ve yapılan ayarlarla ilgili bilgi alıyoruz.

Finish’e tıklayıp kuruluma geçiyoruz ve kuruluma graphichal install diyerek devam ediyoruz.

Dilimizi türkçe seçiyoruz.

Klavyemizi yapılandırıyoruz.

Makina adımızı veriyoruz.

Alan adımız.

Root parolamızı belirliyoruz.

Disk bölümleme.

Değişiklikleri kayıt ediyoruz.

Ve sistem kuruluma başlıyor.

Metasploitable Kurulumu

Metasploitable2 adlı içinde açıklar bulunduran sanal linux makinamızı aşağıdaki adresi kulanarak indiriyoruz;
https://www.vulnhub.com/entry/metasploitable- 2,29/

Vmware Kurulumu

Description: C:\Users\Kayzersoze\Desktop\desktopp\cezeri\foto\metasploit-mix-16.png

Description: C:\Users\Kayzersoze\Desktop\desktopp\cezeri\foto\metasploit-mix-17.png

Sanal bilgisayarımızı çalıştırdıktan sonra kullanıcı adımızı ve parolamızı msfadmin olarak giriyoruz.

Kali Linux Static IP Ataması

Terminal’e nano /etc/network/interfaces yazıp network ayarlarına giriyoruz.

2.Durum;

ve /etc/init.d/networking restart diyerek network işlemlerinin değişmesi için yeniden başlatıyoruz.

Metasploitable’de Static IP Ataması

Terminal’e sudo nano /etc/network/interfaces yazıyoruz.

2.Durum;

ve sonra terminal’e sudo /etc/init.d/networking restart diyoruz.

Bind Shell Nedir?

Saldırgan hedef sunucu üzerinde seçtiği portu dinlemeye alır ve bağlantı talebi gönderir.
Saldırgan;

Netcat ile hedef 10.250.10.250 ıp adresinin 4444 portuna bağlantı talebi gönderiyoruz ve hedef portunu dinlemeye aldığı için bağlantı sağlanıyor.
Kurban;

Görüldüğü üzere netcat -lvp parametresi ile kurban 4444 portunu dinlemeye alıyor ve /bin/sh kabuğu tarafından gelen talepler fişleniyor.

-l Parametresi : Belirtilen portu dinlemek için kullanılır.

-v Parametresi : Daha detaylı bağlatı kurmak için ve taleplerin loglarını görmek için kullanılır.

-p Parametresi : Port belirtmek için kullanılır.

Reverse Shell

Saldırgan portu dinlerken bağlantıyı ise kurban gönderir.
Saldırgan;

Burada saldırgan netcat ile 4444 numaralı portu dinlemeye alıyor.
Kurban;

Kurban 10.250.10.250 IP adresinin 4444 portu ile bağlantı sağlamış olacaktır ve bu bağlantıya bin/sh kabuğuda dahil edilmiş ve gelen talepler kayıt altına alınacaktır.
Saldırgan;

Distccd Exploit-Reverse Perl Port-3632

İlk olarak terminali açıp msfconsole yazıyoruz ve metasploit programını açıyoruz.

Unreal_ircd(Backdoor)-Bind Perl (Port-6667)

İlk olarak terminali açıp msfconsole yazıyoruz ve metasploit programını açıyoruz.

PE Dosya Formatı

Portable Executable File Format Nedir?

PE Windows’ un çalıştırılabilir dosya formatıdır.

Portable executable “.acm, .ax, .cpl, .drv, .efi, .mui, .ocx, .scr, .sys, .tsp” yanı sıra en

bilinen uzantılar olarak .dll ve .exe uzantılarınıda barındırır.

Neden PE dosya formatını öğrenmeliyiz ?

Zararlı Yazılım analizi ve tersine mühendislik ile ilgilenen insanların kesinlikle

hakkında bilgi sahibi olması gerektiği bir konudur.Çünkü içinde kritik bilgiler

bulundurur.

Mesela hangi makina türüne yüklenebileceği, programın entry point adresi ,

programın oluşturulduğu tarih vb. Bilgiler barındırır.

Yapısı aşağıdaki gibidir

Relative Virtual Address

Dosyanın hafızaya yüklendikten sonraki başlangıç adresi ile aradığımız elemanın oraya olan

uzaklığını vermektedir.

Virtual Address

Dosya hafızaya yüklendiğinde elimizde olan elemanın adresine verilen isimdir.

IMAGE BASE

Dosya hafızaya yer edindikten sonra nereden başladığını gösterir.Sanal adres dolu ise yer

değiştirme(relocation) işlemi yapılır.

EXE dosyalarının ImageBase kısmı genelde 0x400000 olmaktadır.

VA = ImageBase + RVA => Bu size aradığınız elemanın gerçek adresini verir.

IMAGE FILE HEADER

WORD Machine; //Programın çalışması beklenen CPU

WORD NumberOfSections; //Section sayısı

DWORD TimeDateStamp; //Dosyanın üretildiği zaman

DWORD PointerToSymbolTable; //COFF sembol tablosuna gösterici

DWORD NumberOfSymbols; //Sembol tablosundaki sembol sayısı

WORD SizeOfOptionalHeader; //sizeof(IMAGE_OPTIONAL_HEADER)

WORD Characteristics; //Dosya hakkında bilgi

Machine

• 0x014c -> Intel 386 (IMAGE_FILE_MACHINE_I386)

• 0x0200 -> Intel 64 (IMAGE_FILE_MACHINE_IA64)

• 0x01c0 -> ARM Little-Endian (IMAGE_FILE_MACHINE_ARM)

Characteristics

0x0001 = relocation bilgisi eklenmemiştir.

• 0x0002 = Dosya çalıştırılabilir bir dosyadır.

• 0x0100 = Dosyanın çalıştırılacağı makina 32 bit işlemcili bir makinadır.

• 0x2000 = Dosya bir dll dosyasıdır.

Şimdi zurnanın zır dediği yerdeyiz.IMAGE OPTIONAL HEADER herkesin dediği

gibi başlığına aldanmayın kritik bilgiler saklıdır.Stack boyutu, programın entry pointi, işletim

sisteminin versiyonu gibi.

IMAGE OPTIONAL HEADER

Standart alanlar

WORD Magic;

BYTE MajorLinkerVersion;

BYTE MinorLinkerVersion;

DWORD SizeOfCode;

DWORD SizeOfInitializedData;

DWORD SizeOfUninitializedData;

DWORD AddressOfEntryPoint;

DWORD BaseOfCode;

DWORD BaseOfData;

MajorLinkerVersion & MinorLinkerVersion

Programın bağlayıcısının majör ve minör versiyon bilgileri.

SizeOfCode

Muhtemelen .text bölümünün boyutunu verir yani kod olan bölümlerin toplam boyutunu

verir.

SizeOfInitializedData & SizeOfUninitializedData

static s1=5; => Bu size of intilialized data dır yani ilk değer atanmış değişkenlerdir.

(.data bölümünde olurlar)

static s1; => Bu ise SizeOfUninitializedData dır yani değer atanmamış değişkenler.

(.bss içinde bulunurlar)

AddressOfEntryPoint

Programın başlangıç noktasının RVA’sını verir.

BaseOfCode

Çalıştırılabilir makine kodlarını içeren .text bölümünün başlangıç RVA’sını verir.

BaseOfData

Statik verilerin tutulduğu .data bölümünün başlangıç RVAsı.

SizeOfImage

Dosyanın hafızaya yüklendiğinde ne kadar alan kaplayacağını gösterir.

MajorOperatingSystemVersion & MinorOperatingSystemVersion

PE dosyasının minimum işletim sistemi versiyon bilgisini içerir. Xp’de yeni program

kurmaya çalışırken desteklemiyor dediği dalga dümen işte bu.

Bölüm İsmi Bölüm Tanımı

.text/CODE Çalıştırılabilir makine kodları

.data Global ve statik veriler(INIT. Değer tanımlanmış)

.bss Global ve statik veriler(UNINIT değer tanımlanmamış.)

.rsrc Kaynaklar(Resource)

.idata Import edilen fonksiyon bilgileri

.edata Export edilen fonksiyon bilgileri

.reloc Relocation bilgisi

.tls Thread Local Storage

.rdata Debug bilgisi

PORTABLE EXECUTABLE FILE IMPORT

Yazdığımız veya kullandığımız programlar biliyorsunuzki içlerinde dll’ler mevcut.Bunları

kullanabilmemiz için pe içerisine yer edinmesi gerekiyor.Yoksa fonksiyonları vb.

Kullanamayız.

DWORD Name : Dll ‘in ismi.

DWORD TimeDateStamp : Dosya build tarihi bulunuyor.

Bu konuda bildiklerimi özetlemeye çalıştım hatalı bir bilgi var ise uyarılarınızı bekliyorum , blog tadında yazmaya çalıştım , diğer yazılarımda görüşmek üzere.

x86 Assembly

Registers
General Purpose Registers                     Segment Registers                       Pointer Registers
              EAX                                                      CS                                                  EIP
              EBX                                                      DS                                                  EBP
              ECX                                                      SS                                                   ESP
              EDX                                                      ES
                                                                             FS
                                                                             GS
Index Registers
          ESI 
          EDI
 
Popular Instructions
 
Data Storage                               Logic                             Control-Flow
       mov                                           or                                      cmp
       lea                                             and                                    jmp
                                                          xor                                     jcc
Arithmetic                                          Stack
     add                                                    push
     sub                                                     pop
     inc                                                      call
     div                                                      ret
     dec
     mull 
 
 
mov eax,ebx –> Move the value in ebx to eax
mov eax,0x42–> Move 0x42 to eax
mov eax,[0x40497c]–>Move what is in address 0x40497c to eax
 
mov eax,[ebx]–>Move what is address in ebx to eax
mov eax,[ebx+esi+2]–>Move what is in address [ebx+esi+2] to eax
—————————————————————————————————–
mov eax, [ebx+8]–> move ebx+8 (0x20) to eax
 
lea eax, [ebx+8]–> move  ebx+8 address (0xD84097) to eax
 
——————————————————————————————————
 
Two types of jump ;
 
Unconditional
jmp 0x654879
 
Conditional
cmp eax,0x10 –> compare value of eax with 0x10 
jge 0x654879–> jump to 0x654879 if eax greater or equal than 0x10
———————————————————————————————————
JG->Jump if greater(>)
JNLE->Jump if not less than or equal (not <=)
JGE->Jump if greater than or equal (>=)
JNL->Jump if not less than (not <)
 
JL->Jump if less than (<)  
JNGE->Jump if not greater or equa (not >=)
JLE->Jump if less than or equal (<=)
JNG->Jump if not greater than (not >)
JE->Jump if equal (=)
JNE->Jump if not equal (!=) 
 
———————————————————————————————————-
 
MAİN MEMORY
 
Stack->Variables and arguments local to the program’s functions
Heap->Used to allocate dynamic memory space
Code->Program code translated into machine language
.Data->Assigned globals and static variable
.BSS->Unassigned globals and static variable
STACK
 
Works with first-in-last-out logic(LIFO).Commands pop,push,call,ret.
 Goes to low adrese in high.
Local memory variables return address and EBP value are stored here.
 
ESP->The top of the stack

EBP->Local memory variables return address and EBP value are stored here.