اخوتي ارجو مساعدتي في تكوين فكره عن كيفيه عمل انتي فايروس بالجافا
عمل انتي فايروس بالجافا
يعتمد مضاد الفيروسات على فكرة API Hooking
وهذا يتطلب Low level control اى انه فى النهاية ستستخدم C++/C فى برنامجك
اذا لماذا تستخدم الجافا ثم تستدعى منها كود C ؟
يفضل ان تستخدم ال ++C من البداية
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
أيضا من الجميل النظر الى الموضوع المشابه - والمعاكس في الطلب :)
يمكن أخي كتابة مكافح فيروسات تقريباً بأي لغة. البحث عن الفيروسات بالإعماد على تواقيع وبصمة يتميز فيها فيروس معين،الطريقةالأساسية التي تستخدمها كل مكافحات الفيروسات، يمكن تطبيقها بأي لغة تستطيع بها قراءة ملف.
إذا إحتجت لشيء لايمكن عمله بجافا، فيمكنك كتابة هذا الجزء بـc\c++ وربطه مع جافا بإستخدام jni.
قبل البدء بهذا المشروع ربما تود أخذ تجربة كتابة تواقيع لـclamav، مكافح فيروسات مفتوح المصدر، فسيعطيك خبرة في هذا المجال.
أما أن تستخدم اختزال مثل MD5 أو SHA لجلعه توقيع للفيروس، فهذا عمل أكل وشرب عليه الدهر ولم يعد ذا معنى... إلا اذا كنت تريد "فقط" التجريب والتعلم.
أما أن تستخدم سلسلة binary مع /أو دون wildcards فأنت تسير في طريق برمجة مقاوم فيروسات على طريقة المقاومات المعروفة (طبعا يبقى المشوار طويل للوصول إليها والمنافسة).
أما أن تستخدم اللغة الفلانية لعمل ذلك، فأقول لك تعامل مع أي لغة كأداة، فأي لغة بدون مطور ماهر لا تفيد، وعن الجافا خصوصا في مشروعك هذا، فكما قال الأخوة، ستحتاج لاستخدام استدعاءات Native والوصول لأماكن في النظام لا تكون فيه الجافا الخيار المناسب (طبعا استخدامها غير مستحيل ولكن ستصعب وتعقد نفسك) لذا استخدم لغة Native من البداية مثل C و Assembly .
كل هذا يعتمد على ماذا تريد أن تصنع بالضبط؟ وما هو مفهوم توقيع الفيروس الذي ستستخدمه؟
لأن مفهوم التوقيع واسع..
يمكن أن يكون حجم الملف توقيع له.
يمكن أن يكون حجم الملف مع تاريخ إنشاءه توقيع له.
يمكن أن يكون تاريخ إنشاء الملف مع عدد أقسامه توقيع له... (جميع هذه البيانات يمكن استخراجها بسهولة من ترويسات الملف. راجع بنية ملفات PE.)
يمكن أن يكون اجتماع عدة دوال API في ملف ...يشي بخبثه وبالتالي هذا الاجتماع توقيع له ...
يمكن لتسلسل 10001100 معين في الملف أن يكون توقيع له. (غالبا ما يتعامل المبرمجون مع هذا التسلسل بالنظام Hex).
يمكن أن يكون MD5 أو SHA للملف أن يكون توقيع للملف ...
وبالمناسبة يمكن أن يكون تسلسل مثل 1؟000؟1؟001 حيث ؟ تسمى wildcard ويمكن أن يشغل أي قيمة بلا تأثير...
اذا هناك تقنيات عديدة لاعتماد التواقيع منها البسيطة الى المعقدة ..
أما كيف ستقوم بالمقارنة:
1- فتح الملف المراد فحصه.
CreateFile()
2- إنشاء تخطيط ذاكري له.
CreateFileMapping()
3- نقل جزء الملف المراد مقارنته إلى الذاكرة
MapFileView()
4- البدء بعملية المقارنة.
بالنسبة لأنظمة Unix-like كـ لينكس، فهذه الدوال المستخدمة:
open() / creat() shm_open mmap
بالنسبة لكيف تبدأ المقارنة عمليا:
يتم تخزين التواقيع في قاعدة بيانات .. ما المقصود بمفهوم "قاعدة البيانات" هنا ؟
البرامج المتقدمة تقوم ببساطة:
قبل القيام بعملية الفحص، يقوم البرنامج بقراءة قاعدة البيانات ثم يقوم بتصميم machine state على الذاكرة لهذه البيانات، ثم وعند القيام بفحص ملف معين يقوم البرنامج بإمرار شجرة الـ machine state على الملف برمته فإذا انطبق فرع من هذه الـmachine state على سلسلة موجودة في الملف قيد الفحص فهذا يعني أنه فيروس. أحد الخوارزميات المشهور في القيام بذلك هي Aho-Corasick.
يعني المقارنة تتم من قاعدة البيانات إلى الملف وليس من الملف إلى قاعدة البيانات.
كمبتديء ستقوم بالعكس.. يعني ستستخرج التوقيع من الملف قيد المسح ثم ستقارنه إلى قاعدة البيانات بحثا عن أي تتطابق! وهذا أمر بسيط للغاية خصوصا بوجود مثل SQLite و Berkeley DB .. وطبعا هذه الطريقة بسيطة لكنها سهلة التجاوز من المخربين وصانعي الفيروسات.
" إن الله كتب الإحسان على كل شيء"
::
الإرادة ... تحقق السيادة.