easyDelphi Q&A
+3 تصويتات
42 مشاهدات
mono.cecil خاص بتطبيقات الدو تنت
سُئل في تصنيف vcl بواسطة (280 نقاط) | 42 مشاهدات
 

2 إجابة

+3 تصويتات
بشكل مباشر لا . لانها سي شارب .
لكن اذا كان هناك لها warper للدلفي او DLL . فيمكن التعامل مع هذه المكتبة.
قد تجد بديل لها للدلفي
تم الرد عليه بواسطة (20,380 نقاط)
+3 تصويتات

يبدو أن هذا الفرايم وارك الأوبن السورس الخاص بلغة السيشارب و الذي قام بتطويره السيد "Jean Baptiste Evain" و أصبح اليوم تابع ل:"Mono project" هو عبارة فقط عن وسيلة لزرع أكواد أو حقنها بداخل برامج "NET assemblies" و ذلك بتوفير خاصية القراءة و الكتابة عليها و التعدبل عليها بلغة السيشارب عوضا عن الطريقة القديمة مثل "Net.Reflection" الذي يقوم بتحميل الكود الخاص بالبرامج المبرمجة بلغة السيشارب بلغة "Assembly" و هذا الأخير له الكثير مما يقابله في الهندسة العكسية على مستوى برامج الدلفي مثل "DEDE"  ....  بإختصار هي أداة جد فعالة للذين يرغبون في تعلم الهندسة العكسية على برامج الدوتنات و خصوصا المبتدئين منهم ذلك أنها تسهل الكثير على من ليسو بدراية جيدة بلغة "Assembly" و خفايا الهندسة العكسية .... المهم للتعرف أكثر على هذه المكتبة يرجى الذهاب هنا   و  هنا .

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

  • أولا:  لم أرى في حياتي هندسة عكسية أو "Decompiler" للبرامج المبرمجة بواسطة الدلفي على شكل باسكال ... 
  • ثانيا:  يبدولي أن برامج السيشارب سهلة جدا في حقنها أو هندستها عكسيا بالمقارنة ببرامج الدلفي .... و السبب يبدولي في إنفتاح المصدر ...
مثال عن كيفية حفن برامج بواسطة الدلفي ؟ 
 
procedure InjectFunc(ProcessID: Cardinal; Func: Pointer; aParams: Pointer; aParamsSize: DWORD);
var
  hThread: THandle;
  lpNumberOfBytes: DWORD;

  ThreadAddr, ParamAddr: Pointer;
begin
  if ProcessID<>0 then
  begin
    // ---- Write function address
    ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);

    // ---- Address to write parameters
    ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);

    // ---- Create a remote thread
    hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes);

    // ---- Thread to wait for the end of
    WaitForSingleObject(hThread, 3000);

    GetExitCodeThread(hThread,lpExitCode);
    TerminateThread(hThread,lpExitCode);

    VirtualFreeEx(ProcessID,ThreadAddr,0,MEM_RELEASE);
    VirtualFreeEx(ProcessID,ParamAddr,0,MEM_RELEASE);
    VirtualFreeEx(ProcessID,Func,0,MEM_RELEASE);
    VirtualFreeEx(ProcessID,aParams,0,MEM_RELEASE);

    CloseHandle(hThread);
  end
end;

المصدر من هنا .

 

تم الرد عليه بواسطة (15,020 نقاط)

اسئلة متعلقة

+4 تصويتات
4 إجابة
سُئل يوليو 5، 2018 بواسطة مجهول | 180 مشاهدات
+2 تصويتات
1 إجابة
سُئل أكتوبر 27، 2018 في تصنيف vcl بواسطة youcef (240 نقاط) | 45 مشاهدات
+4 تصويتات
1 إجابة
سُئل نوفمبر 5، 2018 في تصنيف vcl بواسطة تقي الدين (400 نقاط) | 46 مشاهدات
0 تصويتات
1 إجابة
سُئل منذ 4 أيام في تصنيف Delphi بواسطة العالم الاخضر (120 نقاط) | 13 مشاهدات
ادعُ اصدقائك في الفايسبوك لمشاركتك
Comodo SSL

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

324 سؤال
533 إجابة
928 تعليق
222 مستخدم