Tutorial Membuat Cheat Game Dengan Vb6 [Part 2]

dipostingan saya yang satunya udah kita sudah mengenal memmory address dan apa yang dimanfaatkan oleh cheater untuk membuat suatu kecurangan dalam bermain game.
biasanya kebanyakan orang memanfaatkan seperti memmory address nya uang dalam game atau memmory addressnya darah dalam game atau juga memmory addressnya score dalam game dan masih banyak lagi.. sekarang yang dibahas disini adalah bagaimana langkah-langkah cara untuk memanfaatkan memmory address dan bagaimana code-code dalam bentuk vb. seperti apaya?

oke langsung aja. dalam hal ini kita akan berinteraksi dengan system windowsnya sendiri yang biasa disebut API (Aplication Programming Interface)

langkah pertama API yang kita gunakan:
"Findwindow"

Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" ( _
ByVal IpClassname As String, _
ByVal IpWindowName As String) As Long
API
API ini berfungsi untuk mencari suatu program/aplikasi yang sedang Running.
#text berwarna merah = nama API dimana kita bisa memanggil fungsi API tersebut dengan keyword "FindWindow"
#text berwarna biru = merupakan parameter pertama. parameter ini bisa diisi sesuai nama Class Name dari aplikasi/program. contoh microsoft word memiliki class name yaitu "OpusApp".
#text berwarna Hijau = merupakan parameter kedua. parameter ini bisa diisi sesuai nama Window Name nya atau judul window nya seperti gambar dibawah:

Contoh Pemanggilan fungsi API ini untuk mencari microsoft word:


Dim Hwndx As Long
Hwndx = FindWindow("OpusApp", vbNullString)
If Hwndx <> 0 Then Msgbox"Microsoft Word Ditemukan!"

'kalau yang ini untuk mencari notepad dalam windows
Hwndx = FindWindow(vbNullString, "Untitled - Notepad")
If Hwndx <> 0 Then Msgbox"Notepad Ditemukan"


API Kedua yang dibutuhkan yaitu:
"GetWindowThreadProcessId"

Private Declare Function GetWindowThreadProcessId Lib "user32" ( _
ByVal hwnd As Long, _
lpdwProcessId As Long) As Long
API ini berfungsi untuk mendapatkan Process ID dari sebuah aplikasi/program yang sedang running.
#text berwarna biru = Merupakan Parameter pertama. diisi dengan Hasil Return dari pemanggilan fungsi "Findwindow" tadi
#text berwarna Hijau = merupakan parameter kedua. diisi dengan variable bertipe Long untuk menyimpan sementara Process ID dari Program (Process ID ini akan Return ke Variable yang diisi pada parameter kedua).
contoh penggunaan API "GetWindowThreadProcessId"

Dim Hwndx As Long, pid As long
Hwndx = FindWindow(vbNullString, "Untitled - Notepad")
If Hwndx = 0 Then Exit Sub
GetWindowThreadProcessId Hwndx, pid
MsgBox pid

code diatas berfungsi untuk mendapatkan Process ID dari Notepad yang nantinya akan disimpan di Variable bernama "pid"

API Ketiga yang dibutuhkan yaitu:
"OpenProcess"

Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
API ini berfungsi untuk meng-set suatu Akses ke memmory address suatu aplikasi/program. jika kalian tidak menggunakan api ini akan percuma dan gagal karena akses ke memmory address tidak diperbolehkan. akhirnya harus pake API ini untuk memperbolehkan program cheat kita untuk mengakses Memmory Address.
#Tulisan warna biru = merupakan parameter pertama. bisa diisi dengan nilai "&H1F0FFF". nilai tersebut saya ambil dari konstanta PROCESS_ALL_ACCESS yang artinya membuka semua akses ke memmory address mulai dari 'Read Memory','Write Memory'.
#Tulisan warna hijau = Merupakan Parameter kedua. diisi dengan "False"
#tulisan Warna kuning = Merupakan parameter ketiga. diisi dengan Process ID yang didapatkan melalu fungsi API "GetWindowThreadProcessId"
Contoh Penggunaannya:

