delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف يعمل التطبيق RunAsDate ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله

نعلم جيدا أن الكثير من البرامج تعمل وفق مدة تجريبية ، تعتمد هذه البرامج على تاريخ النظام.

* ماذا لو ثبتنا تاريخ هذا البرنامج ؟ ، مثال برنامج به باقي 30 يوم من المدة التجريبية ، حتى مع تغيير التاريخ يبقى التاريخ ثابت لا تنقص الأيام.

- يوجد برنامج يقوم بهذه المهمة RunAsDate

رابط البرنامج
كود :
http://www.nirsoft.net/utils/run_as_date.html

+ على ما أعتقد يوجد مصدر للبرنامج بلغة #C
كود :
https://github.com/badforlabor/runasdate/blob/master/Program.cs

* الأن إلى صلب الموضوع ماذا لو برمجنا هذا البرنامج بلغة الدلفي ؟ .

+ المشاركة متاحة للجميع ، من لديه خبرة في التعامل مع الملفات التنفيذية فل يشاركنا بخبرته ، المبدأ نفس عمل برنامج [b]Loader[/b]
السلام عليكم 

ترجمة بسيطة لذلك الكود المكتوب ب #C ربما تفيد 

[attachment=4566]
(28-11-2021, 10:47 PM)AX302 كتب : [ -> ]السلام عليكم 

ترجمة بسيطة لذلك الكود المكتوب ب #C ربما تفيد 

وعليك السلام

شكرا على تحويل الكود الى الدلفي ، لكن لا يقوم بالمهمة المطلوبة
بعد تتبع برنامج  RunAsDate  يعتمد على  دوال  Winapi  الخاصة بـ Windows ، الممثلة في ملف Kernel32.dll

برنامج في حالة اخذ المعلومات من النظام  بواسطة دالة ما، يتم إعادة توجيهه بشئ أخر

* وطرف الخيط في هذا المصدر ، حيث تتم عملية الحقن

كود :
https://github.com/MahdiSafsafi/DDetours

يمكننا اعادة توجيه دالة افتراضية للتاريخ و الوقت
و عليكم السلام و رحمة الله
موضوع جميل و مفيد جدا...
اظن ان قسمه المناسب هو قسم التمارين...

القيت نظرة على سورس "السي شارب" و عملت له بناء مع حذف و اضافة اشياء (مثل اضافة التحقق من ان التطبيق تم تشغيله بصلاحيات الأدمن)
ما يقوم به السورس الأصلي و "المعدل" بسيط جددا:
1- يحفظ التاريخ الحقيقي.
2- يغير تاريخ النظام بما يحتويه ملف "runasdate.ini"
3- يشغل البرنامج المستهدف بما يحتويه ملف "runasdate.ini"
4- ينتظر مدة معينة بما يحتويه ملف "runasdate.ini"
5- يعيد التاريخ الحقيقي.
6- ينهي تنفيذ نفسه.
كملخص، يقوم التطبيق برمجيا ما يستطيع عمله صاحب الجهاز يدويا.
[attachment=4567]


بخصوص الترجمة الى دلفي، المثال فوق ينقصه:
1- اضافة معلومات لــ STRUCTURE
PHP كود :
NewSystemTime.wSecond := 0;
NewSystemTime.wHour := 0;
NewSystemTime.wMinute := 0; 

2- اضافة "الانتظار" بين مرحلة تشغيل البرنامج المستهدف و امر ارجاع التاريخ الحقيقي.
PHP كود :
  ShellExecute(0, 'open', PWideChar(FileName), '', '', SW_SHOWNORMAL);
  sleep(5000);
  SetLocalTime(OldSystemTime); 

و اخيرا، دالة النظام المسؤولة عن تغيير التاريخ تحتاج صلاحيات "المدير" لكي تعمل...

بخصوص طريقة عمل التطبيق csharp يمكن تجاوزها ! كيف ؟

بخصوص اداة nirsoft لم القي نظرة على عملها بعد...
(29-11-2021, 07:03 PM)larbiparadox كتب : [ -> ]
(28-11-2021, 10:47 PM)AX302 كتب : [ -> ]السلام عليكم 

ترجمة بسيطة لذلك الكود المكتوب ب #C ربما تفيد 

وعليك السلام

شكرا على تحويل الكود الى الدلفي ، لكن لا يقوم بالمهمة المطلوبة

السلام عليكم 
 تم عمل تعديل بسيط مثل ما قال الاخ I3CT (اضافة Structure + UAC)

بخصوص عمل برنامج NirSoft , من الموقع الرسمي يمكن ملاحظة التالي : 

PHP كود :
How does it work ?
RunAsDate intercepts the kernel API calls that returns the current date and time (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime, GetSystemTimePreciseAsFileTime), and replaces the current date/time with the date/time that you specify. 

Intercepts بمعنى القيام باعتراض (Hook) تلك الدوال و تغير قيم فيها 

يمكن تفقد هذا المثال لدالة GetlocalTime ربما يفيد 

PHP كود :
https://www.52pojie.cn/thread-988900-1-1.html 

[attachment=4568]
(30-11-2021, 05:05 PM)AX302 كتب : [ -> ]
(29-11-2021, 07:03 PM)larbiparadox كتب : [ -> ]
(28-11-2021, 10:47 PM)AX302 كتب : [ -> ]السلام عليكم 

ترجمة بسيطة لذلك الكود المكتوب ب #C ربما تفيد 

وعليك السلام

شكرا على تحويل الكود الى الدلفي ، لكن لا يقوم بالمهمة المطلوبة

السلام عليكم 
 تم عمل تعديل بسيط مثل ما قال الاخ I3CT (اضافة Structure + UAC)

بخصوص عمل برنامج NirSoft , من الموقع الرسمي يمكن ملاحظة التالي : 

PHP كود :
How does it work ?
RunAsDate intercepts the kernel API calls that returns the current date and time (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime, GetSystemTimePreciseAsFileTime), and replaces the current date/time with the date/time that you specify. 

Intercepts بمعنى القيام باعتراض (Hook) تلك الدوال و تغير قيم فيها 

يمكن تفقد هذا المثال لدالة GetlocalTime ربما يفيد 

PHP كود :
https://www.52pojie.cn/thread-988900-1-1.html 

شكرا لـ I3CT و AX302 ، طريقة تغيير وقت نظام مؤقتا ، ليس بحل جيد لأنه في كل مرة تشغل البرنامج يؤخر وقت نظام

أفضل حل و هو اعتراض (Hook) تلك الدوال و تغير قيم فيها ، ولكن اعتراض الدوال الخاصة بالملف المستهدف
السلام عليكم.
هناك وحدة اسمها EXMODE ،
هذه الوحدة تتيح الفرصة للكتابة في الملف التنفيذي.
ربما تكون مفيدة.
يمكن تخزين تاريخ الابتداء و تاريخ النظام و المقارنة بينهما.[attachment=4569]
برمجت على السريع تطبيق صغير الحجم (32/64) بت بهدف تجربة الحقن عليه و جعله يرجع ما نريد...

[attachment=4570]

[صورة: 5dmT3Y6.gif]
السلام عليكم 

تجربة Hook باستعمال DDetours

[صورة: F6nY4Yc_d.webp?maxwidth=760&fidelity=grand]

[attachment=4571]
الصفحات : 1 2