تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Reverse engineering conquer online[botting]
#1
السلام عليكم ورحمة الله و بركاته,

كما هو ظاهر فى عنوان الموضوع, فى الفتره الاخيره كنت أمارس ما تعلمته فى الهندسه العكسيه على لعبة قهر اونلاين النسخه الانجليزيه (Conquer Online) و هى بإختصار لمن لا يعرفها لعبه اونلاين متعدده اللاعبين MMORPG اعتدت ان العبها و انا صغير. و الخمد لله استطعت عمل بوت للنسخه الاصليه بلغه السى ++.
اللعبه ليس لها اى حمايات تقريبا عدا عن system calls بسيطه يمكن تفاديها بسهوله.
البوت يعمل ك وسيط فى الذاكره (In-memory proxy) لاتجنب الهندسه العكسيه للبروتوكول المستخدم. يعمل البوت بصوره اساسيه بعمل (Hook) لدوال اللعبه الاساسيه للتحكم فى اللاعب بالاضافه الى (Hook) على الداله المسؤله عن فك تشفير ال(Packets) المرسله من السيرفر لمراقبه حاله اللعبه التى بناء عليها يعمل البوت.
البوت بسيط للغايه - كما قلت كان للممارسه لا اكتر- لكنه يعمل بصوره جيده و يمكن التعديل عليه بسهوله.

*ملحوظه: انتهيت من البوت من 5 اشهر تقريبا و لم استخدمه بعد ذلك Smile و صدر عدة تحديثات للعبه غيرت عناوين الدوال و بالتالى يجب عمل بحث عن ال (Function signatures) من جديد و تعديلها فى البرنامج. كل ال (signatures) المطلوبه موجوده فى ملف  (Artifacts.cpp)

فى حالة واجهتك صعوبه فى بناء البرنامج او اردت السؤال عن اى شئ فلا تردد فى السؤال.


Source code in github
يَا أَيُّهَا الَّذِينَ آمَنُوا اصْبِرُوا وَصَابِرُوا وَرَابِطُوا وَاتَّقُوا اللَّهَ لَعَلَّكُمْ تُفْلِحُونَ
أعضاء أعجبوا بهذه المشاركة : EarthMan123 , the9am3 , vosiyons , rce3033 , Elmasry , tieto , R333T , mohamed24 , Romany99
#2
عاوز اي طريقة اتواصل بيها معاك لو ممكن

انا باستخدام cheat engine قدرت اوصل بعنوان الvip وعنوان الصيد التلقائي بس عندي مشكلة هي انا الحساب بياخد بان يوم ومش عارف ازاى اخلى البوت يفعل اسكل xp وهو صيد تلقائي لو تقدر تساعدنى اكون شاكر ليك
أعضاء أعجبوا بهذه المشاركة :
#3
إقتباس :الحساب بياخد بان يوم 

استخدم اى memory scanner تانى غير الشيت انجن لان اللعبه بتكتشفه و بتدى بان عليه. لو عايز تستخدمه بقى حاول تعدى الحمايه.
إقتباس :ومش عارف ازاى اخلى البوت يفعل اسكل xp وهو صيد تلقائي

مينفعش تستخدم ال xp مع ال auto hunt لازم تعمل باتش للعبه الاول.
يَا أَيُّهَا الَّذِينَ آمَنُوا اصْبِرُوا وَصَابِرُوا وَرَابِطُوا وَاتَّقُوا اللَّهَ لَعَلَّكُمْ تُفْلِحُونَ
أعضاء أعجبوا بهذه المشاركة : mohamed24 , rce3033
#4
قريت الموضوع بتاعك من شهر تقريبا بس مكنتش عارف اعلق 
ف انا لسة عامل الاكونت و بقول عاش جدا ??

ثانيا بقا لو انا مثلا عاوز اخلي الشخصية بتاعتة تعمل جامب علي نفس مكان الانمي 
لو حضرتك لسة متابع يعني برامج كونكر ف دي اوتو جامب بس بدل الوحوش انمي 
ازاي اعمل كدا او اي ال محتاجو
أعضاء أعجبوا بهذه المشاركة :
#5
إقتباس :ثانيا بقا لو انا مثلا عاوز اخلي الشخصية بتاعتة تعمل جامب علي نفس مكان الانمي 
لو حضرتك لسة متابع يعني برامج كونكر ف دي اوتو جامب بس بدل الوحوش انمي 
ازاي اعمل كدا او اي ال محتاجو

فاهم اللى تقصده لان الموضوع دا حصل معايا و انا بعمل البوت ب الغلط, بدل م يضرب الوحوش بس كان بيجرى ورا اى حد ف الماب و يضرب فيه :)
انا ضد استخدام البوتات فى حالة ال PvP و دا الاستخدام الوحيد للبرنامج اللى انت عايزه, هى ينفع تتعمل بس مش هقدر اساعدك ف الموضوع دا.
يَا أَيُّهَا الَّذِينَ آمَنُوا اصْبِرُوا وَصَابِرُوا وَرَابِطُوا وَاتَّقُوا اللَّهَ لَعَلَّكُمْ تُفْلِحُونَ
أعضاء أعجبوا بهذه المشاركة : mohamed24
#6
مش عارف اعمل اقتباس بس مش مهم 
المهم انك شخصية محترمة ❤❤
ثانيا انا كنت حابب اعرف بتتعمل ازاي بس لاني كنت مفكر ان قيم x و y 
مينفعش تتعدل لانها server side بس بعدين فهمت 
انا بالفعل عارف الخطوات بس عمري م هعمل حاجة زي كدا ??
أعضاء أعجبوا بهذه المشاركة :
#7
إقتباس :مينفعش تتعدل لانها server side

بتتعدل بال Actions اللى بتعملها ب الشخصيه بتاعتك ف اللعبه. هى فعلا server side و متقدرش تعدل القيمه من الميمورى مباشرة دا مش هيغير مكانك ف السيرفر بس هيغير مكانك ف الكلاينت عندك, و بما ان ملفات الخريطه عندك ع الجهاز زى ال twin city مثلا ف الكلاينت بيظهر التغيير دا عندك. بس لو مشيت او نطيت مثلا بالشخصيه بتاعتك بيتبعت للسيرفر احداثياتك القديمه و الجديده و السيرفر يعمل ال checks هناك, و من هنا السيرفر يقدر يعمل Logic يشوف انت شغال ببوت ولا لا, يعنى مثلا لو بتتحرك بسرعه كبيره جدا او بتنط مسافات عاليه يقدر يعمل بان من كدا, لو الحركه دى تنفع بيبعت باكت للكلاينت عشان يعمل ابديت لمكانك. يعنى لو النت عندك بطئ هيبقى مكانك اتغير قبل ما حتى الكلاينت يظهر التغيير دا.
يَا أَيُّهَا الَّذِينَ آمَنُوا اصْبِرُوا وَصَابِرُوا وَرَابِطُوا وَاتَّقُوا اللَّهَ لَعَلَّكُمْ تُفْلِحُونَ
أعضاء أعجبوا بهذه المشاركة :
#8
لو الاحداثيات اتغيرت من الميموري بس.     دي بتبقي حركة وهمية ؟ 
مينفش مثلا اضرب وحش او انمي صح ؟

وهل ف البوت بتاعك كنت بتغير احداثيات اللاعب ف الميموري بس ولا بتبعت باكت لو لسة متذكر يعني POINT PlayerCoords; GetPlayerCoords(&PlayerCoords); auto res = this->m_Functions->Org_AAPacketFunction(AAPacketBuffer, 2, PlayerID, pEntity->id, PlayerCoords.x, PlayerCoords.y, 0);
لان هنا اعتقد ان دي باكت بس في دالة updateplayercoord دي بتغير ف الميموري بس

 
POINT PlayerCoords; GetPlayerCoords(&PlayerCoords); auto res = this->m_Functions->Org_AAPacketFunction(AAPacketBuffer, 2, PlayerID, pEntity->id, PlayerCoords.x, PlayerCoords.y, 0); 
أعضاء أعجبوا بهذه المشاركة :
#9
إقتباس : دي بتبقي حركة وهمية ؟ 

ايوه, انت ممكن تجرب ب اكونتين و توقفهم جمب بعض, غير مكان واحد فيهم هتلاقى الكلاينت بتاع الشخصيه دى غير مكانه انما ف الكلاينت التانى هتلاقيه متحركش.
إقتباس : كنت بتغير احداثيات اللاعب ف الميموري 

لا
 
void Bot::GetPlayerCoords(POINT* p)
{
[align=left]// GET PLAYER COORDS
// 0x32c and 0x330 are changed immediately once the PathFinder is initiated
constexpr auto XOFFSET = 0x32C; 
constexpr auto YOFFSET = 0x330;

auto PlayerAddress = memory.Read<DWORD>(this->m_Artifacts->m_lpPlayerPtr);
auto XAddress = reinterpret_cast<LPVOID>(PlayerAddress + XOFFSET);
auto YAddress = reinterpret_cast<LPVOID>(PlayerAddress + YOFFSET);

auto PlayerX = memory.Read<DWORD>(XAddress);
auto PlayerY = memory.Read<DWORD>(YAddress);

p->x = PlayerX;
p->y = PlayerY;
}
الاوفست 0x32c و 0x330 مش الاحداثيات بتاع الشخصيه اللى الكلاينت بيستخدمها. دى احداثيات ال built-in path finder بتاع اللعبه. اما بتفتح الماب و بتدوس على مكان عشان الشخصيه بتاعتك تروح ليه, احداثيات المكان دا بتتسجل هنا.
إقتباس :بتبعت باكت

مبغيرش الاحداثيات مباشره بالكود, بعمل استدعاء لداله ف اللعبه زى jump مثلا و الكلاينت هو اللى بيغير الاحداثيات من ال response packet بتاع السيرفر.
إقتباس :updateplayercoord 

دخلت ادور عليها ف الكود لقيتها بتستخدم ف مكان واحد بس و المكان دا commented out يعنى كأنها مش موجوده ف الكود اصلا. انا تقريبا كنت بحاول اصلح مشكله بيها بس منفعتش.
 
void Bot::AttackEntity(Artifacts::sEntity* pEntity, CHAR mode)
{
// GO TO ENTITY
std::cout << "EntityID: " << pEntity->id << ", X: " << pEntity->x << ", Y: " << pEntity->y ; // std::endl;

// .....
// .....
// ------------ SNIP ------------ 
// .....
// .....


//auto Player = memory.Read<LPVOID>(this->m_Artifacts->m_lpPlayerPtr);
//this->m_Functions->Org_AutoFunction(Player, pEntity->Address, &this->m_Artifacts->m_AutoVTable, 0, 1);

AddToAlreadyHit(this->m_TheEntity.id);

Sleep(50);
[color=#ff0000] // UpdatePlayerCoords(&Ent);[/color]

}
يَا أَيُّهَا الَّذِينَ آمَنُوا اصْبِرُوا وَصَابِرُوا وَرَابِطُوا وَاتَّقُوا اللَّهَ لَعَلَّكُمْ تُفْلِحُونَ
أعضاء أعجبوا بهذه المشاركة : rce3033 , mohamed24


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم