(04-01-2023, 10:42 PM)lionking كتب : [ -> ]كيف تم حساب هذا 0xAD ؟
أنا لم أحسب شيء...قمت بالتعديل في المنقح على عنواين مشابهة للعناوين التي طرحتها و نسخت OpCode
باختصار المنقح هو الذي يحسبها، و نحن ننسخها و نستعملها في بناء باتش أو لودر أو هوك...
هناك برامج تقوم بالحساب بدون اللجوء للمنقح من بينها:
https://www.at4re.net/f/thread-3425.html
بالإضافة للبرنامج المرفق
هل العناوين في الذاكرة او الملف
جرب ان تستخدم
Push 0x00000000
ret
بدلا من
JMP
فقط تحتاج 6 بيتات
(04-01-2023, 10:42 PM)lionking كتب : [ -> ]كيف تم حساب هذا 0xAD ؟
بعد تنقيح البريمج Jump2Hex
في حالة JMP SHORT
0048D9B2 - 0048DA03 = FFFFFFAF - 2 = FFFFFFAD
تسحب آخر بايت من النتيجة لإستعماله مع أمر القفز EB
أو تحول النتيجة من DWORD إلى Byte و تساوي AD ثم تستعمله مع أمر القفز EB
في حالة JMP Long
نفس العملية و لكن تطرح 5 بدل 2
0048A512 - 0048DA03 = FFFFCB0F - 5 = FFFFCB0A
الناتج لازم يعكس قبل الإستعمال مع أمر JMP Long أي E9 0A CB FF FF
* الأرقام المطروحة في العمليات السابقة (2 و 5) أرقام ثابتة فهي تمثل حجم الأمر JMP SHORT يحتاج 2 بايت في عملية الكتابة و JMP Long يحتاج 5 بايت للكتابة
شاركنا ما توصلت إليه لتعم الفائدة
(05-01-2023, 07:27 AM)aijundi كتب : [ -> ]int addr = 0x0048DA03;int jumpFarToAddr = 0x0048A512;
unsigned char hex[5];
const unsigned char command = 0xE9;
*hex = command;
int offset = jumpFarToAddr - addr - sizeof(hex);memcpy(&hex[1], &offset, sizeof(offset));
VirtualProtectEx(hProcess, (void*)addr, 20, PAGE_READWRITE, &oldProtect);
WriteProcessMemory(hProcess, (void*)addr, (void*)hex, sizeof(hex), NULL);
VirtualProtectEx(hProcess, (void*)addr, 20, oldProtect, &oldProtect);
التعديل اللي قمت بإضافتة على الكود وضح لي أشياء كانت مبهمة بالنسبة لي.
أشكرك أخي العزيز.
(05-01-2023, 08:55 PM)Newhak كتب : [ -> ]هل العناوين في الذاكرة او الملف
جرب ان تستخدم
Push 0x00000000
ret
بدلا من
JMP
فقط تحتاج 6 بيتات
أشكرك أخي العزيز على إضافتك المفيدة.
(06-01-2023, 05:09 AM)M!X0R كتب : [ -> ]بعد تنقيح البريمج Jump2Hex
في حالة JMP SHORT
0048D9B2 - 0048DA03 = FFFFFFAF - 2 = FFFFFFAD
تسحب آخر بايت من النتيجة لإستعماله مع أمر القفز EB
أو تحول النتيجة من DWORD إلى Byte و تساوي AD ثم تستعمله مع أمر القفز EB
في حالة JMP Long
نفس العملية و لكن تطرح 5 بدل 2
0048A512 - 0048DA03 = FFFFCB0F - 5 = FFFFCB0A
لناتج لازم يعكس قبل الإستعمال مع أمر JMP Long أي E9 0A CB FF FF
* الأرقام المطروحة في العمليات السابقة (2 و 5) أرقام ثابتة فهي تمثل حجم الأمر JMP SHORT يحتاج 2 بايت في عملية الكتابة و JMP Long يحتاج 5 بايت للكتابة
أشكرك أخي العزيز أنك وضحت هدة الجزئية لأنها مهمة, وفعلا أفادتني.
.
.
.
.
الحمد لله اللغز أصبح مفهوم الآن, وكل أخ رد عليا وضح لي جزئية من الموضوع وفى النهاية اتضحت كل النقاط وتم حقن الكود بشكل صحيح كما كنت أريد. أشكركم جميعا...........
(07-01-2023, 01:00 AM)lionking كتب : [ -> ]الحمد لله اللغز أصبح مفهوم الآن, وكل أخ رد عليا وضح لي جزئية من الموضوع وفى النهاية اتضحت كل النقاط وتم حقن الكود بشكل صحيح كما كنت أريد. أشكركم جميعا...........
طيب يااخي جميل انك وصلت للحل لكن وضح ايش سويت بالضبط حتى يستفيذ غيرك
(07-01-2023, 01:00 AM)lionking كتب : [ -> ]تم حقن الكود بشكل صحيح
ساعد غيرك يساعدك غيرك كان توقيع أحد الأعضاء المخضرمين سابقا
لو تكرمت ضع الكود الصحيح الذي تمت تجربته بنجاح حتى يتسنى غيرك بالإستفادة منه
(07-01-2023, 08:00 PM)lionking كتب : [ -> ]واللهى يا إخواني كل الخطوات مكتوبة فى نفس هذا الموضوع من بدايتة عل هيئة ردود من الإخوة اللي ردو عليا يعنى أنا ما جبت شئ من الخارج لكن كلة موجود في نفس الموضوع.
وعلى العموم أنا سوف أقوم بتلخيص الموضوع.
اخي الكريم لاتاخذ الامور بحساسية لان الاخوة هنا قامو بوضع اقتراحات لحل مشكلتك فكان من الافضل ان تضع ردك بماتوصلت له بالشرح وليس بصورة عامة ان فلان ساعدك وفلان اقترح وووو
بارك الله فيك انك استدركت ووضعت ماتوصلت له
بعد إذنك تم تعديل المشاركة لإعادة تكرار الردود و هذا مخالف !
نعلم أن الجميع ساعدك بفكرة و نحن طلبنا منك كتابة الكود المجرب حتى يكون مرجع لمن يواجه نفس المشكلة.
شكرًا لتفهمك