1. نمط الإجراء ، يشير نمط الإجراء المزعوم إلى استخدام واجهة برمجة التطبيقات لإرسال الأوامر إلى Windows أو APIs للتحكم في الماوس ، ولوحة المفاتيح ، وما إلى ذلك ، بحيث يمكن نقل الشخصيات في اللعبة. "الحجر" المكون الإضافي. (هذا النوع من المكونات الإضافية هو القمامة بالكامل ، TMD ، أي شخص يعرف القليل من واجهة برمجة التطبيقات يعرف ما يجب القيام به ، ولكن هذا المكون الإضافي هو أيضًا شيء جيد للمبتدئين. على الرغم من أنه لا يمكنه تحسين فعاليتك القتالية ، إلا أنه يمكن تحسين معنوياتك ^_ ^)
2. نمط التعديل المحلي. -في "留" صعوبة كتابة هذه الأسلوب هي العثور على رموز العناوين. (هذا النوع من المكونات الإضافية أكثر صعوبة قليلاً من السابق ، ولكن من الصعب أيضًا استخدام هذا المكون الإضافي ~~ يمكن أن يحسن هذا المكون الإضافي فهمك وتطبيق عناوين الذاكرة بسرعة. أشياء لتحسين تكنولوجيا البرمجة)
3. طراز طروادة. للحديث عن ذلك ~~). إلى عنوان البريد الإلكتروني المحدد. (لقد كتبت شيئًا كهذا من قبل ، لكنني لم أستخدمه أبدًا. أعرف أن هذا الشيء غير أخلاقي للغاية ، لذلك لا تستخدمه في المستقبل! ~~)
4. نوع التسارع ، يمكن لهذا المكون الإضافي تسريع اللعبة ... (أنا آسف ، لم أفعل هذا النوع من الأشياء بالفعل ، لذلك لا يمكنني التعليق على نفسي ، أشعر بالخجل ~~)
5. على غرار الحزمة ، هذا المكون الإضافي هو مكون إضافي عالي الدقة ويتطلب كتابة مهارات برمجة قوية. مبدأها هو اعتراض الحزمة أولاً ، وتعديلها ، ثم إعادة توجيهها (Kao ، من السهل القول ، يمكنك تجربتها ~~~~). هذا المكون الإضافي مناسب لمعظم الألعاب عبر الإنترنت.
من بين هذه المكونات الإضافية ، يمكن تنفيذ الثلاثة الأولى بسهولة باستخدام لغات مثل VB و DELEPs ، في حين يجب تنفيذ الأخيرين بسهولة باستخدام أدوات البرمجة مثل VC. (PH ، يرجى الاستماع إلى الانهيار التالي)
(أنا متحمس للبرنامج وليس مكونًا مكونًا محترفًا ، لذا يرجى تسامحني إذا كان هناك أي مقالة غير لائقة. في المقالات المستقبلية ، سأقوم بعملية الكتابة ، والتعديل المحلي ، و Trojan ، و Packet على غرار. )
آخر مرة قمنا بتحليل المكون الإضافي الإضافي.
على حد علمي ، فإن التطبيق الأكثر نموذجية للمكونات الإضافية المحلية المعدلة هو في لعبة "ELF" ، لأنني كنت منذ ما يقرب من عام (لا يزال "Elf" في مرحلة الاختبار) ، والعديد من الزملاء في شركتي لعبت "ELF" ، لذا نظرت إلى طريقة معالجة البيانات للعبة ووجدت أن المعلومات التي أرسلتها إلى الخادم موجودة في الذاكرة (شعوري الأول بعد قراءته هو: لا يوجد فرق كبير بين تعديل هذا النوع من اللعبة والتعديل وبعبارة أخرى ، فإنه يكفي أن يكون عنوان الذاكرة ، وهو ما يكفي من ذلك ، لقد عثرت على عنوان الذاكرة. وفقًا لفكرتي ودع النظام يقدمها تلقائيًا ، وكان ناجحًا بالفعل. تحدث هراء هنا ~~~~ ، حسنًا ، دعنا نلقي نظرة على كيفية صنع هذا النوع من المكونات الإضافية من:
قبل القيام بالمكون الإضافي ، نحتاج إلى فهم محدد لذاكرة Windows. نفس الشيء. عناوين الذاكرة):
1. وقبل كل شيء ، نحتاج إلى استخدام FindWindow لمعرفة مقبض نافذة اللعبة ، لأننا نحتاج إلى معرفة معرف العملية بعد تشغيل اللعبة.
hwnd findwindow (
LPCTSTR LPCLASSNAME ، // مؤشر إلى اسم الفصل
lpctstr lpwindowname // مؤشر إلى اسم النافذة
) ؛
2. نقوم بتشغيل معرف العملية للعملية المقابلة لنافذة اللعبة.
Dword getWindowThreadProcessid (
hwnd hwnd ، // مقبض النافذة
LPDWORD LPDWPROCESSID // عنوان المتغير لمعرف العملية
) ؛
3. بعد الحصول على معرف عملية اللعبة ، فإن الشيء التالي هو فتح العملية بأعلى أذونات.
التعامل مع OpenProcess (
dword dwDesirecAccess ، // علامة الوصول
Bool binherithandle ، // تعامل مع علم الميراث
DWORD DWPROCESSID // معرف العملية
) ؛
حيث يتم تعيين أساليب الوصول التي يمكن أن تضعها في مجال ACCED ، حيث يمكننا استخدام عملية الوصول إلى العملية.
4. بعد فتح العملية ، يمكننا استخدام وظائف للعمل في الذاكرة. ، دعونا نلقي نظرة على استخدام WriteProcessMemory:
Bool WriteProcessMemory (
معالجة HPROCESS ، // التعامل مع المعالجة التي تتم كتابة ذاكرتها إلى
LPVoid LPBASeaddress ، // العنوان لبدء الكتابة إلى
lpvoid lpbuffer ، // مؤشر إلى المخزن المؤقت لكتابة البيانات إلى
dword nsize ، // عدد البايتات للكتابة
lpdword lpnumberofbyteswritten // العدد الفعلي للبايت المكتوبة
) ؛
5. ما يلي هو إغلاق مقبض العملية باستخدام CloseHandle ويتم الانتهاء منه.
هذه هي طريقة تنفيذ هذا النوع من المكونات الإضافية. من ألعاب XX ، دعنا ندرس الكود وفقًا للطريقة أعلاه:
كونست
ResourceOffset: dword = $ 004219f4 ؛
المورد: Dword = 3113226621 ؛
ResourceOffSet1: dword = $ 004219F8 ؛
Resource1: Dword = 1940000000 ؛
ResourceOffSet2: dword = $ 0043FA50 ؛
Resource2: Dword = 1280185 ؛
ResourceOffSet3: dword = $ 0043FA54 ؛
Resource3: Dword = 3163064576 ؛
ResourceOffSet4: dword = $ 0043FA58 ؛
Resource4: Dword = 2298478592 ؛
var
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 = صحيح ثم
يبدأ
WriteProcessMemory (H ، Pointer (ResourceOffset) ، resource ، sizeof (Resource) ، tt) ؛
WriteProcessMemory (H ، Pointer (ResourceOffSet1) ، @Resource1 ، sizeof (Resource1) ، TT) ؛
نهاية؛
إذا flatcheckbox2.cheched = 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) ؛
CloseHandle (H) ؛
يغلق؛
تستخدم هذه اللعبة عناوين متعددة للتحقق من البيانات المراد إرسالها ، لذلك ليس من الصعب إنشاء مكونات إضافية لهذا النوع من الألعاب ، وأصعب شيء هو العثور على هذه العناوين.
(لقد رأيت بالفعل الطريقة بوضوح ، والممارسة المحددة تعتمد على الجميع. هاها ~~~~~~~ ، لكن لا تكون سعيدًا جدًا في وقت مبكر جدًا. بالمناسبة ، يرجى نشرها وتشجيعني ، وإلا
آخر مرة قمت بها في ملخص عام للمكونات الإضافية
بادئ ذي بدء ، دعنا نتحدث عن المكونات الإضافية على غرار الإجراء ، وهو أيضًا أسهل ما فعلته عندما كتبت المكونات الإضافية لأول مرة.
أتذكر عندما كنت لا أزال في عصر "الحجر" ، رأيت شخصًا آخر لديه برنامج (مكون إضافي) ويمكن للناس أن يتجولوا (لم أكن أعرف ما الذي كان يعمل في ذلك الوقت^_^ ) ، لقد وجدت هذا النوع من البرامج يأتي إلى هنا للدراسة (سمعت أن الآخرين يطلقون عليه اسمًا بعد أن أخذته) ، ووجدت أن هذا النوع من الأشياء ليس من الصعب تنفيذه. من النقر على الماوس في أماكن مختلفة.
1. أولاً وقبل كل شيء ، نحتاج إلى معرفة موضع الماوس الحالي (لاستعادة موضع الماوس الحالي) لذلك نحن بحاجة إلى استخدام وظيفة API getCursorpos ، والتي تستخدم على النحو التالي:
Bool getCursorpos (
lppoint lppoint // عنوان هيكل موقف المؤشر
) ؛
2. عندما ننقل موضع الماوس إلى المكان الذي ستذهب إليه الشخصية ، نحتاج إلى استخدام وظيفة setCursorpos لتحريك موضع الماوس.
Bool Setcursorpos (
int x ، // الموقف الأفقي
int y // الموقف الرأسي
) ؛
3.
void mouse_event (
DWORD DWFLAGS ، // أعلام تحدد متغيرات الحركة/النقر المختلفة
DWORD DX ، // وضع الماوس الأفقي أو تغيير الموقف
dword dy ، // موقف الماوس العمودي أو تغيير الموقف
dword dwdata ، // كمية حركة العجلات
dword dwextrainfo // 32 بت من المعلومات المحددة للتطبيق
) ؛
في DWFLAGS ، هناك العديد من الأحداث المتاحة مثل نقل mouseeventf_move ، اضغط على mouseeventf_leftdown مع الزر الأيسر ، حرر mouseeventf_leftup مع الزر الأيسر.
حسنًا ، مع المعرفة السابقة ، يمكننا أن نرى كيف يتم تنفيذ إزالة الشخصية:
getCursorpos (نقطة) ؛
SetCursorpos (Ranpoint (80 ، WindowX) ، Ranpoint (80 ، Windowy)) ؛ // RANPOIN
mouse_event (mouseeventf_leftdown ، 0،0،0،0) ؛
mouse_event (mouseeventf_leftup ، 0،0،0،0) ؛
setCursorpos (point.x ، point.y) ؛
بعد قراءة الكود أعلاه ، هل تعتقد أن تجول الشخصيات بسيط للغاية؟ هي طريقة الإضافات القمامة ، صدقها ~~~) ، دعنا نلقي نظرة على طريقة الهجوم التلقائي في اللعبة (يجب أن تدعم مفاتيح الاختصار للهجمات في اللعبة). API المستخدم مختلف ~~~~ ، هذه المرة ما نريد استخدامه هو وظيفة keybd_event ، والتي يتم استخدامها على النحو التالي:
void keybd_event (
Byte BVK ، // Virtual-Key Code
بايت BSCAN ، // رمز مسح الأجهزة
DWORD DWFLAGS ، // أعلام تحدد خيارات الوظائف المختلفة
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 ، وأخيراً قم بإطلاق مفتاح CTRL.
(عند الرؤية هنا ، لدي ما يقرب من فهم معين للمكونات الإضافية البسيطة ~~~~ دعنا نجربه؟ إذا كنت تستطيع الحصول على شيء أفضل إذا قمت برسم واحد أو ثلاثة ، فإن ذلك يعتمد على قدرتك على فهمه. ~~ ، ولكن لا تكون سعيدًا جدًا.