x86 / x64 Assembly Memory Protect Detect

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
x86-x64 Assembly
Kurucu
Katılım
28 Kas 2015
Mesajlar
500
Çözümler
1
Tepki puanı
782
Ödüller
11
10 HİZMET YILI
Assembly mimarisinde mnemonic yani işlemcinin belirli görevleri assembly diline convertleyip talimatlar vererek makine kodunu ((0-1)) değiştirerek istediğiniz herşeyi yapmanızı sağlıyan assembly kodlarıdır.

Peki bu mimarinin en büyük baş belası nedir ? Windows işletim sisteminin bazı "memory segment " yani hafıza bölümlerine erişimi engellemesi veya o bölümün hiç olmaması sonucunda eğer sizin yazdığınız kodlama bu erişimi olmuyan bölümlere erişirse cevap (( CRASH )) uygulamanın çökmesi olacaktır.

Windows işletim sisteminde bazı oyunların aniden crash atması veya kullandığınız uygulamanın aniden çökmesinin en büyük sebebi erişimi olmuyan bi bölüme erişmesinden kaynaklanıyor.

Assembly mimarisinde kesin olan bişey vardır, Yazma izni olmuyan bi bölüme yazamaz, Okuma izni olmuyan bölümü okuyamaz , Yanlış anlamayın adress leri değil , adressleri her türlü okur ama bu adressin verdiği değeri okuyamaz, Bunun için windows işletim sisteminin o bölüme erişim iznini vermesi gerekiyor veya erişmeye çalıştığınız memory bölümünün var olması gerekiyor.

Peki ben şimdi size ne gösterecem ? Bu memory protectleri okumanı sağlıyan tamamen Assembly kodlaması atacam bu benim gibi bu mimariyle uğrasanlar için altın değerinde bi kodlamadır.


Bunu nasıl yapacaz ? Çok güzel soru demi şimdi erişimi olmuyan bi yere erişmeden o yerin erişimi olup olmadığını kontrol etmek imkansızdır, eee peki erişmeden nasıl alacaz cevabı ?

Windows işletim sisteminin apisini kullanarak ( "NtQueryVirtualMemory" )

NASM:
fk:
push eax // Bu registeri kaydetmek için
push ebx // Bu registeri kaydetmek için
push ecx // Bu registeri kaydetmek için
push edx // Bu registeri kaydetmek için
push esi // Bu registeri kaydetmek için
push edi // Bu registeri kaydetmek için
push ebp // Bu registeri kaydetmek için
push esp // Bu registeri kaydetmek için
lea eax,[eax-84]  // eax registerindeki adresi control etmek için windows apisine gönderiyorum burası kontrol etmek istediğim adrestir.
call cntr
cmp esi,0 // 0 Değeri böyle memory bile yok demek
je yapma
cmp esi,1 // 1 Değeri böyle memory var ama no acces erişim yok demek
je yapma
pop esp // Bu kaydettiğimiz registeri geri getirmek için
pop ebp // Bu kaydettiğimiz registeri geri getirmek için
pop edi // Bu kaydettiğimiz registeri geri getirmek için
pop esi // Bu kaydettiğimiz registeri geri getirmek için
pop edx // Bu kaydettiğimiz registeri geri getirmek için
pop ecx // Bu kaydettiğimiz registeri geri getirmek için
pop ebx // Bu kaydettiğimiz registeri geri getirmek için
pop eax // Bu kaydettiğimiz registeri geri getirmek için
cmp [eax-84],(int)176293393 // Ben classda  control yapıyorum, buradan bazen erişimi olmuyan bi yere eriştiğim için crash yiyorum bunu engelledim işte
je rcle
jmp hk
yapma:
pop esp // Bu kaydettiğimiz registeri geri getirmek için
pop ebp // Bu kaydettiğimiz registeri geri getirmek için
pop edi // Bu kaydettiğimiz registeri geri getirmek için
pop esi // Bu kaydettiğimiz registeri geri getirmek için
pop edx // Bu kaydettiğimiz registeri geri getirmek için
pop ecx // Bu kaydettiğimiz registeri geri getirmek için
pop ebx // Bu kaydettiğimiz registeri geri getirmek için
pop eax // Bu kaydettiğimiz registeri geri getirmek için
hk:
mov edx,[eax]
mov [ebp-2C],edx
jmp returnhere

pop esp // Bu kaydettiğimiz registeri geri getirmek için
pop ebp // Bu kaydettiğimiz registeri geri getirmek için
pop edi // Bu kaydettiğimiz registeri geri getirmek için
pop esi // Bu kaydettiğimiz registeri geri getirmek için
pop edx // Bu kaydettiğimiz registeri geri getirmek için
pop ecx // Bu kaydettiğimiz registeri geri getirmek için
pop ebx // Bu kaydettiğimiz registeri geri getirmek için
pop eax // Bu kaydettiğimiz registeri geri getirmek için
rcle:
mov [eax],0 // Hile için 0 değerini eax registerindeki adresin değerine yaz.
mov edx,[eax]
mov [ebp-2C],edx
jmp returnhere


cllcode:
push ebp
mov ebp,esp
sub esp,7C
lea eax,[ebp-08]
push eax
push 1C
lea ecx,[ebp-7C]
push ecx
push 00
mov edx,[ebp+08]
push edx
push -01 // Handlesi -01 gösteriyoruz böylece api bizim uygulamamızı tarıyor
call NtQueryVirtualMemory // Windows apisi
mov [ebp-0C],eax
mov eax,[ebp-68]
mov [ebp-04],eax
mov esi,eax// Erişim olup olmadığının değeri
mov esp,ebp
pop ebp
ret

cntr:
push ebp
mov ebp,esp
mov [ebp-04],eax
mov eax,[ebp-04]
push eax
call cllcode
pop eax
pop ebp
ret

mx1:
jmp newmem
returnhere:




Protect olmuyan = hex (00)
No acces olan = hex (01)
Read Only = hex (02)
Read wrıte = hex(04)
wrıte copy = hex (08)
execute = hex (10)
execute_read = hex (20)
execute_readwrıte = hex (40)
execute_writecopy = hex (80)




Dikkat etmeniz gereken benim eklediğim registeri kaydetmek için kullandığım pushlar bunlar olmazsa windows apisi kullandıktan sonra geri bizim fonksiyona döndüğünde registerlerin büyük olasılıkla bozulması bu uygulamanın crash yemesine neden olur.


Şimdilik sadece x86 mimarisi için ekledim ilerliyen zamanlarda bunu 64 bit için olanınıda eklicem , Şimdilik hoşçakalın

Alıntı değildir, İnternette tek başka yerde kaynak yok
 
Son düzenleme:
Doomsday is approaching
Ultra Üye
Katılım
8 Şub 2019
Mesajlar
1,709
Çözümler
5
Tepki puanı
684
Ödüller
8
7 HİZMET YILI
Eline sağlık, 64 Bit gelmesini bekliyorum.
 
Banlı Üye
Katılım
7 Şub 2019
Mesajlar
227
Tepki puanı
65
Yaş
25
7 HİZMET YILI
iş görür hocam :gelisirabii:
 
Banlı Üye
Katılım
13 Ara 2018
Mesajlar
652
Tepki puanı
234
Yaş
27
7 HİZMET YILI
Temiz'inden Makina Dil'ini Güzelce Anlatan Hoş Bir Konu Olmuş Elinize Sağlık :)
 
Isse Kun
Emektar Üye
Katılım
15 May 2017
Mesajlar
4,801
Çözümler
5
Tepki puanı
2,106
Ödüller
15
Sosyal
9 HİZMET YILI
Harika bir iş çıkartmışsınız Hocam dediğiniz gibi mimari ile uğraşanlar için altın değerinde bir paylaşım
 
aka panic.rs
Kurucu
Katılım
18 Haz 2015
Mesajlar
3,379
Çözümler
50
Tepki puanı
13,156
Ödüller
22
Sosyal
10 HİZMET YILI
güzel detaylı bir konu olmuş senden bu kadar detaylı konu beklemiyodum açıkcası :coolstory: :burnbear::burnbear::burnbear:
 
  • Konuyu başlatan
  • Moderatör
  • #14
x86-x64 Assembly
Kurucu
Katılım
28 Kas 2015
Mesajlar
500
Çözümler
1
Tepki puanı
782
Ödüller
11
10 HİZMET YILI
64 bit olanını ne zaman eklersin abi
Eline sağlık, 64 Bit gelmesini bekliyorum.
Harika bir iş çıkartmışsınız Hocam dediğiniz gibi mimari ile uğraşanlar için altın değerinde bir paylaşım
güzel detaylı bir konu olmuş senden bu kadar detaylı konu beklemiyodum açıkcası :coolstory::burnbear::burnbear::burnbear:

Herkese teşekkürler
 
Onaylı Üye
Katılım
28 Şub 2018
Mesajlar
59
Tepki puanı
3
Ödüller
5
Yaş
28
8 HİZMET YILI
i can learn alot of things on this thank you
 
It was all a dream.
Süper Üye
Katılım
24 Ara 2017
Mesajlar
760
Çözümler
2
Tepki puanı
311
Ödüller
6
8 HİZMET YILI
64 Bit bekliyoruz. :gelisirabii:
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst