الفريق العربي للهندسة العكسية
كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - نسخة قابلة للطباعة

+- الفريق العربي للهندسة العكسية (https://www.at4re.net/f)
+-- قسم : منتديات البرمجة - Programming Forums (https://www.at4re.net/f/forum-5.html)
+--- قسم : البرمجة بلغة السى و السى بلس بلس ++C & C (https://www.at4re.net/f/forum-17.html)
+--- الموضوع : كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ (/thread-3436.html)

الصفحات: 1 2


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - M!X0R - 05-01-2023

(04-01-2023, 10:42 PM)lionking كتب : كيف تم حساب هذا 0xAD ؟

أنا لم أحسب شيء...قمت بالتعديل في المنقح على عنواين مشابهة للعناوين التي طرحتها و نسخت OpCode 
باختصار المنقح هو الذي يحسبها، و نحن ننسخها و نستعملها في بناء باتش أو لودر أو هوك...

هناك برامج تقوم بالحساب بدون اللجوء للمنقح من بينها:
https://www.at4re.net/f/thread-3425.html
بالإضافة للبرنامج المرفق


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - Newhak - 05-01-2023

هل العناوين في الذاكرة او الملف

جرب ان تستخدم
Push 0x00000000
ret

بدلا من
JMP

فقط تحتاج 6 بيتات


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - M!X0R - 06-01-2023

(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 بايت للكتابة

شاركنا ما توصلت إليه لتعم الفائدة  victory


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - lionking - 07-01-2023

(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 بايت للكتابة

أشكرك أخي العزيز أنك وضحت هدة الجزئية لأنها مهمة, وفعلا أفادتني.
.
.
.
.
الحمد لله اللغز أصبح مفهوم الآن, وكل أخ رد عليا وضح لي جزئية من الموضوع وفى النهاية اتضحت كل النقاط وتم حقن الكود بشكل صحيح كما كنت أريد. أشكركم جميعا...........


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - Newhak - 07-01-2023

(07-01-2023, 01:00 AM)lionking كتب : الحمد لله اللغز أصبح مفهوم الآن, وكل أخ رد عليا وضح لي جزئية من الموضوع وفى النهاية اتضحت كل النقاط وتم حقن الكود بشكل صحيح كما كنت أريد. أشكركم جميعا...........

طيب يااخي جميل انك وصلت للحل لكن وضح ايش سويت بالضبط حتى يستفيذ غيرك


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - M!X0R - 07-01-2023

(07-01-2023, 01:00 AM)lionking كتب : تم حقن الكود بشكل صحيح

ساعد غيرك يساعدك غيرك كان توقيع أحد الأعضاء المخضرمين سابقا

لو تكرمت ضع الكود الصحيح الذي تمت تجربته بنجاح حتى يتسنى غيرك بالإستفادة منه nice


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - lionking - 07-01-2023

الكود النهائي:

[صورة مرفقة: QjJjc8S.png]

والناتج بهذا الشكل:

[صورة مرفقة: 3WP9X90.png]


أتمنى الفائدة للجميع.


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - Newhak - 07-01-2023

(07-01-2023, 08:00 PM)lionking كتب : واللهى يا إخواني كل الخطوات مكتوبة فى نفس هذا الموضوع من بدايتة عل هيئة ردود من الإخوة اللي ردو عليا يعنى أنا ما جبت شئ من الخارج لكن كلة موجود في نفس الموضوع.
وعلى العموم أنا سوف أقوم بتلخيص الموضوع.

اخي الكريم لاتاخذ الامور بحساسية لان الاخوة هنا قامو بوضع اقتراحات لحل مشكلتك فكان من الافضل ان تضع ردك بماتوصلت له بالشرح وليس بصورة عامة ان فلان ساعدك وفلان اقترح وووو

بارك الله فيك انك استدركت ووضعت ماتوصلت له


RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - M!X0R - 07-01-2023

بعد إذنك تم تعديل المشاركة لإعادة تكرار الردود و هذا مخالف !

نعلم أن الجميع ساعدك بفكرة و نحن طلبنا منك كتابة الكود المجرب حتى يكون مرجع لمن يواجه نفس المشكلة.

شكرًا لتفهمك  Smile