شرح شامل لل Trainer - نسخة قابلة للطباعة +- الفريق العربي للهندسة العكسية (https://www.at4re.net/f) +-- قسم : منتديات الهندسة العكسية - Reverse Engineering Forums (https://www.at4re.net/f/forum-4.html) +--- قسم : هاكات الألعاب - Cheat Games (https://www.at4re.net/f/forum-32.html) +--- الموضوع : شرح شامل لل Trainer (/thread-128.html) |
شرح شامل لل Trainer - dj-siba - 19-10-2018 المشاركة الأصلية كتبت بواسطة MouradPr في 21-07-2008 الساعة 10:35 PM: السلام عليكم ورحمة الله أولا أتقدم بالشكر للصديق العزيز GM فلولاه ماكنت عرفت هذا المجال... ثانيا : ندخل الى الشرح تعريف ال Trainer Trainer هو بريمج يقوم بالتعديل على برنامج ما في الذاكرة شأنه شأن اللودر Loader لكنه يستغل لتحسين مستوى اللعب وإستعمال خاصية الألعاب كاملة دون الحاجة للإنتظار الدوال المستعملة :
إسم الدالة : CreateProcess المكتبة : Kernel32 الوظيفة : هذه الدالة تقوم بتحمل ملف تنفيذي للذاكرة البارمترات : تحتاج هذه الدالة لعشر برمترات سأقوم بشرح ما نحتاج فقط بترتيبها LPCTSTR lpApplicationName, إسم التطبيق ومساره LPTSTR lpCommandLine, لا نحتاجه سنعطيه القيمة 0 LPSECURITY_ATTRIBUTES lpProcessAttributes, لن نحتاجه سنعطيه القيمة 0 LPSECURITY_ATTRIBUTES lpThreadAttributes, لن نحتاجه سنعطيه القيمة 0 BOOL bInheritHandles, لن نحتاجه سنعطيه القيمة 0 DWORD dwCreationFlags , كنا نحتاجه في كتابة اللودر لكن هذه المرة لن نحتاجه لأننا لن نحتاج لإيقاف البرنامج أو إتمامه Suspend & Resume LPVOID lpEnvironment, لن نحتاجه سنعطيه القيمة 0 LPCTSTR lpCurrentDirectory, لن نحتاجه سنعطيه القيمة 0 LPSTARTUPINFO lpStartupInfo, لا أدري كيف أشرحها لكنه عبارة عن متغير يشمل الحزمة STARTUPINFO ويحمل معلومات البرنامج بنيتها كالتالي : LPPROCESS_INFORMATION lpProcessInformation , سنقوم يتعريف متغير يشملالحزمة PROCESS_INFORMATION وهي حزمة تحمل معلومة التحميل في الذاكرة بنيتها كالتالي : إسم الدالة : ReadProcessMemoryالمكتبة : Kernel32 الوظيفة : هذه الدالة تقوم بقراءة بيانات من عنوان معين البارمترات : تحتاج لخمس برمترات HANDLE hProcess, مقبض الملف في الذاكرة ويتم الحصول عليه بالدالة CreateProcess وهو ضمن الحزمة PROCESS_INFORMATION LPCVOID lpBaseAddress, العنوان الذي نريد قراءة المعلومات عنده وهو نفسه VA = RVA + ImageBase LPVOID lpBuffer, المتغير الذي سنحفظ فيه المعلومات التي ستقرأها DWORD nSize, عدد البايتات التي نود قراءتها LPDWORD lpNumberOfBytesRead , لن نحتاجه ستعطيه القيمة 0 إسم الدالة : WriteProcessMemory المكتبة : Kernel32 الوظيفة : هذه الدالة بكتابة البيانات في عنوان معين البارمترات : تحتاج لخمس برمترات HANDLE hProcess, مقبض الملف في الذاكرة ويتم الحصول عليه بالدالة CreateProcess وهو ضمن الحزمة PROCESS_INFORMATION LPCVOID lpBaseAddress, العنوان الذي نريد قراءة المعلومات عنده وهو نفسه VA = RVA + ImageBase LPVOID lpBuffer, البيانات التي سنقوم بكتابتها في العنوان VA DWORD nSize, حجم الباياتات LPDWORD lpNumberOfBytesWritten , لن نحتاجه سنعطيه القيمة 0 إسم الدالة : CreateThread المكتبة : Kernel32 الوظيفة : هذه الدالة تقوم بتنفيذ مقطع كود مستقل على البرنامج البارمترات : تحتاج لستة 6 برمترات LPSECURITY_ATTRIBUTES lpThreadAttributes , لن نحتاجه سنعطيه القيمة 0 DWORD dwStackSize, لن نحتاجه أيضا سنعطيه القيمة 0 LPTHREAD_START_ROUTINE lpStartAddress, العنوان الذي يشمل الكود المراد تنفيذه في إستقلال عن البرنامج LPVOID lpParameter, سنحتاجه فيما بعد وسأقوم بتعريفه في وقته DWORD dwCreationFlags, لن نحاجه ستعطيه قيمة 0 LPDWORD lpThreadId , المتغير الذي سيحفظ مقبض الthread إسم الدالة : Sleep المكتبة : Kernel32 الوظيفة : هذه الدالة تقوم بإيقاف تقدم البرنامج للمدة التي تريدها البارمترات : تحتاج لبرامتر واحد DWORD dwMilliseconds , مدة التوقف وهي وتحسب بالجزء من الألف للثانية إسم الدالة : ExitProcess المكتبة : Kernel32 الوظيفة : هذه الدالة تقوم بإيقاف تقدم البرنامج للمدة التي تريدها البارمترات : تحتاج لبرامتر واحد UINT uExitCode , سنعطيه القيمة 0 الإستغلال: أولا أحب أن أقول لكم لدي لعبتين على جهازي GTA و He@vyWe@po التي قد إستعملها GM في درسه.. طريقة الحصول على العناوين : لن أشرحها لأنها أسهل شيء كما يمكنك مراجعة درس GM في ذلك بعض العناوين المقتنصة من البرنامج : نقط الحياة وعددها 3 عند العنوان : 0056BB04 النقط المحصل عليها تنطلق من الصفر عند العنوان : 0056BAFC الدفاع كحد أقصى 3 عند العنوان : 0056BB20 النووي ينطلق من الصفر عند العنوان : 0056BB08 الصواريخ : 0056BB24 ROKETS : 0056BB2C FLAK CANNON : 0056BB30 LAZER : 0056BB28 THUND : 0056BB34 وأخيرا الكود : طريقة الإستغلال الأولى: الكود بالأسمبلي: لا تحتاج لشر كما أنه سبق شرحها في الكتاب وفي دورة تعلم الأسمبلي تضمين المكتبات لإستعمال الدوال المشروحة أعلاه الإجرائية التي سنقوم بعمل Thread لها [ إسم التطبيق أو مساره إن كنت تريد تشغيل Trainer من أي مكان تريدProcessInfo PROCESS_INFORMATION<>
المتغير الذي يشمل معومات التحميل للذاكرة نحتاجه لأجل دالة CreateProcessSTARTUPInfo STARTUPINFO<>
شأنه شأن السابق وتم شرحه من قبلLIVE db 99,0
نقط الحياة وقد قمت برفعها لأقصى حد يمكن أن تضيف h الى جانب 99 لرفعMAXED db 3,0
متغير يحمل القيمة القيمة 3 وهي أقصى قيمة للدفاع والصواريخ و البرق و اللايزر و.. NUC db 99,0
متغير النووي لا تقلق فلن ينتهي أبدا ولو أن القيمة 99 فقط في السطر الأول قمت بإستدعاء الدالة الدالةCreateProcess لتحميل الملف للذاكرة بالبرمترات المشروحة في الأعلىالسطر الثاني : قمت بتوقيف البرنامج لمدة 12 ثانية حتى تحمل اللعبة وتنطلق في اللع ثم.. السطر الثالث : قمت بإنشاء Thread للإجرائية function السطر الأول في الإجرائية function : وهو الكتابة في الذاكرة عند العنوان 0056BB04h عدد نقط الحياة نفس الشي بالنسبة للسطر الثاني و الثالث و الراع و و الى السطر الثامن أما السطر التاسع : cmp eax,0 فهو فقط للتأكد أن انه قد تم كتابة الباينات وإلا فإن البرنامج غير موجود السطر العاشر : jz exitTrainer الإن تقال لexitTrainer إن لم يتم كتابة البيانات السطر الحادي عشر : قمت بتوقيف البرنامج لكي لا ينق الجهاز والسبب سأذكره السطر الثاني عشر : jmp LoopInfini فالإجرائية function عبارة عن حلقة لا نهائية لكي لا تنتهي أبدا الأسلحة ونقط الحياة السطر الثالث عشر : بدون تعليق السطر الرابع عشر : invoke ExitProcess,0 الخروج من البرنامج وليس اللعبة إن لم يتم كتابة البيانات عند العناوين المذكورة =================================================================== الدرس غير منسق أرجوا من أحد أعضاء الإدارة تنسقه وشكرا له مسبقا ... ال Trainer في المرفقات : أرجوا تجربته والإستمتاع سأقوم غذا بتتمة الدرس وسأضيف الكود ب C و Delphi مع الشرح بإذن الله لقد تعبت في كتابة الدرس لذلك أرجوا ألا تبخلوا بدعاء صالح في ظهر الغيب وليس في الموضوع :*****: RE: شرح شامل لل Trainer - x-member - 19-12-2018 تم التنسيق حسب رغبة الاخ مراد |