1. Gaya aksi, apa yang disebut gaya aksi mengacu pada menggunakan API untuk mengirim perintah ke Windows atau API untuk mengontrol mouse, keyboard, dll., Sehingga karakter dalam permainan dapat dipindahkan atau diserang. Plug-in "Stone". (Plug-in semacam ini benar-benar sampah, TMD, siapa pun yang tahu sedikit API tahu apa yang harus dilakukan, tetapi plug-in ini juga merupakan hal yang baik entry-level. Meskipun tidak dapat meningkatkan efektivitas tempur Anda, itu bisa Tingkatkan moral Anda ^_ ^)
2. Gaya modifikasi lokal. -Dalam "留" Kesulitan menulis metode ini adalah menemukan kode alamat. (Plug-in semacam ini sedikit lebih sulit daripada yang sebelumnya, tetapi juga sulit untuk menggunakan plug-in ini ~~ plug-in ini dapat dengan cepat meningkatkan pemahaman dan penerapan alamat memori Anda. Anda baik hal -hal untuk meningkatkan teknologi pemrograman)
3. Gaya Trojan. untuk membicarakannya ~~). ke alamat email yang ditentukan. (Saya telah menulis sesuatu seperti ini sebelumnya, tetapi saya belum pernah menggunakannya. Saya tahu bahwa hal ini sangat tidak bermoral, jadi jangan gunakan di masa depan! ~~)
4. Jenis akselerasi, plug-in ini dapat mempercepat permainan ... (Maaf, saya belum benar-benar melakukan hal semacam ini, jadi saya tidak bisa mengomentari diri saya sendiri, saya malu ~~)
5. Gaya paket, plug-in ini adalah plug-in difikfik tinggi dan membutuhkan keterampilan pemrograman yang kuat untuk ditulis. Prinsipnya adalah untuk mencegat paket terlebih dahulu, memodifikasinya, dan kemudian meneruskannya (Kao, mudah untuk mengatakan, Anda dapat mencobanya ~~~~). Plug-in ini cocok untuk sebagian besar game online.
Di antara plug-in ini, tiga yang pertama dapat dengan mudah diimplementasikan menggunakan bahasa seperti VB dan Deleps, sedangkan dua yang terakhir harus dengan mudah diimplementasikan menggunakan alat pemrograman seperti VC. (PH, tolong dengarkan kerusakan berikutnya)
(Saya seorang penggemar program dan bukan plug-in profesional, jadi mohon maafkan saya jika ada artikel yang tidak pantas. Di artikel mendatang, saya akan melakukan proses penulisan aksi, modifikasi lokal, trojan, dan gaya paket. Penjelasan terperinci )
Terakhir kali kami menganalisis plug-in aksi.
Sejauh yang saya tahu, aplikasi paling khas dari plug-in lokal yang dimodifikasi adalah dalam permainan "elf", karena saya hampir setahun yang lalu ("peri" masih dalam tahap pengujian), dan banyak kolega di perusahaan saya Dimainkan "Elf" jadi saya melihat metode pemrosesan data permainan dan menemukan bahwa informasi yang dikirim ke server ada dalam memori (perasaan pertama saya setelah membacanya adalah: tidak ada banyak perbedaan antara memodifikasi permainan semacam ini dan memodifikasi Dengan kata lain yang berdiri sendiri. Alamat sesuai dengan ide saya dan membiarkan sistem mengirimkannya secara otomatis, dan itu memang berhasil. Bicara omong kosong di sini ~~~~, ok, mari kita lihat bagaimana jenis plug-in ini terbuat dari:
Sebelum melakukan plug-in, kita perlu memiliki pemahaman khusus tentang memori Windows. Sama. Memahami beberapa Windows API, OK, dan ikuti contoh untuk membiarkan kami melihat dengan jelas produksi plug-in dan aplikasi API ini (untuk memastikan operasi normal game online, saya tidak akan menjelaskan secara rinci metode penemuan alamat memori):
1. Pertama -tama, kita perlu menggunakan FindWindow untuk mengetahui pegangan jendela permainan, karena kita perlu mengetahui ID proses setelah permainan berjalan.
Hwnd findwindow (
Lpctstr lpclassname, // pointer ke nama kelas
Lpctstr lpwindowname // pointer ke nama jendela
);
2. Kami GetWindowThreadProcessId untuk mendapatkan ID proses dari proses yang sesuai dari jendela Game.
Dword GetWindowThreadProcessId (
Hwnd hwnd, // pegangan jendela
LPDWORD LPDWPROCESSID // Alamat variabel untuk pengidentifikasi proses
);
3. Setelah mendapatkan ID Proses Game, hal berikutnya adalah membuka proses dengan izin tertinggi.
Menangani OpenProcess (
Dword DwdesiredAccess, // Bendera Akses
Bool binherithandle, // menangani bendera warisan
DWORD DWPROCESSID // Pengidentifikasi proses
);
Di mana DwdesiredAccess adalah tempat di mana metode akses ditetapkan, ia dapat mengatur banyak izin.
4. Setelah membuka proses, kita dapat menggunakan fungsi untuk beroperasi dalam memori. , mari kita lihat penggunaan writeProcessMemory:
Bool writeProcessMemory (
Menangani hProcess, // menangani untuk memproses yang ingatannya ditulis
Lpvoid lpbaseaddress, // alamat untuk mulai menulis ke
Lpvoid lpbuffer, // pointer ke buffer untuk menulis data ke
Dword nsize, // jumlah byte untuk ditulis
Lpdword lpnumberofbyteswritten // jumlah byte aktual yang ditulis
);
5. Berikut ini adalah untuk menutup pegangan proses dengan Closehandle dan selesai.
Ini adalah metode menerapkan program plug-in game ini. dari XX Games Mari kita pelajari kode sesuai dengan metode di atas:
const
ResourceOffset: DWORD = $ 004219f4;
Sumber Daya: DWORD = 3113226621;
ResourceOffset1: DWORD = $ 004219f8;
Sumber Daya1: DWORD = 1940000000;
ResourceOffset2: DWORD = $ 0043FA50;
sumber daya2: dword = 1280185;
ResourceOffset3: DWORD = $ 0043FA54;
Sumber Daya3: DWORD = 3163064576;
ResourceOffset4: DWORD = $ 0043FA58;
sumber daya4: DWORD = 2298478592;
var
HW: hwnd;
PID: DWORD;
H: Thandle;
TT: Kardinal;
Mulai
hw: = findWindow ('' xx '', nil);
Jika hw = 0 lalu
KELUAR;
GetWindowThreadProcessId (HW, @PID);
h: = OpenProcess (Proses_ALL_ACCESS, FALSE, PID);
Jika h = 0 lalu
KELUAR;
Jika flatcheckbox1.Checked = true maka
Mulai
WriteProcessMemory (H, Pointer (ResourceOffset), @Resource, sizeof (Resource), TT);
WriteProcessMemory (H, Pointer (ResourceOffset1), @Resource1, sizeof (Resource1), TT);
akhir;
Jika flatcheckbox2.Checked = true maka
Mulai
WriteProcessMemory (H, pointer (ResourceOffset2), @Resource2, sizeof (Resource2), TT);
WriteProcessMemory (H, pointer (ResourceOffset3), @Resource3, sizeof (Resource3), TT);
WriteProcessMemory (H, pointer (ResourceOffset4), @Resource4, sizeof (Resource4), TT);
akhir;
MessageBeep (0);
CloseHandle (h);
menutup;
Game ini menggunakan beberapa alamat untuk memverifikasi data yang akan dikirimkan, sehingga tidak sulit untuk membuat plug-in dari jenis game ini, dan yang paling sulit adalah menemukan alamat ini.
(Anda telah melihat metodenya dengan jelas, dan praktik spesifik tergantung pada semua orang. Haha ~~~~~~, tapi jangan terlalu senang terlalu dini. Game online semacam ini menyumbang minoritas, jadi saya akan menggunakan yang lain Jenis plug-in di artikel mendatang.
Terakhir kali saya membuat ringkasan umum dari lima jenis plug-in
Pertama-tama, mari kita bicara tentang plug-in gaya aksi, yang juga merupakan yang termudah yang saya lakukan ketika saya pertama kali menulis plug-in.
Saya ingat ketika saya masih berada di era "batu", saya melihat orang lain memiliki perangkat lunak (plug-in) dan orang-orang bisa berkeliaran (saya tidak tahu apa yang sedang terjadi plug-in pada waktu itu^_^ ) Jadi saya menemukan perangkat lunak semacam ini datang ke sini untuk belajar (saya mendengar orang lain menyebutnya plug-in setelah saya mengambilnya), dan menemukan bahwa hal semacam ini tidak sulit untuk diimplementasikan. Daripada mengklik mouse di tempat yang berbeda.
1. Pertama -tama, kita perlu mengetahui posisi mouse saat ini (untuk mengembalikan posisi mouse saat ini) sehingga kita perlu menggunakan fungsi API getCursorpos, yang digunakan sebagai berikut:
Bool getCursorpos (
Lppoint lppoint // alamat struktur untuk posisi kursor
);
2. Ketika kita memindahkan posisi mouse ke tempat di mana karakter akan, kita perlu menggunakan fungsi setCursorpos untuk memindahkan posisi mouse.
Setcursorpos bool (
int x, // posisi horizontal
int y // posisi vertikal
);
3. Simulasi mouse untuk menekan dan melepaskan aksi.
Void mouse_event (
DWORD DWFLAGS, // Bendera Menentukan berbagai varian gerak/klik
DWORD DX, // Posisi mouse horizontal atau perubahan posisi
DWORD DY, // Posisi tikus vertikal atau perubahan posisi
Dword Dwdata, // Jumlah gerakan roda
DWORD DWEXTRAINFO // 32 bit informasi yang ditentukan aplikasi
);
Di DWFLAGS -nya, ada banyak acara yang tersedia seperti MOUSEEVENTF_MOVE, tekan mouseEventF_LEFTDOWN dengan tombol kiri, rilis MouseEventf_Leftup dengan tombol kiri.
Oke, dengan pengetahuan sebelumnya, kita dapat melihat bagaimana penghapusan karakter diimplementasikan:
getCursorpos (point);
setCursorpos (ranpoint (80, windowx), ranpoint (80, windowy)); // ranpoint adalah fungsi koordinat acak buatan sendiri
mouse_event (mouseEventF_LeftDown, 0,0,0,0);
mouse_event (mouseEventF_Leftup, 0,0,0,0);
setCursorpos (point.x, point.y);
Setelah membaca kode di atas, apakah menurut Anda pengembaraan karakternya sangat sederhana? ~, Saya dapat menggambar satu dan meniru tiga, dan ada banyak hal baik yang dapat diimplementasikan menggunakan teknik ini (saya telah mengatakan sejak lama, TMD, ini adalah metode plug-in sampah, percayalah ~~~), selanjutnya, mari kita lihat metode serangan otomatis dalam permainan (harus mendukung kunci pintasan untuk serangan dalam permainan). API yang digunakan berbeda ~~~~, kali ini yang ingin kami gunakan adalah fungsi KEYBD_EVENT, yang digunakan sebagai berikut:
Void keybd_event (
Byte bvk, // kode virtual-key
Byte bscan, // kode pemindaian perangkat keras
DWORD DWFLAGS, // Bendera Menentukan berbagai opsi fungsi
DWORD DWEXTRAINFO // Data tambahan yang terkait dengan keystroke
);
Kita juga perlu tahu bahwa kode pemindaian tidak dapat digunakan secara langsung.
Uint MapvirtualKey (
Uint ucode, // kode virtual-key atau kode pemindaian
Uint Umaptype // terjemahan untuk melakukan
);
Oke, katakanlah kunci koneksi cepat ini adalah Ctrl+a.
keybd_event (vk_control, mapvirtualKey (vk_control, 0), 0,0);
keybd_event (65, MapVirtualKey (65,0), 0,0);
KEYBD_EVENT (65, MapVirtualKey (65,0), KEYEVENTF_KEYUP, 0);
keybd_event (vk_control, mapvirtualKey (vk_control, 0), keyeventf_keyup, 0);
Pertama, tekan tombol CTRL dalam simulasi, lalu tekan tombol A, lalu lepaskan tombol A, dan akhirnya lepaskan tombol CTRL.
(Melihat di sini, saya hampir mendapatkan pemahaman tertentu tentang plug-in sederhana ~~~~ mari kita coba? Jika Anda bisa mendapatkan sesuatu yang lebih baik jika Anda menggambar satu atau tiga, itu tergantung pada kemampuan Anda untuk memahaminya. ~~, tetapi Jangan senang terlalu dini.