Pada dasarnya komputer adalah makhluk digital yang hanya mengerti angka 1 dan 0 saja (binary). Komputer hanya mau menerima data dalam bentuk biner dan juga hanya bisa mengerti perintah dalam bentuk biner. Perintah dalam bentuk biner ini disebut dengan bahasa mesin. Bahasa assembly adalah mnemonic dari instruksi bahasa mesin ( biner) yang disebut opcode, jadi programmer tidak memprogram dengan bahasa mesin(biner) secara langsung tetapi mereka awalnya memprogram dengan mnemonic dari intruksi bahasa mesin yaitu "Assembly". Setiap prosesor (otak komputer) memiliki instruction set masing-masing,sehingga bahasa assembly untuk prosesor Intel akan berbeda dengan assembly untuk prosesor lainnya. Namun karena intel menguasai pangsa pasar prosesor maka hampir semua produsen prosesor membuat instruksi set yang kompatibel dengan intel. jadi yang kita pelajari adalah instruksi set dari intel.
Ada beberapa jenis bilangan biner yang dibedakan yaitu: "Machine Instruction" dan "Data Code"
pada dasarnya untuk mengerti sebuah kode biner harus dalam "Runtime Instruction" atau pada saat debug program.
1. Machine Instruction yaitu: sebuah kode perintah kepada komputer dengan berbentuk biner yang memiliki ukuran sekian "Byte" per intruksi misalkan untuk intruksi "mov eax,5" memiliki ukuran 2 byte per intruksi
yaitu angka binernya adalah 10110111000. sebenarnya intruksi ini akan membaca 5 byte pada 32 bit prosesor tetapi karena nilai operan keduanya adalah "5" maka 3 byte selanjutnya nilainya 00 sehingga intruksi "mov eax,5" ukurannya hanya 2 byte saja. presentasi dalam memmorynya adalah B8 05 00 00 00
lihatlah 3 byte dari kanan yaitu nilainya 0.
2. Data Code yaitu: sebuah data kode untuk prosesor yang tersimpan secara sementara pada RAM komputer dan juga memiliki ukuran sekian "Byte" per satu baris data. misalkan RAM menyimpan data string "aku" dengan ukuran 1 byte per karakter yaitu nilai binernya adalah 11101010110101101100001 yang memiliki ukuran 3 byte.
misal contoh data code:
#ascii code(bisa 4 atau 2 atau 1 byte ukuran string)
#Floating Point (bilangan ber koma yg di presentasikan dengan integer pada RAM komputer) lihat Floating Point
#data Integer... dll
contoh Machine Instruction:
pada dasarnya sebuah intruksi yg berjalan mempunyai sub prosedur ataupun function prosedur
misal suatu intruksi copy memory:
010111000111 dengan parameter ,
dengan tujuan 32 bit addres "00100c00": 000000000001000000001100000000000000 dan Nilai operannya adalah "0x54" yaitu 1010100
kemudian digabungkan secara terbalik Nilai-Tujuan-Instruction code
jadilah sebuah instruksi 1010100000000000001000000001100000000000000010111000111
artinya isikan addres 00100c00 dengan nilai 0x54
hal ini sama dengan intruksi assembly "mov[00100c00],54h" cm yg dijelaskan versi biner nya
jika intruksi berjalan pada function prosedur yang mempunyai 1 parameter dengan ukuran 4 byte karena parameter itu disimpan di stack maka di akhir intruksi harus diberi biner: 11000010 dengan operan 4 byte.
jadi penulisannya "Jumlah Byte"-"Instruction Code"
sehingga kode biner aslinya adalah 10011000010
artinya menghapus parameter memory yg ada di stack sebesar 4 byte
hal ini sama dengan intruksi assembly "ret 4" cm yg dijelaskan versi biner nya
jika tidak ada intruksi ini diakhir main instruction maka komputer km akan hank coba saja..!!
Representasi bilangan yang berkoma/desimal atau biasa disebut float atau "Single" pada VB. pada Memory Komputer. sekian lama udah gak nulis artikel baru lagi di blog ini. akhirnya baru bisa juga, untuk berbagi ilmu disini.. representasi tipe data float/Single yang digunakan compiler/ide pada "Visual Basic". kebanyakan prosesor tidak mensuport secara langsung untuk operasi bilangan floating-point (bilangan berkoma), karena hanya memiliki unit aritmetika dan logika, dan unit kontrol yang beroperasi berdasarkan pada integer saja. biasanya ini juga bagian terpenting yang perlu diketahui jika anda ingin belajar assembly atau developer language programming. tapi silahakan dibaca untuk sekedar pengetahuan para programmer2.
nah pada gambar, adalah representasi tipe data Single pada VB yang diisi dengan nilai 5.53 pada memory komputer. lihatlah pada kotak warna merah pada memory(sebelah kanan) format yang ditunjukan adalah "Byte Array" coba kalian baca nilainya per element Byte Arraynya dari kanan yang sudah saya kotakan.. yaitu representasi nilainya menjadi 40B0F5C3h (ingat bilangan heksa) dengan ukuran 32bit/4byte, nah lho gimana nyambungnya coba dari 5.53 kok bisa jadi 40B0F5C3h pada memory... nah ini dia yang kita pelajari adalah bagaimana prosesor mengerti berapa nilai float point asli dan representasi "Single precision binary floating-point 32bit" (tipe data nya adalah Single pada VB)
dalam floating point dengan format 32 bit, sebuah angka yang dikonversi kedalam bentuk biner, misal 40B0F5C3 memiliki angka biner yaitu: "1000000101100001111010111000011" (bisa pake kalkulator windows) karena jumlah digit binernya hanya memiliki 31 digit dan kita memakai format ukuran 32bit maka akan ditambahkan 1 digit angka lagi dipaling depan dengan nilai 0 agar sesuai dengan format 32bit yaitu menjadi "01000000101100001111010111000011" intinya adalah, tidak boleh ada awalan 0 dalam notasi yang akan dioperasi format 32bit kemudian terbagi menjadi 3 bagian yaitu: 1. Sign -> dengan ukuran 1bit 2. Eksponen -> dengan ukuran 8bit 3. Mantissa -> dengan ukuran 23bit kemudian kita pisah2 kan dahulu ketiga bagian tersebut: 0 10000001 01100001111010111000011 ketiga bagian tersebut akan kita olah menjadi bilangan desimal..
#pertama untuk menentukan nilai itu positif atau negatif kita menggunakan bagian sign bit yaitu "jika nilai sign 0 maka bilangannya adalah positif, jika nilai sign 1 maka bilangannya adalah negatif". #kedua pada bagian exponen memiliki nilai: 81h (heksa). untuk mendapatkan nilai exponen asli kita bisa kurangkan nilai 81h dengan 7Fh dan nilai exponen asli yang kita gunakan adalah 2 #ketiga pada bagian Mantissa -> pertama kita tambahkan 1 pada awalan Mantissa yaitu menjadi 1.01100001111010111000011 nah karena eksponen aslinya adalah 2 kita geser koma nya 2 bit kekanan yaitu menjadi 101.100001111010111000011 nah kalau sudah begini notasi biner nya dibagi menjadi 2 bagian yaitu: notasi pada sebelah kirinya koma adalah nilai integer yaitu 5 dan di sebelah kanan adalah nilai yang akan kita operasikan yaitu rumusnya: (n1*2^-1) +( n2*2^-2) + (n3*2^-3).... dan seterusnya kalo kalian itungin pake manual sih kelamaan langsung pake kode VB saja!
Function CalcMantissa(biner As String) As String Dim rtrn As Single Dim p As Integer Dim n As String p = -1 For i = 1 To Len(biner) n = Mid(biner, i, 1) rtrn = rtrn + (n * 2 ^ p) p = p - 1 Next CalcMantissa = rtrn End Function
parameternya yaitu notasi Mantissa yang sudah digeser koma nya yaitu "100001111010111000011" pemanggilan fungsinya : MsgBox CalcMantissa("100001111010111000011") dan nilai yang keluar adalah 0,53 kemudian digabungkan dengan nilai integer menjadi 5.53 karena sign bit 0 maka bilangan tersebut positif
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 tadiyaitu: 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!
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.
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]
mungkin kebanyakan pada ga tau ya gunanya statement DoEvents di vb? padahal kalau kita tes fungsi statement DoEvents di vb seperti ini:
Private Sub Command1_Click() DoEvents End Sub
ketika kita pencet CommandButton trus apa yang terjadi? ya tentu ga terjadi apa2.. penggunaan statement DoEvents bukan disitu tempatnya penggunaan statement DoEvents biasa digunakan pada statement perulangan seperti: For..Next atau Do While ... Loop dan lain2 contoh: tambahkan 1 buah Label1 dan Command Button
CODE
Private Sub Command1_Click() Dim a As Long Do Until a = &HFFFFFFFF a = a + 1 Label1.Caption = a DoEvents Loop End Sub
jadi fungsi DoEvents di vb ini memberi/mengijinkan user untuk tetap bisa berinteraksi dengan aplikasi kita saat code di eksekusi seandainya statement DoEvent Dihilangkan Pasti aplikasi kalian Hang coba aja kalo ga percaya!
otomatis menghitung di vb6 cara ini menggunakan fungsi for. langsung aja siapkan 1 buah listbox (List1)
masukan kode berikut:
Private Sub Form_Load()
Dim i As Integer, a As Integer, b As Long
For i = 1 To 10
a = i
b = i * a
List1.AddItem i & " x " & a & " = " & b
Next
End Sub
intinya fungsi for diatas itu berfungsi menghitung dan memasukannya kedalam
variable a dan b setelah itu variable a dan b dikalikan dan dimasukan kedalam
variable b kemudian variabel b di masukan kedalam Listbox
(dan itu dilakukan sebanyak 10x)
artikel ini merupakan lanjutan dari Mengenal Visual Basic 6 (Bagian 1) soalnya kalo artikelnya dijadiin satu nanti kepanjangan. oke kita lanjut aja..!!
dalam visual basic ada tool-tool yang sangat berguna bagi para programmer untuk mengembangkan aplikasi yang mereka buat.yaitu:
Properties
Propoerti digunakan untuk menentukan setting suatu objek. Suatu objek biasanya mempunyai
beberapa properti yang dapat diatur langsung dari jendela Properties atau lewat kode program. Setting
properti akan menentukan cara kerja dari objek yang bersangkutan saat program aplikasi dijalankan,
misalnya menentukan warna objek, bingkai objek, pengambilan data dan lain-lain.
Kode program
Kode program adalah serangkaian tulisan perintah atau intruksi-intruksi yang menggunakan bahasa basic, dan kode tersebut akan dijalankan sesuai ketentuan event pada visual basic. jika programmer menulis serangkaian intruksi-intruksi tersebut pada event Form_Load (pada gambar) artinya intruksi tersebut akan dijalankan pada saat Form ter-Load atau Aplikasi baru dijalankan
Kode program ini akan mengontrol dan menentukan jalannya suatu objek. cara memview Kode Program yaitu: klik kanan Form lalu klik tulisan View Code.
Menu Editor
Menu Editor merupakan cara untuk pengeditan atau pembuatan menu-menu yang biasanya terletak diposisi paling atas area form.
untuk mengisikan intruksi atau kode pada menu terdapat pada Tool: View Code yang menggunakan event Click. Cara membuka menu editor yaitu: Klik kanan Form lalu pilih tulisan Menu Editor.
Sebelum menjalankan fungsi, pastikan isi dari folder tersebut sudah Kosong, (karena takutnya file anda hilang nanti)
Menghapus Suatu Folder : RmDir (“c:\FolderTest”)
Cara untuk menghapus isi Dari folder tersebut : Kill “c:\FolderTest\*.*”
tenang aj pada gammbar yang ada nomornya ada keterangannya kok.. 1. Menubar
Pada bagian ini terdapat menu-menu dasar yang akan digunakan selama perancangan
program. Ada Menu File (untuk membuka program, menyimpan program, dll), meni View (untuk
menampilkan tool-tool yang belum ada), Menu Run (untuk kompilasi), dsb.
2. Toolbar
Pada bagian ini ditampilkan icon-icon dari menu utama yang ada pada menubar.
3. Toolbox
Digunakan untuk pemilihan kontrol-kontrol yang akan digunakan oleh program yang akan
dirancang. Setiap kontrol diwakili oleh sebuah icon toolbox.
4. Jendela Form
Form adalah area tampilan yang berhubungan dengan sebuah jendela yang dapat dilihat ketika
aplikasi berjalan. Pada form ini dapat diletakkan kontrol dan kode untuk pembuatan program.
Form akan banyak digunakan saat perancagan.
5. Jendela Code
Jendela Code digunakan untuk menuliskan source code dari program yang kita buat. nah disini lah para programer menuliskan intruksi intruksi yang make bahasa pemrograman tersendiri
6. Project Explorer
Project Explorer akan menampilkan form-form dan modul yang ada di dalam program yang kita
buat. Dengan project explorer kita dapat berpindah-pindah dari satu form ke form yang lain.
7. Jendela Properties
Digunakan untuk mengatur sifat(properti) dari form atau kontrol-kontrol. Isi dari wiondow
properties ini dapat berubah-rubah sesuai dengan form atau kontrol yang dipilih.
Mengenal Komponen yang ada di toolbox
___________________________________________________________________________
Label Untuk menampilkan tulisan pada form. sang user tidak dapat
mengubah tulisan tersebut secara langsung
Contoh Penggunaan Label
___________________________________________________________________________
TextBox Digunakan sebagai tempat input/juga dapat digunakan untuk
menampilkan teks, dan pemakai dapat mengubah-ubah tulisan yang
terdapat pada control ini.
Contoh Penggunaan Textbox
___________________________________________________________________________
ListBox Menampilkan beberapa item, dan dari control ini item-item tersebut
dapat dipilih. Scrollbar dapat digunakan untuk enggulung pilihan
yangtidak dapat ditampilkan seluruhnya.
Contoh Penggunaan ListBox
___________________________________________________________________________
ComboBox Merupakan kombinasi antara TextBox dan ListBox. Sehingga
pemilihan item dapat dilakukan dari ListBox, atau dengan mengetik
langsung pada TextBox.
Bahasa pemrograman adalah instruksi-instruksi yang dengan aturan tata bahasa tertentu yang dicompile kemudian dimengerti oleh komputer untuk melakukan tugas-tugas tertentu, tentu saja kita mengisikan intruksi2 trsbt di program khusus compiler yang menggunakan bahasa pemrogram sendiri2 contoh compiler yaitu: Visual basic, Microsoft visual c++, Delphi,, masm32 dst.. compiler trsbt memiliki bahasa pemrograman tersendiri.
gak mungkin kan kita buat program pake bahasa indonesia kaya gini "Komputerku buatin aplikasi dong!!"
hahaha..
tentu make bahasa yang dimenegerti komputer lah...
bahasa pemrograman dikelompokkanatas dua macam :
1. Bahasa tingkat rendah
Bahasa jenis ini dirancang agar setiap instruksinya langsung dikerjakan komputer tanpa harus
melalui penerjemah (translator). Contohnya adalah bahasa Assembly
2. Bahasa tingkat tinggi
Bahasa tingkat tinggi membuat pemrograman lebih mudah dipahami, dan
berorientasi ke bahasa manusia (bahasa inggris). Yang termasuk dalam bahaa ini adalah
Pascal, PL/I, Ada, Cobol, Basic, Fortran, C dan sebagainya.
kata kebanyakan orang sih semakin rendah bahasa pemrograman, lebih susah untuk dipahami. tapi klo kita belajar sih bisa bisa aja.
pada taukan textbox di vb6? textbox bisa sebagai media yang bs dioprasikan sama user lalu
datanya akan diproses di form vb6. nah lalu bagaimana caranya agar data pada textbox yg
diinputkan ma user bs dbatasin penggunaan karakternya? gampang kok caranya
sobat tgl liat properties textbox trsbt trus cari yang bacaannya MaxLenght dan ubah value nya
menjadi yang sobat inginkan. misalnya sobat ubah jadi 5 setelah di run nanti textbox hanya
bisa diisi sampai hanya 5 karakter atau dengan kodenya:
Text1.MaxLength = 5
Setiap tombol-tombol pada keyboard, mereka mempunyai kode ascii tersendiri.
contoh tombol F1 pada keyboard mempunya keyascii yaitu 112. keyascii ini berguna sebagai pernyataan tombol yang ada di keyboard dalam pemrograman, contohnya bisa dilihat di artikel saya satunya Disini.
nah skrg buat 2 buah label trus copy kan kode berikut
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Label1.Caption = KeyCode End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Label2.Caption = Button End Sub
tekan f5 lalu sobat tekan tombol apa aja di keyboard
disini akan membahasa tentang cara untuk mengetahui user menekan tombol apa dikeyboard?. nah cara ini menggunakan fungsi api di vb6, yaitu nama fungsinya adalah "GetAsyncKeyState". fungsi api ini juga bisa digunakan untuk pembuatan keylogger karena bisa menyadap keyboard user yang sedang menekan tombol dan mencatat data trsbt di tempat penyimpanan kata seperti Notepad. pastinya bisa buat nyatet Password diwarnet hehehehe..(kaya hacker aja)...
back to topic!!
langsung aja.. tambahkan komponen timer dengan interval 1.
copy paste kode berikut ke form
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Private Sub Timer1_Timer() If GetAsyncKeyState(112) Then MsgBox "Anda telah menekan tombol F1" End Sub
setelah itu tekan F5 dan untuk mengetesnya coba sobat tekan tombol F1 di keyboard dan sobat bakal mendapatkan pesan.
untuk tulisan yang berwarna biru (kode diatas) kenapa kok 112? penjelasannya ada Disini
Pada tau kan Bilangan Hexa itu apa?
yaaa...bilangan hexa itu terdiri dari 16 nilai:
0 - 9 dan A,B,C,D,E,F hmmm Bingung juga yah
sedangkan decimal aja yang kepake cuma nyampe 9 lha ini bilangan hex sampe F... Wtf!!
apalagi kalau kita menemukan soal yang seperti ini "14FAB + AD9F" wkakaka berapa tuh hasilnya?? (yang pasti ada koq hasilnya. dan ga akan ngaco juga soalnya)
okeee kalo sobat dah tau visual basic dan sudah bisa bikin kalkulator lalu bagaimana dengan kalkulator hexa ini?
ini dia code nya:
buat 2 buah textbox
Dim Hasil As String
Hasil = Hex(Val("&h" & Text1) + Val("&h" & Text2))
jika ingin perkalian sobat tinggal ganti "+" menjadi "*" (tanpa tanda kutip)
jika ingin peembagian sobat tinggal ganti "+" menjadi "/" (tanpa tanda kutip) dst..
jadi dalam visual basic6 untuk menyatakan bahwa bilangan hexa yaitu dengan menulis "&h" (tanpa tanda kutip)
o iya dalam memory address bilangan hexa ini sangat penting sekali untuk dipelajari (memory address bisa diotak atik untuk software hacking atau game hacking) hmmm mungkin cracking kali ya..??!??
Nah kali iini artikelnya akan membahas cara membuat cheat dengan vb6. pada tau kan cheat itu apa? kalau dalam game cheat itu cara bermain curang nah pasti kalian pada bingung "gimana sih caranya buat cheat itu?" hahaha... tenang aq ajarin deh buat cheat nya langsung aja... tutorial ini tentang cara membuat trainer Game "PlantsVsZombies"
syarat: -Tau Semua Komponen dan Properties komponen -Ketekunan -Kopi susu (wkwkw..) - Dan pastinya tau apa itu visual basic6 ?
-Buat 5 buah timer (jangan ubah nama Timer trsbt): -1 buah textbox untuk kotak status (jangan di ganti namanya) *untuk intervalnya: timer1 = 1 timer2 = 1 timer3 = 1 timer4 =500 timer5 =500 *Edit Form menjadi seperti gambar diatas atau sesuai kreasi kalian *label name : F1: Sun Hacks = F1 F2 : No Delay = F2 F3: Money Hack = F3 F4: Unlimeted life Plant = F4 F5: Fast kill = F5
sekarang copy kan kode di bawah yang berwarna merah ke code project kalian
Private Const PROCESS_VM_WRITE = (&H20) 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 CloseHandle Lib "kernel32" (ByVal _ hObject 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 GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Private Const GWL_STYLE = (-16) Private Const WS_THICKFRAME = &H40000 Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ (ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _ (ByVal hwnd As Long, ByVal nIndex As Long) 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
Dim HwnDx As Long Dim pid As Long Dim OpenX As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Dim HackS As Long Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long Dim BaseAddr As String Private Function ReadMemory(Address As Long) As Long 'modul ini berfungsi untuk membaca value memory base address Dim OpenZ As Long, pid As Long 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& Sleep 15 'istirahat BaseAddr = ReadMemory CloseHandle OpenZ 'biar gak kebuka trus End Function Private Function WriteMMry(Addres As Long, Value As Long) If HwnDx = 0 Then MsgBox "Game Tidak Ditemukan!", vbCritical, "Error" Exit Function End If GetWindowThreadProcessId HwnDx, pid OpenX = OpenProcess(PROCESS_VM_WRITE, False, pid) If OpenX = 0 Then Exit Function HackS = WriteProcessMemory(OpenX, Addres, Value, 4, 0&) Sleep 15 'istirahat CloseHandle OpenX End Function
Private Sub Form_Load() 'salam dulu...hehehehe
MsgBox "Create By: Rizky Smp", vbInformation, "Cheat Plants Vs Zombies" MsgBox "Cheaters Never Dies", vbExclamation, "Warning!" MsgBox "wkwkwkwk", vbInformation, "Cheat Plants Vs Zombies" End Sub Private Sub Timer1_Timer() 'disable Resize Dim lStyle As Long lStyle = GetWindowLong(Me.hwnd, GWL_STYLE) lStyle = lStyle And Not WS_THICKFRAME Call SetWindowLong(Me.hwnd, GWL_STYLE, lStyle) End Sub
Private Sub Timer2_Timer() 'nah, ayo prosess hacking dimulai!! Dim AddrSun As String Dim addr As Long If GetAsyncKeyState(112) Then 'Hack Sun Call ReadMemory(&H1292AC) AddrSun = Hex(BaseAddr + &H5560) Call WriteMMry(("&h" & AddrSun), 9999999) Beep End If If GetAsyncKeyState(113) Then 'No Delay Call WriteMMry(&H48728C, 2377601) Beep End If If GetAsyncKeyState(114) Then 'Money ReadMemory &HCF8644 AddrSun = Hex(BaseAddr + &H28) Call WriteMMry(("&h" & AddrSun), 9999999) Beep End If If GetAsyncKeyState(115) Then 'Infinity health Call WriteMMry(&H52FCF0, &H90909090) '<<opcodes berbasis value wkwowkwkwo Beep End If If GetAsyncKeyState(116) Then 'fast kill neh wkwowkokw Call WriteMMry(&H53105E, 13667627) Call WriteMMry(&H53130F, &H90243C2B) Call WriteMMry(&H531053, 6949355) Call WriteMMry(&H530CA1, 14452361) Beep End If End Sub Private Sub Timer3_Timer() HwnDx = FindWindow("MainWindow", vbNullString) If HwnDx = 0 Then Text1.Text = "Cheat No Active" If HwnDx >= 1 Then Text1.Text = "Cheat Active" End Sub
Private Sub Timer4_Timer() 'hiasan boss F1.ForeColor = vbRed F2.ForeColor = vbRed F3.ForeColor = vbRed F4.ForeColor = vbRed F5.ForeColor = vbRed End Sub
Private Sub Timer5_Timer() 'hiasan juga boss F1.ForeColor = vbGreen F2.ForeColor = vbGreen F3.ForeColor = vbGreen F4.ForeColor = vbGreen F5.ForeColor = vbGreen End Sub _________________________________________________________________________________________
kalau sudah compile atau tekan F5 lalu jalankan game plantsvszombies untuk yang belom paham silahkan download aja projectnya Disini jika kalian ingin mengerti bagaimana kode2 tersebut dibuat pelajari di artikel saya pelajari disini NB: Source Code diatas asli buatan saya bukan buatan orang lain! jangan asal copy paste aja lho!