الموقع العربي الاول للعبة Silkroad Online

الموقع العربي الاول للعبة Silkroad Online (https://silkroad4arab.com/vb/index.php)
-   قسم شروحات لغات البرمجة و التطوير (https://silkroad4arab.com/vb/forumdisplay.php?f=407)
-   -   [++C] التعديل على البيانات المخزنه فى الذاكره و الـ Games hacking فى c++ (https://silkroad4arab.com/vb/showthread.php?t=576122)

iMido 12-01-2015 10:08 AM

التعديل على البيانات المخزنه فى الذاكره و الـ Games hacking فى c++
 
http://forum.tawwat.com/images-topic...s/bas/0080.gif

النهارده هنشرح مثال عن تعديل البيانات المخزنه ف الذاكره و ال games hacking بلغه c++

نظره عامه :

http://sl.glitter-graphics.net/pub/8...sqb8j0776b.png

معروف عن المتغيرات انها جزء من اى برنامج و لو عندك فكره عن البرمجه ب اى لغه من دول c#,java,delphi,c,c++ يبقى اكيد عارف المؤشرات او سمعت عنها على الاقل
كل متغير ليه عنوان فى الذاكره فى مثالنا النهارده هنشرح ازاى نوصل للعنوان ده و نعدل علي البيانات المتخزنه فيه

ببساطه هنعتبر ال memory address ده ظرف الجواب يعنى ملوش دعوه بمحتوى الجواب غير ان ورقه الجواب الى مكتوب فيها الكلام (البيانات الى هنعدلها) موجوده جواه

الكود :

http://sl.glitter-graphics.net/pub/8...sqb8j0776b.png

كود PHP:

/**
Written by : iMido
All rights reserved to silkroad4arab.com
**/
#include <iostream>
#include <windows.h> /**Done forget to include windows.h lib **/
using namespace std;

int main()
{
/*1*/   HWND hwnd FindWindow(NULL,"Calculator");
/*2*/   if (hwnd==0)
   {
/*3*/       cout<<"Cannot find the specified process.\n";
/*4*/       system("pause");
/*5*/       return ;
   }
/*6*/    cout<<"Enter the new value : ";
/*7*/    int data;
/*8*/   cin>>data;
/*9*/   DWORD pid;
/*10*/   GetWindowThreadProcessId(hwnd,&pid);
/*11*/   HANDLE hProc OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
/*12*/   if (!hProc)
   {
/*13*/       cout<<"Cannot open the process !\n";
/*14*/       system("pause");
/*15*/       return 0;
   }
/*16*/   DWORD dsize =sizeof(data);
/*17*/   if (WriteProcessMemory(hProc,(LPVOID)the memory adress,&data,dsize,NULL))
   {
/*18*/       cout<<"The new value has written successfully !\n";
/*19*/       system("pause");
   }
/*20*/   else
   {
/*21*/       cout<<"An error occur while trying to write the new value !\n";
/*22*/       system("pause");
   }
/*23*/    return 0;


شرح الكود :

http://sl.glitter-graphics.net/pub/8...sqb8j0776b.png

زى م انتو شايفين كل سطر ف الكود مرقم ب رقم و هنشرح السطر بواسطه الرقم بتاعه اختصارا للكتابه و كده '.'

1 : ده هاندل علشان نعرف البرنامج ايه هو البرنامج الى هيعدل بيانات عنوان ف الذاكره بتاعته و بياخد ال Task name ك بارميتر مش ال process name يعنى افتح التاسك مانيجر و هات تاب ابليكيشن و خد الاسم مش بروسيس البرنامج الى ب تاب بروسيسيز

من 2 لـ 5 : جمله شرطيه علشان نتحقق من ان البرنامج الى هنعدل عليه مفتوح ولا لا

6 : جمله طباعه

7 و 8 : متغير من النوع int (رقمى) علشان نخزن البيانات الجديده فيه و فى السطر 8 اسندناله القيمه الى اليوزر هيكتبها

9 : متغير من النوع DWORD لتخزين ID البرنامج الى هنشتغل عليه فيه
ال DWORD هو unsigned int يعنى مغير رقمى بس ب مدى اكبر شويتين


10 : لكل برنامج شغال و كل ثريد فيه ID خاص فيه ,, ف السطر ده جبنا ID برنامجنا و خزناه ف المتغير pid

11 : فتح البرنامج للتعديل فى هاندل جديد باسخدام ال ID بتاعه ,, من اول م جبنا ال ID و احنا بطلنا نستخدم اسم البرنامج نفسه و بنستخدم ال ID و من ساعت م عملنا الهاندل ده و فتحنا فيه البرنامج هنستخدمه هوا فيما بعد

من 12 لـ 15 : جمله شرطيه للتأكد من اتمام فتح الثريد بنجاح

16 : متغير DWORD لتخزين حجم البيانات الجديده فيه

17 : هنا بتتم عمليه الكتابه فى عنوان الذاكره الى احنا جبناه او لسه هنجيبه ,, هنحطه مكان كلمه the memory address

باقى 17 لـ 22 : جمله شرطيه للتأكده من نجاح الكتابه او فشلها

كيفيه الحصول على memory address :

http://sl.glitter-graphics.net/pub/8...sqb8j0776b.png

الحصول على ال ادريس بيتم ببرامج كتير اشهرها Cheat Engine ,, حمله من هنا

المثال الى هنشتغل عليه هو الاله الحاسبه حاليا

http://www4.0zz0.com/2015/01/12/09/214492777.jpg

هتعمل زى الى ف الصوره بعدين تروح ع الاله الحاسبه و تكتب اى رقم بعدين تدوس MS فى الاله
متقفلش الاله ابدا طول م انت شغال
بعدين تروح على شيت انجين تكتب نفس الرقم الى كتبته ف الاله فيه و تدوس فيرسيت سكان بعد كده سيب شيت انجين شغال و روح للاله و دوس MC و روح على شيت انجين هتلاقى قيمه من القيم الى ظهرتلك ف ال list view الى ف الشمال دى اتغيرت ,, خد الادريس بتاعها بس هتعدل عليه
الادرس هيجيلك من البرنامج بالشكل ده مثلا 00C145FD هتمسح ال00 الى ف الاول و تبدلهم ب 0x ,, بعد التعديل 0xC145FD

جرب البرنامج و هيشتغل بأذن الله يعنى :D

و بكده نكون خلصنا الشرح بس اكيد كله بيسأل ايه علاقه الى فوق ده ب ال games hacking ؟
بص , انا كنت ناوى اريح دماغى من الاجابه و اعمل مثال عملى على تعديل ال skill points فى سيلكرود بس اللعبه مش عندى

عموما نفس الخطوات بس الى هيختلف ف انك و انتا بتجيب الادريس هتضطر تغير قيمه السكيلز كتير
يعنى هتفتح اللعبه ب شيت انجين و تكتب رقم السكيلز الى معاك ف البرنامج و تدوس فيرست سكان و تغيره تانى بانك تفتح سكيل او تعمل دونيت للجيلد او اى حاجه و تكتب الرقم الجديد و تدوس نيكست سكان و هكذا لحد م يتبقى عندك ادريس واحد ف برنامج شيت انجين ,, هو ده الادريس
حطه ف برنامجك و شغل البرنامج و اكتب الرقم الى تحبه و هات الجيم و افتح اى سكيل او اعمل دونيت تانى هتلاقى السكيلز اتغيرت و الرقم الى انتا كتبته هوا بقى عدد البويتنس الى معاك
و تقدر تعمل كده ف اى لعبه عموما مش سيلكرود بس


اتمنى يكون الشرح سهل و بسيط و استوعبتوه و اى حاجه مش مفهومه انا جاهز لتوضيحها

دمتم بود , سلام

Midget1337 18-01-2015 12:55 AM

شكراً يا غالي :wavetowel2:

أحب أضيف ان مش كل حاجة تنفع بالطريقة دي ،،
أنا لما حاولت أطلع الـ id/pw من الميموري بتاعت sro_client بتاع سيلكرود ، كان level 2 pointer.اتعذبت شويتين عشان أطلعه P:

FirstOne 18-01-2015 01:01 AM

انا مجربتش بس مش سيلكرود ديه server sided??? :111 (19)::111 (19)::111 (19):


الساعة الآن 01:46 AM.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.