On Error Resume Next
Dim Hwndx As Long, pid As Long, OpenX As Long
Hwndx = FindWindow(vbNullString, "Untitled - Notepad")
GetWindowThreadProcessId Hwndx, pid
OpenX = OpenProcess(&H1F0FFF, False, pid)
If OpenX <> 0 Then
MsgBox "OpenProcess Sukses!", vbInformation
Else
MsgBox "OpenProcess Gagal!", vbCritical
End If

code diatas berfungsi untuk menjadikan process menjadi Process_ALL_ACCESS jadi kalian bisa Read Memory atau Write Memory

API Keempat yang dibutuhkan yaitu:
"WriteProcessMemmory"

Private Declare Function WriteProcessMemory Lib "kernel32" ( _
ByVal hProcess As Long, _
ByVal lpBaseAddress As Any, _
lpBuffer As Any,
ByVal nSize As Long, _
lpNumberOfBytesWritten As Long) As Long
API ini berfungsi untuk mem-write Data Memmory Address suatu program/aplikasi
#Tulisan berwarna biru = merupakan parameter pertama. diisi dengan hasil return dari API "OpenProcess".
#Tulisan berwarna Hijau = merupakan prameter kedua. nah disini anda harus mengisikan alamat Address berbentuk angka ingat tambahkan kata kunci "&H" sebelum kalian menuliskan Alamat Addressnya contoh jika kalian ingin mem-write address 04699709 ini, sebelum mengisi parameter ini diubah dulu menjadi "&h4699709". karena alamat tersebut merupakan bilangan Hexa. baca disini.
#Tulisan berwarna kuning = merupakan parameter ketiga. inilah sebuah value yang akan dikirimkan ke memmory address yang akan dituju terserah parameter ini mau berbentuk hexa atau decimal gak masalah.
#Tulisan berwarna merah = merupakan Parameter keempat. parameter ini menentukan jumlah bytes yang untuk pem-write an kedalam Memory Address. jika kalian ingin memwrite dengan type Unsigned Long isi parameter ini menjadi "4" ini hanya akan mencapai jangkauan buffer dari 0 hingga 4294967295 . satuan diparameter ini berbentuk bytes.
#Tulisan berwarna Coklat = diparameter ini isi saja dengan "0&" alias parameter ini adalah nol.
jadi secara keseluruhan contoh nya seperti ini:

code dibawah contoh untuk mem-Write memory pada address "0227E16A" pada Notepad dengan jangkauan Unsigned Long, walaupun di vb6 tidak ada variable Unsigned Long tapi bisa diakalin kok.

dalam code ini kita menampung value sementara dengan variable string karena vb6 tidak support dengan Unsigned Long jika bervariable Long(Signed Long) jangkauan hanya sampai 2147483647(setengahnya dari Unsigned Long) jadi gimana dong? hehehe.. kan code dibawah kita tidak memakai wadah bertipe Long tetapi pakai string.

Private Function WriteUnsignedLong(Address As Long, Value As String)
Dim Hwndx As Long, PID As Long, OpenX As Long
Hwndx = FindWindow(vbNullString, "Untitled - Notepad")
GetWindowThreadProcessId Hwndx, PID
OpenX = OpenProcess(&H1F0FFF, False, PID)
If Val(Value) >= 4294967295# Then Exit Function 'jika Value Besar dari Unsigned Long maka exit function
If Val(Value) >= 2147483647 Then 'jika value melebihi Batas Signed Long
Dim NewVal As Long
Value = Value / 2
WriteProcessMemory OpenX, Address, Val(Val(Value) * 2), 4, 0&
Else
'jika value lain dari antara jangkauan maximal Signed Long sampai Unsigned Long akan masuk ke blok ini
WriteProcessMemory OpenX, Address, CLng(Value), 4, 0&
End If
End Function

untuk pemanggilan function:

WriteUnsignedLong &H227E16A, (Value yang kalian inginkan)
code diatas cuma contoh pengubahan value sebuah Memory Address bagaimana kalau address game yang seperti Money, Score, Health/darah?? caranya sama kaya code diatas cuman kita ganti target parameter pertama di API FindWindow menjadi game yang kita inginkan dan Memory Address nya dirubah menjadi alamat memory dari money/score/darah.

0 komentar:

Posting Komentar