C++ Assembly Memory Edit (TR | EN Tutorial)

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
#Ri
Coder
Katılım
17 Ocak 2016
Mesajlar
1,111
Çözümler
2
Tepki puanı
2,542
Ödüller
12
Yaş
9
10 HİZMET YILI
C++ Assembly Memory Edit

(Beğenmeden geçenlerin çükü kopsun. Dökümanı kendim yazdım tozlanmak üzere buraya bırakıyorum.)


- (1) 1 Byte Yazma (Byte Patch)


Kod:
DWORD ADRES = 0x0000000;

_asm{

mov ecx,ADRES // Ecx registerine ADRES'i atıyoruz (moving pointer to ecx register)
mov byte ptr[ecx],0xF6 // F6 Bytesini Ecx registerine yazıyoruz (Patching F6 byte to ecx)

}


- (2) 2 Byte Yazma (WORD Patch)

[TR]

*Burda dikkat edilcek bi konu var 2 ve 4 byte yazdırdığımız zaman x86 assembly kurallarına göre byteleri tersten yazmamız gerekir örneğin;

0x12345678 adresine 75 05 opcodesini yazdırmak için 0575h şeklinde ters olarak yazmamız gerekiyor.


*kural*("h" harfi 2,4,8 byte yazdırdığımız zaman opcodenin sonuna konulur, başına "0x" koyamazsınız.)

[EN]

(*Important : We need write bytes reverse like on sample, because in x86 assembly it's an rule)

(Sample : We need write bytes reverse like "0575h" for write "7505" opcode to pointer.)

*rule*("h" is needed for 2,4,8 byte patch you cant use "0x" type)


Kod:
DWORD ADRES = 0x0000000;

_asm{

mov ecx,ADRES // Ecx registerine ADRES'i atıyoruz (moving pointer to ecx register)
mov word ptr[ecx],0575h // 75 05 bytesini Ecx registerine yazıyoruz (Patching "75 05" to ecx with reversed type)

}



- (3) 3 Byte Yazma (3 Byte Patch)


[TR]
*3 Byte yazdırmak istediğimizde F6 C4 41 opcodesini 41C4F6h şeklinde yazamayız bu yüzden daha farklı bi mantıkla yazıcaz.

[EN]
*(If we want patch 3 bytes, we cant use "41C4F6h" for "F6 C4 41" 's patch, we have another method :) ).

Kod:
DWORD ADRES = 0x0000000;

_asm{

mov ecx,ADRES // Ecx registerine ADRES'i atıyoruz (moving pointer to ecx register)
mov byte ptr[ecx],0xF6    //F6 bytemizi adresimize yazdırdık (Patched first byte)
mov byte ptr[ecx+1],0xC4 //C4 bytemizi F6 dan hemen sonrasına yazdık (Patched second byte after F6)
mov byte ptr[ecx+2],0x41 //burdada 41 bytesini son olarak yazdık ve tamamladık (And last byte patched after C4)

}


- (4) 4 Byte Yazma (DWORD patch)

[TR]
*4 Byte yazdırmak istediğimizde 2 byte yazdırdığımız gibi aynı şekilde op codemizi tersten yazarak hafızaya yerleştircez.

[EN]
*(If we want patch 4 Byte (DWORD) we will write like 2byte (WORD) patch .)

Kod:
DWORD ADRES = 0x0000000;

_asm{

    mov ecx,ADRES // Ecx registerine ADRES'i atıyoruz (moving pointer to ecx register)
    mov dword ptr[ecx],3FE66666h // 66 66 E6 3F opcodesini tersten yazarak dword ile adresimize işliyoruz (We writed opcode reversed and well done :))

}
 
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
inline assembly cnm
 
Ey yüce yaradan bana fantastik bir hayat yaşattın.
Emektar Üye
Katılım
2 Ocak 2016
Mesajlar
4,595
Çözümler
1,842
Tepki puanı
2,297
Ödüller
18
10 HİZMET YILI
eyvallah hocam yararlı konu tr en olması cabası
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst