الجمعة، 30 أغسطس، 2013

ملف مضغوط بحجم 4.2 كيلوبايت يحتوي على بيانات بحجم 43000 تيربايت

بسم الله الرحمن الرحيم

قد يبدو لك العنوان مستحيلاً و رائعا في نفس الوقت , حيث أن برنامج للضغط يعمل بهذه الكفاءة قد يوفر عليك الكثر من الوقت في نفل البيانات في الشبكة .
و لكن هذا الملف ليس من صنع برنامج ضغط خارق بل من صنع مخترقي الأنظمة للتعطيل النظام و برامج معينة (  برامج مكافحة الفيروسات في معظم الحالات ) .

  • كيف يعمل هذا الملف ؟
يكون مساحة الملف في الغالب صغيرة جداُ مما يصعب اكتشافه , ويحتوي على كمية من البيانات العديمة النفع و ذلك للاستهلاك موارد النظام عند فك الملف .


  • كيف يؤثر هذا الملف على برنامج حماية الفيروسات ؟
 
كجزء من اساليب الحماية يقوم معظم برامج الحماية الحديثة بمسح الملفات الجديدة في النظام بشكل ألي للبحث عن الفيروسات , و بالنسبة للملفات المضغوطة يتم أولا فك ضغط الملف و في حالة الملف المحتوي على الثغرة سوف يتم استهلاك مساحة القرص الصلب و حدوث انهيار للنظام .


  • كيف يمكن ان يحتوي ملف بهذا المساحة على هذه الكميات من البيانات ؟
لفهم هذا اللغز لابد لك من فهم كيفية عمل خوازمية الضغط المستخدمة في ملفات (zip) , و لنبدأ بسلسلة البيانات التالية كمثال عن البيانات الغير مضغوطة :

AAAAABBBBCCCCBAAAA

تلاحظ بأن هنالك تكرار للأحرف بشكل كبير مما يؤدي لزيادة طول السلسلة ,  و لكن ماذا لو قمنا بأعادة كتابة سلسلة الحرف A في بداية السلسلة من (AAAAA) إلى (5A) حيث يرمز العدد في أول السلسلة لتكرار القيمة يليه القيمة المكررة , و الأن لنعد كتابة السلسلة السابقة باستخدام هذه الخوازمية :

5A4B4C1B4A

تلاحظ هنا حدوث تطلق لطول السلسلة بعد تطبيق الخوازمية , و الأن بعد أن أصبحت لديك فكرة عن عمل الخوازمية الخاصة ببرنامج الضغط , لنفترض بأننا قمنا بأرسال سلسلة نصية تتكون من الحرف A بطول 10000 سيكون تمثيلها بعد تطبيق خوازمية الضغط عليها كالتالي :
 10000A

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


  • هل زال هذا الملف يشكل خطراً على برامج حماية الفيروسات ؟
معظم برامج الحماية الحديثة تقوم بالتعرف على هذا النوع من الملفات مباشرة و تتجنب فتحها .

  • هل يوجد مثال على هذا النوع من الملفات ؟
يوجد مثال عملي على الموقع http://www.unforgettable.dk , و الملف الموجود في هذا الموقع تم تصميمه بتضمين العديد من الملفات المضغوطة معاُ مما يزيد من فعاليته في ايقاف عمل برنامج الحماية من الفيروسات .

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

  • المصادر :
  1. http://en.wikipedia.org/wiki/Decompression_bomb
  2. http://research.swtch.com/zip
  3. http://www.steike.com/code/useless/zip-file-quine

الأربعاء، 3 يوليو، 2013

المقارنة بين محتويات مجلدين في لينكس

بسم الله الرحمن الرحيم

يتواجد في نظام لينكس الأمر diff الذي يستخدم للمقارنة بين ملفين نصين و طباعة السطور المختلفة بين الملفين كالتالي :
diff 1.txt 2.txt

و في مثالنا لنفترض بأن الملف الأول 1.txt يحتوي على خمس أسطر و كل سطر يحتوي على الأعداد من 1 إلى 5 و الملف الثاني يحتوي على الأعداد من 1 إلى 6 :



