Pages

Friday, December 16, 2011

Tutorial Membuat Cheat Game Dengan Vb6 [Part 3]

sesuai janji saya di postingan Tutorial Membuat Cheat Game Dengan Vb6 [Part 2]. dipostingan tersebut udah mempelajari tentang API2 apa yang kita butuhkan saat melakukan proses hacking dan cara menggunakan API tersebut untuk merubah data dari Memory Address. kalau di postingan part2 hanya mempelajari tentang cara mengubah data memory address aja itu juga prosessnya pada notepad bukan di game.. kalau untuk game bagaimana? nah itu dia yang akan kita bahas.

oke langsung aja alat yang dibutuhkan disini adalah:
-Cheat Engine (versi berapa aja)
-visual basic 6

juga dibutuhkan ketelitian dan pantang menyerah dalam mempelajari tehnik - tehnik cracking
disini kita menggunakan game PlantsVsZombies untuk sebagai contoh, soalnya cuma ada game itu saja di kompi saya.. hehehe
tutorial ini tentang bagaimana penghackan jumlah sun di game tersebut.
sekarang buka Cheat Engine kalian dan open process pada gamenya.
pilih pada scan type: "exact value" dan value type: "4 byte" kemudian masukanlah jumlah sun yang kalian punya contoh: 50 lalu klik "First Scan" setelah keluar banyak address kembali ke game ubah sun kalian misalnya kalian mengambil matahari atau menanam tanaman sehingga Sun nya akan berubah. setelah itu kalian masukan lagi sun yang telah berubah nilainya ke kotak value pada cheat engine lalu klik next sehingga kalian mendapat 1 buah address saja. jika kalian mendapatkan lebih dari 1 ulangi cara tadi sampai kalian mendapatkan 1 address. setelah ketemu addressnya masukan address nya ke table cheat engine. seperti gambar dibawah
sip setelah ketemu address sun nya tinggal kita masukan ke visual basic 6 tapi tunggu dulu
address yang kita scan dan dapatkan tadi bukanlah address yang static. address tersebut dapat berubah ketika game nya relog atau game tersebut dicoba pada komputer lain. sekarang kita lanjut tutorialnya cara mencari address yang tidak dinamis biasanya disebut pointer.
klik kanan pada address di table kemudian klik "Find out what writes to this address" jika ada pesan klik yes saja nanti akan muncul kotak dialog kosong seperti gambar dibawah
disini kita mencari address lain yang mem-write data dari address sun tersebut.
setelah muncul kotak dialognya kalian kembali ke game lalu lakukan perubahan pada nilai sun (saran perubahan sun sebaiknya naik sebesar 25 yaitu dgn cara mengambil sun yang jatuh kebawah) . setelah melakukan perubahan pada Sun nantinya akan muncul seperti ini:
klik lah address nya lalu kalian klik More Information sehingga akan muncul seperti ini:
lihatlah intruksi assembly pada address yang berwarna merah pada gambar diatas yaitu:
add [eax+00005560],ecx <- apa artinya intruksi diatas?
jika kita sudah mengenal intruksi dasar pada assembly pasti kita tahu apa artinya kode diatas?
kita lihat pada kata kunci "add"(tulisan berwarna merah) intruksi ini terdiri atas 2 parameter jika dilihat parameter kesatu adalah berwarna hijau dan parameter kedua adalah berwarna biru
kode ini mengintruksikan parameter pertama ditambah oleh parameter kedua.
coba kita lihat pada parameter pertama: [eax+00005560] -> apa artinya ini? kita lihat pada register bernama "eax" lihatlah pada gambar diatas yang saya lingkari
"EAX =102E30B0" jadi parameter pertama ini mengacu pada address EAX + 5560
artinya 102E30B0+5560 silahkan kalian buktikan di calculator windows dengan menjumlahkan kedua bilangan tersebut ingat bilangan ini berbentuk hexa maka hasilnya adalah address Sun yang kalian dapat tadi.
lihatlah register bernama "ecx"(parameter kedua) jika lihat gambar diatas nilai yang tersimpan pada register "ecx" adalah 19 (dalam bentuk bilangan hexa) jika dirubah ke angka decimal adalah 25. mengapa 25? karena saya telah melakukan perubahan nilai Sun sebesar '25'
jadi arti intruksi jika diterjermahin lagi artinya "tambahkan pada address eax+5560 dengan ecx"
atau lebih mudahnya tambahkan Address Sun dengan nilai sebesar 25.
ingat kode diatas hanya berlaku pada anda yang melakukan perubah nilai Sun menambah bukan berkurang.

oke kembali ke topik bagaimana cara mencari Address yang tidak statis? jika kita lihat pada intruksi tadi nilai "5560" adalah offset dan "eax" adalah nilai yang akan ditambahkan offset nantinya. kedua nilai tersebut adalah pointer penunjuk ke alamat address sun yang kalian temukan tadi. jadi kembalilah ke cheat engine centrang Hex lalu masukan value "eax" pada intruksi assembly tadi yaitu: 102E30B0 kemudian klik new scan dan setelah itu akan muncul banyak address kalian pilih yang paling atas dan masukan ke table Cheat Engine seperti gambar di bawah:
bisa kita liat pada contoh gambar diatas address yang kita dapat adalah 0018926C inilah address statis yang bisa kita gunakan sebagai pointer untuk menunjukan alamat dari address sun.
ada untuk pointer rumusnya begini:
Address = value dari address 0018926C + offset yang kalian dapat tadi. hal ini mirip dengan pointer pada parameter pertama dari intruksi add [eax+00005560],ecx dimana value dari address 0018926C merupakan nilai dari register "eax". oke sekarang tinggal gimana coding nya pada vb6, perhatikan code dibawah ini

CODE
'declare dulu
Private Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal _
dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal _
dwProcessId As Long) As Long
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
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal IpClassname As String, ByVal IpWindowName _
As String) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Dim Hwndx As Long
Dim PID As Long
Dim OpenX As Long
Dim BaseAddr As String
Private Function ReadMemory(Address As Long) As Long 'modul ini berfungsi untuk membaca value dari base address
'fungsi ini hanya dapat membaca value hanya sampai jangkauan Signed Long (32,767)
Dim OpenZ As Long, PID As Long
Hwndx = 0
Hwndx = FindWindow("MainWindow", vbNullString) 'mencari windows
If Hwndx = 0 Then Exit Function
GetWindowThreadProcessId Hwndx, PID
OpenZ = OpenProcess(&H10, False, PID)
If OpenZ = 0 Then Exit Function
ReadProcessMemory OpenZ, Address, ReadMemory, 4, 0&
CloseHandle OpenZ
End Function

Private Function WriteMMry(Addres As Long, Value As Long)'modul ini berfungsi untuk mem-write memory
Hwndx = 0
Hwndx = FindWindow("MainWindow", vbNullString) 'mencari windows
If Hwndx = 0 Then
MsgBox "Game Tidak Ditemukan!", vbCritical, "Error"
Exit Function
End If
GetWindowThreadProcessId Hwndx, PID 'mendapatkan ProcessID target
OpenX = OpenProcess(&H1F0FFF, False, PID) 'membuka akses pada program
If OpenX <> 0 Then WriteProcessMemory OpenX, Addres, Value, 4, 0&
CloseHandle OpenX
End Function
sekarang bagaimana cara memanfaatkan pointer untuk mencari address sun tadi pada modul di vb6
untuk pemanggilan fungsi nya dan sekaligus cara penulisan pointer di vb6:

CODE
BaseAddr = ReadMemory(&H18926C) 'membaca value dari base address
BaseAddr = Val(BaseAddr) + Val(&H5560) 'penambahan, ini sebagai pointer ke address
WriteMMry "&h" & Hex(BaseAddr), 9999 'mem-write address sun dengan nilai 9999
jika kalian melakukan tutorial ini dengan benar kalian telah berhasil membuat suatu cheat game /trainer yang bisa di pakai di komputer orang lain. bagi yang ga ngerti comment aja kalau sempet tak jawab kok. bagi yang gak mudeng2 jangan pernah putus asa!

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:
CODE
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"
CODE
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:
CODE
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.
CODE
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.
CODE
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:
CODE
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.
bagaimana cara mencari address tersebut dan bagaimana mencari address statis agar alamat memory tidak berubah-ubah? jawabannya nanti ada Tutorial Membuat Cheat Game Dengan Vb6 [Part 3]. Sekian dulu yah capek ngetik neh.. hahaha...
kalau ada yang gak ngerti silahkan tanya di Comment kalau sempet tak jawab.

Thursday, December 15, 2011

Tutorial Membuat Cheat Game Dengan Vb6 [Part 1]

Apa sih cheat game itu?? kalian yang berkecimpung di dunia game pasti tau apa itu artinya cheat..
oke,, cheat game adalah sebuah alat/aplikasi yang memodifikasi/merubah secara paksa data suatu game yang sedang berjalan melalui "Memmory Address". nah apa lagi tuh Memmory Address? "Memmory Address" adalah sebuah alamat yang berbentuk angka yang memiliki ukuran dalam bentuk Byte didalamnya dan dimana data dan intruksi disimpan disitu(RAM).

contoh:

dalam data memmory address disamping sebuah memmory address memiliki data sebagai berikut:


-memiliki alamat yaitu "103140A8" (ingat angka tersebut dalam bentuk bilangan hexa)
-memiliki type alamat yaitu 4 Bytes (Unsigned Long)
-memiliki data/nilai berbentuk DESIMAL sebesar 50
alamat yang memiliki type sebesar 4 bytes mempunyai jangkauan nilai dari 0 sampai 4294967295, jika kalian mem-write memmory addressnya dengan buffer lebih dari 4294967295 ini tidak akan work karena melewati batas jangkauan tetapi bisa juga jika kalian ingin mem-write lebih dari jangkauan unsigned long(4294967295) kalian bisa ubah juga ukurannya type nya menjadi 8 bytes karena karena jangkauannya akan lebih besar lagi.
seperti halnya alamat rumah, ukurannya 9 x 14 m, memiliki fasilitas toilet 5 buah dan kamar tidur 5 buah.
memmory address biasanya menjadi tempat sasaran hacking oleh parah cheater dengan memanfaatkan celah/bug didalamnya.
value dalam memmory address inilah yang akan dirubah nilainya dan terjadilah kecurangan.
sekarang kita akan mempelajari bagaimana cara merubah memmory addres suatu aplikasi yang sedang 'Running' dalam bentuk source code vb? langsung aja ke postingan saya
Tutorial Membuat Cheat Game Dengan Vb6 [Part 2]