- Moderatör
- #1
#Ri
Coder
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)
- (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)
- (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
).
- (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 .)
(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 :))
}