1. รูปแบบการกระทำที่เรียกว่ารูปแบบการกระทำหมายถึงการใช้ API เพื่อส่งคำสั่งไปยัง Windows หรือ APIs เพื่อควบคุมเมาส์คีย์บอร์ด ฯลฯ เพื่อให้ตัวละครในเกมสามารถเคลื่อนย้ายหรือโจมตีได้ ปลั๊กอิน "Stone" (ปลั๊กอินชนิดนี้เป็นขยะอย่างสมบูรณ์ TMD ใครก็ตามที่รู้ API เล็กน้อยรู้ว่าต้องทำอะไร แต่ปลั๊กอินนี้ยังเป็นสิ่งที่ดีในระดับเริ่มต้นแม้ว่ามันจะไม่สามารถปรับปรุงประสิทธิภาพการต่อสู้ของคุณได้ แต่ก็สามารถทำได้ ปรับปรุงขวัญกำลังใจของคุณ ^_ ^)
2. รูปแบบการดัดแปลงท้องถิ่น -ใน "留" ความยากลำบากในการเขียนวิธีการคือการค้นหารหัสที่อยู่โดยทั่วไปคุณต้องใช้เครื่องมือของคนอื่นเพื่อค้นหาที่อยู่ (ปลั๊กอินชนิดนี้ยากกว่าเดิมเล็กน้อย แต่ก็ยากที่จะใช้ปลั๊กอินนี้ ~~ ปลั๊กอินนี้สามารถปรับปรุงความเข้าใจและการใช้ที่อยู่หน่วยความจำได้อย่างรวดเร็วคุณเป็นสิ่งที่ดี สิ่งที่จะปรับปรุงเทคโนโลยีการเขียนโปรแกรม)
3. สไตล์โทรจัน หากต้องการพูดคุยเกี่ยวกับเรื่องนี้ ~~) ไปยังที่อยู่อีเมลที่ระบุ (ฉันเคยเขียนอะไรแบบนี้มาก่อน แต่ฉันไม่เคยใช้มันฉันรู้ว่าสิ่งนี้ผิดศีลธรรมมากดังนั้นอย่าใช้มันในอนาคต! ~~)
4. ประเภทการเร่งความเร็วปลั๊กอินนี้สามารถเร่งเกมได้ ... (ฉันขอโทษฉันไม่ได้ทำสิ่งนี้จริง ๆ ดังนั้นฉันจึงไม่สามารถแสดงความคิดเห็นกับตัวเองได้ฉันรู้สึกละอายใจ ~~)
5. รูปแบบแพ็คเก็ตปลั๊กอินนี้เป็นปลั๊กอินที่มีความยากลำบากสูงและต้องการทักษะการเขียนโปรแกรมที่แข็งแกร่งที่จะเขียน หลักการของมันคือการสกัดกั้นแพ็คเก็ตก่อนแก้ไขแล้วส่งต่อ (kao มันง่ายที่จะพูดคุณสามารถลองได้ ~~~~) ปลั๊กอินนี้เหมาะสำหรับเกมออนไลน์ส่วนใหญ่
ในบรรดาปลั๊กอินเหล่านี้สามครั้งแรกสามารถนำไปใช้งานได้ง่ายโดยใช้ภาษาเช่น VB และ DELEPS ในขณะที่สองหลังจะต้องใช้งานได้ง่ายโดยใช้เครื่องมือการเขียนโปรแกรมเช่น VC (pH โปรดฟังรายละเอียดครั้งต่อไป)
(ฉันเป็นผู้ที่ชื่นชอบโปรแกรมและไม่ใช่ปลั๊กอินมืออาชีพดังนั้นโปรดยกโทษให้ฉันหากมีบทความที่ไม่เหมาะสมในบทความในอนาคตฉันจะทำกระบวนการเขียนของการกระทำการดัดแปลงท้องถิ่นโทรจันและแพ็คเก็ตสไตล์คำอธิบายโดยละเอียด )
ครั้งสุดท้ายที่เราวิเคราะห์ปลั๊กอินแอ็คชั่น
เท่าที่ฉันรู้แอปพลิเคชั่นทั่วไปของปลั๊กอินดัดแปลงในท้องถิ่นอยู่ในเกม "เอลฟ์" เพราะฉันเกือบปีที่แล้ว ("เอลฟ์" ยังอยู่ในขั้นตอนการทดสอบ) และเพื่อนร่วมงานหลายคนใน บริษัท ของฉัน เล่น "เอลฟ์" ดังนั้นฉันจึงดูวิธีการประมวลผลข้อมูลของเกมและพบว่าข้อมูลที่ส่งไปยังเซิร์ฟเวอร์มีอยู่ในหน่วยความจำ (ความรู้สึกแรกของฉันหลังจากอ่านคือ: ไม่มีความแตกต่างระหว่างการปรับเปลี่ยนเกมประเภทนี้และการแก้ไข เกมแบบสแตนด์อโลน ที่อยู่ตามความคิดของฉันและปล่อยให้ระบบส่งโดยอัตโนมัติและมันก็ประสบความสำเร็จอย่างแน่นอน พูดคุยเรื่องไร้สาระที่นี่ ~~~~ โอเคมาดูกันว่าปลั๊กอินประเภทนี้ทำมาจาก:
ก่อนที่จะทำปลั๊กอินเราต้องมีความเข้าใจเฉพาะเกี่ยวกับหน่วยความจำ Windows เดียวกัน ที่อยู่หน่วยความจำ):
1. ก่อนอื่นเราต้องใช้ Findwindow เพื่อทราบการจัดการของหน้าต่างเกมเพราะเราจำเป็นต้องรู้ ID ของกระบวนการหลังจากเกมกำลังทำงานอยู่
hwnd findwindow (
lpctstr lpclassname, // ตัวชี้ไปยังชื่อคลาส
lpctstr lpwindowname // ตัวชี้ไปยังชื่อหน้าต่าง
-
2. เราได้รับ WindowThreadProcessID เพื่อรับรหัสกระบวนการของกระบวนการที่สอดคล้องกันของหน้าต่างเกม
dword getwindowthreadprocessid (
hwnd hwnd, // ที่จับของหน้าต่าง
lpdword lpdwprocessid // ที่อยู่ของตัวแปรสำหรับตัวระบุกระบวนการ
-
3. หลังจากได้รับรหัสกระบวนการเกมสิ่งต่อไปคือการเปิดกระบวนการด้วยการอนุญาตสูงสุด
จัดการ OpenProcess (
dword dwdesiredaccess, // access flag
Bool Binherithandle, // จัดการธงมรดก
dword dwprocessid // ตัวระบุกระบวนการ
-
โดยที่ DWDesiredAccess เป็นสถานที่ที่มีการตั้งค่าวิธีการเข้าถึงมันสามารถตั้งค่าการอนุญาตมากมาย
4. หลังจากเปิดกระบวนการเราสามารถใช้ฟังก์ชั่นเพื่อทำงานในหน่วยความจำ มาดูการใช้งาน WriteProcessMemory:
bool writeprocessmemory (
จัดการ hprocess, // จัดการกับกระบวนการที่มีการเขียนหน่วยความจำ
lpvoid lpbaseaddress, // ที่อยู่เพื่อเริ่มเขียนถึง
lpvoid lpbuffer, // ตัวชี้เพื่อบัฟเฟอร์เพื่อเขียนข้อมูลไปยัง
dword nsize, // จำนวนไบต์ที่จะเขียน
lpdword lpnumberofbyteswritten // จำนวนจริงของไบต์ที่เขียน
-
5. ต่อไปนี้คือการปิดที่จับกระบวนการด้วย closehandle และเสร็จสิ้น
นี่คือวิธีการใช้งานโปรแกรมของเกมประเภทนี้ ของเกม xx มาศึกษารหัสตามวิธีการข้างต้น:
const
ResourceOffset: DWORD = $ 004219F4;
ทรัพยากร: DWORD = 3113226621;
ResourceOffset1: DWORD = $ 004219F8;
ทรัพยากร 1: DWORD = 1940000000;
ResourceOffset2: DWORD = $ 0043FA50;
Resource2: DWORD = 1280185;
ResourceOffset3: DWORD = $ 0043FA54;
ทรัพยากร 3: DWORD = 3163064576;
ResourceOffset4: DWORD = $ 0043FA58;
Resource4: DWORD = 2298478592;
วาจา
HW: HWND;
PID: DWORD;
H: Thandle;
TT: พระคาร์ดินัล;
เริ่ม
hw: = findwindow ('' xx '', nil);
ถ้า hw = 0 แล้ว
ออก;
getWindowThreadProcessID (HW, @PID);
H: = OpenProcess (process_all_access, false, pid);
ถ้า h = 0 แล้ว
ออก;
ถ้า flatcheckbox1.Checked = true แล้ว
เริ่ม
WriteProcessMemory (H, Pointer (ResourceOffset), @Resource, sizeof (ทรัพยากร), TT);
WriteProcessMemory (H, Pointer (ResourceOffset1), @Resource1, Sizeof (Resource1), TT);
จบ;
ถ้า flatcheckbox2.Checked = true แล้ว
เริ่ม
WriteProcessMemory (H, Pointer (ResourceOffSet2), @Resource2, Sizeof (Resource2), TT);
WriteProcessMemory (H, Pointer (ResourceOffset3), @Resource3, Sizeof (Resource3), TT);
WriteProcessMemory (H, Pointer (ResourceOffSet4), @Resource4, Sizeof (Resource4), TT);
จบ;
MessageBeep (0);
ภาพใกล้ชิด (H);
ปิด;
เกมนี้ใช้ที่อยู่หลายอย่างเพื่อตรวจสอบข้อมูลที่จะส่งดังนั้นจึงไม่ยากที่จะสร้างปลั๊กอินของเกมประเภทนี้และสิ่งที่ยากที่สุดคือการค้นหาที่อยู่เหล่านี้
(คุณได้เห็นวิธีการนี้อย่างชัดเจนแล้วและการปฏิบัติที่เฉพาะเจาะจงขึ้นอยู่กับทุกคนฮ่าฮ่า ~~~~~~~ นั้น แต่อย่ามีความสุขเร็วเกินไปเกมออนไลน์ประเภทนี้เป็นบัญชีสำหรับชนกลุ่มน้อย ประเภทของปลั๊กอินในบทความในอนาคต
ครั้งสุดท้ายที่ฉันทำข้อสรุปทั่วไปของปลั๊กอินห้าประเภท
ก่อนอื่นมาพูดถึงปลั๊กอินสไตล์แอ็คชั่นซึ่งเป็นสิ่งที่ง่ายที่สุดที่ฉันทำเมื่อฉันเขียนปลั๊กอินครั้งแรก
ฉันจำได้ว่าตอนที่ฉันยังอยู่ในยุค "หิน" ฉันเห็นคนอื่นมีซอฟต์แวร์ (ปลั๊กอิน) และผู้คนสามารถเดินไปรอบ ๆ (ฉันไม่รู้ว่าปลั๊กอินกำลังเกิดขึ้นในเวลานั้น^_^ ) ดังนั้นฉันพบว่าซอฟต์แวร์ประเภทนี้มาที่นี่เพื่อศึกษา (ฉันได้ยินคนอื่น ๆ เรียกมันว่าปลั๊กอินหลังจากที่ฉันเอาไป) และพบว่าสิ่งนี้ไม่ยากที่จะนำไปใช้ มากกว่าการคลิกที่เมาส์ในสถานที่ต่าง ๆ
1. ก่อนอื่นเราจำเป็นต้องรู้ตำแหน่งเมาส์ปัจจุบัน (เพื่อกู้คืนตำแหน่งเมาส์ปัจจุบัน) ดังนั้นเราจำเป็นต้องใช้ฟังก์ชัน API GetCursorPos ซึ่งใช้ดังนี้:
bool getCursorpos (
lppoint lppoint // ที่อยู่ของโครงสร้างสำหรับตำแหน่งเคอร์เซอร์
-
2. เมื่อเราย้ายตำแหน่งเมาส์ไปยังสถานที่ที่ตัวละครกำลังจะไปเราจำเป็นต้องใช้ฟังก์ชัน SetCursorPos เพื่อย้ายตำแหน่งเมาส์
bool setcursorpos (
int x, // ตำแหน่งแนวนอน
int y // ตำแหน่งแนวตั้ง
-
3. จำลองเมาส์เพื่อกดและปล่อยการกระทำ
เป็นโมฆะ mouse_event (
dword dwflags, // flags ระบุตัวแปรการเคลื่อนไหว/คลิกต่างๆ
DWORD DX, // ตำแหน่งเมาส์แนวนอนหรือการเปลี่ยนตำแหน่ง
dword dy, // ตำแหน่งเมาส์แนวตั้งหรือเปลี่ยนตำแหน่ง
dword dwdata, // จำนวนการเคลื่อนไหวของล้อ
dword dwextrainfo // 32 บิตของข้อมูลที่กำหนดแอปพลิเคชัน
-
ใน DWFLAGS มีเหตุการณ์มากมายเช่นการย้าย MouseVentF_Move กด MouseEventF_Leftdown ด้วยปุ่มซ้ายปล่อย MouseEventF_Leftup ด้วยปุ่มซ้าย
โอเคด้วยความรู้ก่อนหน้านี้เราจะเห็นว่าการถอดอักขระถูกนำไปใช้อย่างไร:
getCursorpos (จุด);
SetCursorPos (RanPoint (80, WindowX), ranpoint (80, windowey)); // ranpoint เป็นฟังก์ชั่นพิกัดแบบโฮมเมดแบบโฮมเมด
mouse_event (MouseEventf_leftdown, 0,0,0,0);
mouse_event (MouseEventf_leftup, 0,0,0,0);
SetCursorPos (point.x, point.y);
หลังจากอ่านรหัสด้านบนคุณคิดว่าการหลงทางของตัวละครนั้นง่ายมากหรือไม่ ~ ฉันสามารถวาดหนึ่งและเลียนแบบสามและมีสิ่งดีๆมากมายที่สามารถนำไปใช้โดยใช้เทคนิคนี้ (ฉันได้พูดไปนานแล้ว TMD นี่ เป็นวิธีการปลั๊กอินขยะเชื่อว่า ~~~) ถัดไปลองดูที่วิธีการโจมตีอัตโนมัติในเกม (ต้องรองรับคีย์ทางลัดสำหรับการโจมตีในเกม) API ที่ใช้แตกต่างกัน ~~~~ คราวนี้สิ่งที่เราต้องการใช้คือฟังก์ชัน keybd_event ซึ่งใช้ดังนี้:
เป็นโมฆะ keybd_event (
byte bvk, // รหัสเสมือนจริง
Byte Bscan, // รหัสสแกนฮาร์ดแวร์
dword dwflags, // flags ระบุตัวเลือกฟังก์ชั่นต่างๆ
dword dwextrainfo // ข้อมูลเพิ่มเติมที่เกี่ยวข้องกับการกดแป้นพิมพ์
-
เราจำเป็นต้องรู้ว่ารหัสสแกนไม่สามารถใช้งานได้โดยตรง
uint mapvirtualkey (
UINT UCODE, // รหัสเสมือนจริงหรือรหัสสแกน
Uint umaptype // การแปลเพื่อดำเนินการ
-
โอเคสมมติว่าคีย์การเชื่อมต่ออย่างรวดเร็วนี้คือ 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);
ก่อนอื่นให้กดปุ่ม CTRL ในการจำลองจากนั้นกดปุ่ม A จากนั้นปล่อยคีย์ A และในที่สุดก็ปล่อยคีย์ CTRL
(เมื่อเห็นที่นี่ฉันเกือบจะมีความเข้าใจบางอย่างเกี่ยวกับปลั๊กอินง่าย ๆ ~~~~ ลองมาลองไหมถ้าคุณได้รับสิ่งที่ดีกว่าถ้าคุณวาดหนึ่งหรือสาม อย่ามีความสุขเร็วเกินไป