17-01-2019, 07:33 PM
18-01-2019, 02:04 AM
وعليكم السلام
يبدو انه لديك مفهوم خاطئ عن الهندسة العكسية وارجاع السورس كود لبرنامج ما.
دعني اوضح أولاً حياة البرنامج التنفيذي، انظر هنا:
كما موضح اعلاه، فالخطوة الاولى عندما تبرمج برنامج بلغة سي++ فانت ستكتب السورس كود اما في محرر (مثل ++notepad) او بيئة تطوير (مثل Visual Studio او Xcode) وستحفظ الملف، الملف سيحفظ بصيغة CPP
كما في اعلاه (على سبيل المثال Test.cpp)
الـPreprocessor هي مرحلة تسبق عملية الترجمة compile إذا تتم معالجة مسبقة للسورس كود قبل تمريره إلى المترجم compiler وكمثال بسيط عندما يكون هناك أمر توجيهي include فإنه يتم البحث عن المكتبة أو الملف المحدد ويتم تضمينه في الملف المصدري. إذ أن مهام المعالجة المسبقة preprocessor لا تتعلق بتنفيذ الكود وترجمته وإنما في بعض الإجرائيات الغير تنفيذية وإنما التوجيهية directive كما سنرى لاحقاً كالبحث عن الكلمات الرمزية المعرفة واستبدالها بالتعريفات الخاصة بها.
الـCompiler سيأخذ السورس كود ويحولة الى لغة الاسمبلي
الـAssembler سيحول اكواد الاسمبلي الى object code (ملف ينتهي بصيغة o. على لينكس و OBJ .على ويندوز)
الـ Linker سيأخذ الـ object code ويربط معها الـ library ويحولها لملف تنفيذي (البرنامج النهائي الذي نشغله)
------------
الان نأتي الى البرنامج Test.exe والذي هو حالياً بلغة الالة (اللغة التي يفهمها المعالج وهي متكونة من 1 و 0 ) اذا اردنا ان نقوم بالهندسة العكسية له عن طريق منقح مثل ollydbg او disassembler مثل ida pro
فكل عملها هو مجرد تحويل لغة الاله ( او عكسها بمعنى ادق) الى لغة الاسمبلي. يوجد برامج تحول لغة الاسمبلي الى لغة سي مزيفة او ما يسمى بـ Pseudocode ولكنه ليس الكود الحقيقي الذي كتبة المبرمج.
بأختصار بمجرد تحول البرنامج الى لغة الاله فمن المستحيل الحصول على السورس كود الخاص به، ذهب، اختفى من الوجود ولن يعود موجودا داخل البرنامج واقصى ما يمكنك عملة هو الحصول على كود اسمبلي للبرنامج او كود Pseudocode.
-----------
لمن لم توضح له الفكرة
هذا كود سي++
فهذا كل ما موجود وكود سي++ في الاعلى اختفى بدون رجعه
يبدو انه لديك مفهوم خاطئ عن الهندسة العكسية وارجاع السورس كود لبرنامج ما.
دعني اوضح أولاً حياة البرنامج التنفيذي، انظر هنا:
كما موضح اعلاه، فالخطوة الاولى عندما تبرمج برنامج بلغة سي++ فانت ستكتب السورس كود اما في محرر (مثل ++notepad) او بيئة تطوير (مثل Visual Studio او Xcode) وستحفظ الملف، الملف سيحفظ بصيغة CPP
كما في اعلاه (على سبيل المثال Test.cpp)
الـPreprocessor هي مرحلة تسبق عملية الترجمة compile إذا تتم معالجة مسبقة للسورس كود قبل تمريره إلى المترجم compiler وكمثال بسيط عندما يكون هناك أمر توجيهي include فإنه يتم البحث عن المكتبة أو الملف المحدد ويتم تضمينه في الملف المصدري. إذ أن مهام المعالجة المسبقة preprocessor لا تتعلق بتنفيذ الكود وترجمته وإنما في بعض الإجرائيات الغير تنفيذية وإنما التوجيهية directive كما سنرى لاحقاً كالبحث عن الكلمات الرمزية المعرفة واستبدالها بالتعريفات الخاصة بها.
الـCompiler سيأخذ السورس كود ويحولة الى لغة الاسمبلي
الـAssembler سيحول اكواد الاسمبلي الى object code (ملف ينتهي بصيغة o. على لينكس و OBJ .على ويندوز)
الـ Linker سيأخذ الـ object code ويربط معها الـ library ويحولها لملف تنفيذي (البرنامج النهائي الذي نشغله)
------------
الان نأتي الى البرنامج Test.exe والذي هو حالياً بلغة الالة (اللغة التي يفهمها المعالج وهي متكونة من 1 و 0 ) اذا اردنا ان نقوم بالهندسة العكسية له عن طريق منقح مثل ollydbg او disassembler مثل ida pro
فكل عملها هو مجرد تحويل لغة الاله ( او عكسها بمعنى ادق) الى لغة الاسمبلي. يوجد برامج تحول لغة الاسمبلي الى لغة سي مزيفة او ما يسمى بـ Pseudocode ولكنه ليس الكود الحقيقي الذي كتبة المبرمج.
بأختصار بمجرد تحول البرنامج الى لغة الاله فمن المستحيل الحصول على السورس كود الخاص به، ذهب، اختفى من الوجود ولن يعود موجودا داخل البرنامج واقصى ما يمكنك عملة هو الحصول على كود اسمبلي للبرنامج او كود Pseudocode.
-----------
لمن لم توضح له الفكرة
هذا كود سي++
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, World!";
return 0;
}
سيحوله الـCompiler الى كود اسمبلي
_main PROC
push ebp
mov ebp, esp
push OFFSET $SG28103
push OFFSET std::basic_ostream<char,std::char_traits<char> > std::cout ; std::cout
call std::basic_ostream<char,std::char_traits<char> > & std::operator<<<std::char_traits<char> >(std::basic_ostream<char,std::char_traits<char> > &,char const *) ; std::operator<<<std::char_traits<char> >
add esp, 8
xor eax, eax
pop ebp
ret 0
_main ENDP
18-01-2019, 03:17 PM
(17-01-2019, 07:33 PM)djamel كتب : [ -> ]السلام عليكم
لقد قمت بكسر حماية لودر مبني ب Microsoft visual c++5.12وأسأل ان كانت هناك طريقة لقراءة السورس كود
السلام عليكم
بدل أن تبحث عن الكود سورس للبرنامج لأن هذا مستحيل حاول أن تفهم آلية عمله و الخوارزميات التي يعمل بها و قم بكتابة البرنامج من جديد و باللغة التي تجيدها لأن هذا هو أساس الهندسة العكسية
بالتوفيق.
20-01-2019, 08:26 AM
شكراااا صديقي وضحت الأمر بشكل جيد جدا شكرااااااااا
17-02-2019, 11:56 AM
جزاكم الله خيرا على كل حرف!
ونسال الله التوفيق للجميع!
لماذا ليس هناك نهاية سعيدة؟ لماذا لا ينغلق الموضوع بعد الافادة؟
ونسال الله التوفيق للجميع!
لماذا ليس هناك نهاية سعيدة؟ لماذا لا ينغلق الموضوع بعد الافادة؟