و من الممكن أستخدام الأمر diff للمقارنة بين الملفات الموجودة في مجلدين مختلفين و طباعة الأختلاف بينهما بأستخدام الأمر التالي:

diff -rq 1/ 2/

يقوم هذا الأمر بالمقارنة بين المجلدين بواسطة أسماء الملفات الموجودة في كليهما بأستخدام إسم الملف و المحتوى , و هذه مثال عن تنفيذ هذا الأمر :

لماذا لا يوجد في نظام لينكس برنامج إلغاء التجزئة ؟

بسم الله الرحمن الرحيم

أذا كنت من مستخدمي نظام ويندوز المخضرمين فلا بد أنك تعاملت مع برنامج إلغاء التجزئة لزيادة سرعة و إنتاجية القرص الصلب :




لكي تفهم ما فائدة هذا البرنامج , يجب أن تفهم بأن نظام التشغيل يقوم بتقسيم القرص الصلب إلى واحدت محدودة المساحة , مشابهه بأدراج حفظ الملفات.
 و في أغلبية الأحيان فأن أي ملف سيشغل أكثر من درج , و من المنظور المنطقي فأن كلما كانت الأدراج متقاربة  و متسلسلة زادت سرعة الوصول للملف و العكس صحيح .

 و الأن لنشبه نظام الملفات في ويندوز بموظف يفتقر لمهارة التنظيم حيث يقوم بأخلاء الأدراج في حالة حذف الملف , و يقوم بتقسيم أجزاء الملفات الجديدة على أي درج خالي بغض النظر عن ترتيب الأدراج و المسافة بينهما, مما يؤدي تقسم الملف و بطأ الوصول للملفات و يستدعي أستخدام برنامج إلغاء التجزئة .

أما بالنسبة لنظام  الملفات في لينكس فسوف أشبه بموظف أكثر تنظيماُ يقوم بالبحث عن أفضل سلسلة من اﻷدراج و الأكثر تقارباً مما يسرع عملية الوصول للملف .

السبت، 22 يونيو، 2013

مشكلة العام 2038

بسم الله الرحمن الرحيم


  • ما هي مشكلة العام 2038 ؟

التاريخ الذي يتم عرضه في أنظمة التشغيل التي هو عبارة عن عدد الثواني منذ التاريخ 1 يناير 1970 , و يتم أستخدام رقم ثنائي بطول 32 بت يمثل عدد عشري مع الأشارة (singed number ) , و المشكلة بأن قدرة هذه العدد الثنائي على تمثيل الأعداد العشرية محدودة و سوف يصل إلى القيمة القصوى له بتاريخ 19 يناير 2038 .


هذه الصورة تمثل ماذا سيحصل في تاريخ 19 يناير 2038 , حيث أن العدد الثنائي سوف يعرض قيمة سالبة لعدد الثواني مما يؤدي لحدوث خطأ في النظام و من الممكن توقف النظام .

  • الحل 
عرض المبرمجون العديد من الحلول المختلفة للمشكلة مثل :

  1. استخدام عدد بدون الأشارة (unsigned number) مما يسمح للرقم بتمثل الأعداد الموجبة فقط , كما سيسمح بمثل مدى أقصى للأعداد .
  2. أستخدام عدد ثنائي بطول 64 بت بدل العدد الثنائي المستخدم في الأنظمة الحالية .

الثلاثاء، 9 أبريل، 2013

مقدمة في لغة awk

بسم الله الرحمن الرحيم




كتيب من تأليفي عن لغة awk يحتوي معلومات مبسطة عن هذه اللغة و استخدمتها بالأمثلة العملية .


الاثنين، 1 أبريل، 2013

كذبة إبريل : Google nose

أعلن محرك البحث Google على خدمة جديدة و هي Google nose و هذه الخدمة متخصص في البحث عن الروائح



بكل بساطة أدخل الرابط و أختر الرائحة لكي يتم عرضها لك بواسطة موجات الصوت الصادرة عن جهازك التي ستكون أيونات الرائحة .


أذا صدقت هذا الخبر فأعلم بأنك وقعت لمقلب من قبل مبرمجي قوقل فالتقليد المعروف لدى الأجانب بكذبة أبريل (April fools).

* للذين يقومون بتقليد الأجانب في هذه العادة تذكر حديث الرسول صلى الله عليه وسلم: "ويل للذي يحدث، فيكذب ليضحك به القوم، ويل له، ثم ويل له"

الثلاثاء، 11 ديسمبر، 2012

برمجة الألعاب مباشرة على الأي باد (ipad)

يتطلب تطوير البرامج لجهاز ipad حصولك على جهاز apple ماكنتوش و تسجيل حساب في موقع المطورون الخاص بشركة أبل , ثم رفع البرنامج لمتجر أبل و أنتظر الموافقة على البرنامج . 

هذه الخطوات يمكن أختصارها بالبرمجة مباشرة على ipad بأستخدام برنامج codea ( المعروف سابقاً بأسم codify) .

البرنامج يستخدم لغة lua للبرمجة , و يتميز بالعديد من الخصائص مثل الأكمال التلقائي و العديد من الخصائص الرائعة , و في النهاية هذا فيديو للبرنامج و رابط التنزيل لمتجر أبل


السبت، 13 أكتوبر، 2012

حل مشكلة الملفات المخفية في الفلاش المصابة بفيروس

بسم الله الرحمن الرحيم

تقوم معظم فيروسات التي تصيب الفلاش (Flash drive) بأخفاء الملفات و وضع أختصارات لتشغيل الفيروس عند عرض الملف .

و لقد واجهت هذه المشكلة لدى عدد من المدرسين في مدرستي و تكررت لدى كثير منهم , لذاسوف يكون هذا الموضوع عن حل هذه المشكلة , طبعا بعد إزالة الفيروس بأستخدام برنامج الحماية ( أو أقرأ هذا المقال ) .

الأحد، 7 أكتوبر، 2012

برمجة sniffer بواسطة البايثون (الجزء الثالث )

بسم الله الرحمن الرحيم

هذا رابط الجزء الثاني , و الجزء الأول و سيكون الجزء الثالث من هذه السلسة هو الدرس الأخير في كيفية برمجة sniffer بسيط بواسطة لغة بايثون .

و في هذا الدرس سوف نعتمد على المكتبة القياسية struct التي تستخدم لترميز البيانات الثنائية , و يتواجد على هذا الرابط شرح مبسط لهذه المكتبة .

 و هذا النص البرمجي الكامل لبرنامج sniffer بسيط :

#!/usr/bin/python

import socket

import struct



def packet_ip(data):

    ip_header=data[:20]

    iph=struct.unpack('!BBHHHBBH4s4s',ip_header)

    version_ihl=iph[0]

    version=version_ihl>>4

    ihl=version_ihl & 0xf0

    tos=iph[1]

    Tlength=iph[2]

    ID=iph[3]

    Flage=iph[4] >> 13

    offset=iph[4] & 0xe

    ttl=iph[5]

    protocol=iph[6]

    s_addr=socket.inet_ntoa(iph[8])

    d_addr=socket.inet_ntoa(iph[9])

    print """

Version : %s

IP Header Length : %s

TOS: %s

Total length : %s

Identification : %s

Flags : %s

Fragment offset : %s

TTL : %s

Protocol : %s

Destintation Address: %s

Soruce Address : %s

"""
% (str(version),str(ihl),str(tos),str(Tlength),str(ID),str(Flage),str(offset),str(ttl),str(protocol),str(s_addr),str(d_addr))



sos=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)

while 1:

    data=sos.recv(10245)

    packet_ip(data)

طبعاً على النص البرمجي للتوضيح و إيصال الفكرة فقط , و إذا إردت تطوير هذا النص يجب بأن تصمم class يحتوي على وظائف برمجية لأستخلاص كل قيمة في حزمة برتوكول IP .



الأربعاء، 19 سبتمبر، 2012

برمجة sniffer بواسطة البايثون (الجزء الثاني )

بسم الله الرحمن الرحيم

في الجزء الأول  شرحت كيفية تأسيس القابس الخام "Raw Socket" , و الأن سنبدأ في التعامل مع البيانات المستقبلة من القابس .

في حالة القابس الخام يترك للمبرمج التعامل مع برتوكولات الشبكة , و التعامل مع بنية الحزم لكل برتوكول , وسنبدأ بالبرتوكول IP .