Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
rdpscan — ماسح سريع للثغرة CVE-2019-0708 'BlueKeep'. | Kitploit
أدوات/GitHubGitHub/robertdavidgraham/rdpscan
ماسحات الثغرات الأمنيةالاستغلالأمن الشبكات
GitHubrobertdavidgraham/rdpscan

rdpscan

ماسح سريع للثغرة CVE-2019-0708 'BlueKeep'.

عرض المستودع
921237منذ 7 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Windows download macOS download Linux download Follow Build

rdpscan لثغرة CVE-2019-0708 bluekeep

هذه أداة مسح سريعة وغير متقنة لثغرة CVE-2019-0708 في سطح المكتب البعيد من مايكروسوفت. حاليًا، هناك حوالي 900,000 جهاز على الإنترنت العام معرض لهذه الثغرة، لذا من المتوقع ظهور دودة قريبًا مثل WannaCry و notPetya. لذلك، امسح شبكاتك وقم بتصحيح (أو على الأقل، تفعيل NLA) على الأنظمة المعرضة للخطر.

هذه أداة سطر أوامر. يمكنك تحميل المصدر وتجميعه بنفسك، أو تحميل أحد الملفات الثنائية المجمعة مسبقًا لـ ويندوز أو ماك من الرابط أعلاه.

هذه الأداة مبنية بالكامل على تصحيح rdesktop من https://github.com/zerosum0x0/CVE-2019-0708. لقد قمت ببساطة بتقليص الكود حتى أتمكن من التجميع بسهولة على ماك وويندوز، بالإضافة إلى إضافة القدرة على مسح أهداف متعددة.

الحالة

هذه الأداة عمرها بضعة أيام فقط وهي تجريبية. ومع ذلك، فأنا أختبرها عن طريق مسح الإنترنت بالكامل (بمساعدة masscan)، لذا أعمل على حل العديد من المشاكل بسرعة كبيرة. يمكنك محاولة الاتصال بي على تويتر (@erratarob) للمساعدة/التعليقات.

  • 2019-05-38 - أوصاف أفضل لنتائج المخرجات، بالإضافة إلى توثيق معناها (انظر أدناه).
  • 2019-05-27 - إصدار الملفات الثنائية لويندوز وماك (انقر على الشارات أعلاه).
  • 2019-05-26 - إصلاح مشاكل الشبكة في ويندوز
  • 2019-05-25 - لينكس وماك يعملان بشكل جيد، ويندوز لديه بعض أخطاء الشبكة
  • 2019-05-24 - يعمل على لينكس وماك، ويندوز لديه بعض أخطاء التجميع
  • 2019-05-23 - يعمل حاليًا على ماك داخل XCode

الاستخدام الأساسي

لمسح شبكة، قم بتشغيله كما يلي:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

ينتج عن هذا واحدة من 3 نتائج لكل عنوان:

  • SAFE - إذا تم تحديد أن الهدف مصحح أو على الأقل يتطلب CredSSP/NLA
  • VULNERABLE - إذا تم تأكيد أن الهدف معرض للخطر
  • UNKNOWN - إذا لم يستجب الهدف أو كان هناك فشل في البروتوكول

عندما لا يوجد شيء في عنوان IP مستهدف، كانت الإصدارات الأقدم تطبع الرسالة "UNKNOWN - connection timed out". عند مسح شبكات كبيرة، ينتج عن هذا حمولة زائدة من المعلومات عن أنظمة لا تهمك. لذلك، الإصدار الجديد لا ينتج هذه المعلومات افتراضيًا إلا إذا أضفت -v (للإسهاب) في سطر الأوامر.

يمكنك زيادة سرعة المسح للشبكات الكبيرة عن طريق زيادة عدد العمال:

root@kitploit:~
rdpscan --workers 10000 10.0.0.0/8

ومع ذلك، على جهاز الكمبيوتر الخاص بي، ينتج حوالي 1500 عامل فقط، بسبب قيود النظام، بغض النظر عن مدى ارتفاع هذه المعلمة.

يمكنك زيادة السرعة أكثر باستخدام هذا مع masscan، كما هو موصوف في القسم الثاني أدناه.

تفسير النتائج

هناك ثلاثة استجابات عامة:

  • SAFE - يعني أن الهدف ربما تم تصحيحه أو غير معرض للثغرة.
  • VULNERABLE: يعني أننا أكدنا أن الهدف معرض لهذه الثغرة، وأنه عندما تضرب الدودة، فمن المرجح أن يصاب.
  • UNKNOWN: يعني أننا لا نستطيع التأكيد بأي من الاتجاهين، عادةً لأن الهدف لا يستجيب أو لا يعمل عليه RDP، وهو الغالبية العظمى من الردود. أيضًا، عندما تكون الأهداف خارج الموارد أو تواجه مشاكل في الشبكة، سنحصل على الكثير من هذه. أخيرًا، أخطاء البروتوكول مسؤولة عن الكثير. بينما الاستجابات الرئيسية الثلاث هي SAFE و VULNERABLE و UNKNOWN، تحتوي على نص إضافي يشرح التشخيص. يصف هذا القسم السلاسل المختلفة التي ستراها.

SAFE

هناك ثلاثة أسباب رئيسية نعتقد أن الهدف آمن:

  • SAFE - Target appears patched يحدث هذا عندما لا يستجيب الهدف للطلب المحفز. يعني هذا أنه نظام ويندوز تم تصحيحه، أو نظام لم يكن معرضًا للخطر من البداية، مثل Windows 10 أو Unix.
  • SAFE - CredSSP/NLA required يعني هذا أن الهدف يتطلب أولاً Network Level Authentication قبل أن يتم إنشاء اتصال RDP. لا يمكن للأداة تجاوز هذه النقطة، بدون بيانات اعتماد شرعية، لذا لا يمكن تحديد ما إذا كان الهدف قد تم تصحيحه. ومع ذلك، لا يمكن للمتسللين أيضًا تجاوز هذه النقطة لاستغلال الأنظمة المعرضة، لذا فأنت على الأرجح "آمن". ومع ذلك، عند ظهور عمليات الاستغلال، سيتمكن المخترقون الداخليون الذين لديهم أسماء مستخدمين/كلمات مرور صالحة من استغلال النظام إذا لم يتم تصحيحه.
  • SAFE - not RDP يعني هذا أن النظام ليس RDP، ولكن لديه خدمة أخرى تستخدم نفس المنفذ، وتنتج استجابة ليست RDP بوضوح. الأمثلة الشائعة هي HTTP و SSH. لاحظ أنه بدلاً من بروتوكول يمكن التعرف عليه، قد يستجيب الخادم بحزمة RST أو FIN. يتم تحديد هذه على أنها UNKNOWN بدلاً من SAFE/

VULNERABLE

يعني هذا أننا أكدنا أن النظام معرض للثغرة.

  • VULNERABLE - got appid لا يوجد سوى استجابة واحدة عندما يكون النظام معرضًا، وهي هذه.

UNKNOWN

هناك عدد لا يحصى من الاختلافات لـ UNKNOWN

  • UNKNOWN - no connection - timeout هذه هي الاستجابة الأكثر شيوعًا إلى حد بعيد، وتحدث عندما لا يصدر عنوان IP الهدف أي استجابة على الإطلاق. في الواقع، إنها شائعة جدًا لدرجة أنه عند مسح نطاقات كبيرة من العناوين، عادةً ما يتم حذفها. يجب عليك إضافة علامة -v (الإسهاب) لتفعيلها.
  • UNKNOWN - no connection - refused (RST) هذه هي ثاني أكثر الاستجابات شيوعًا، وتحدث عندما يكون الهدف موجودًا ويستجيب لحركة الشبكة، ولكن لا يعمل عليه RDP، لذا يرفض الاتصال بحزمة TCP RST.
  • UNKNOWN - RDP protocol error - receive timeout هذه ثالث أكثر الاستجابات شيوعًا، وتحدث عندما نكون قد أنشأنا اتصال RDP بنجاح، لكن الخادم يتوقف بعد ذلك عن الاستجابة لنا. هذا بسبب أخطاء الشبكة وعندما يكون النظام الهدف محملاً بشكل زائد لسبب ما. قد يكون أيضًا أخطاء شبكة من هذه النهاية، مثل عندما تكون خلف NAT وتحمله بشكل زائد بالكثير من الاتصالات.
  • UNKNOWN - no connection - connection closed يعني هذا أننا أنشأنا اتصال (TCP SYN-ACK)، ولكن بعد ذلك يتم إغلاق الاتصال فورًا (مع RST أو FIN). هناك العديد من الأسباب التي تجعل هذا يحدث، والتي لا يمكننا تمييزها:
    • يعمل عليه RDP، ولكن لسبب ما يغلق الاتصال، ربما لأنه خارج الموارد.
    • ليس RDP، ولا يعجبه طلب RDP الذي نرسله إليه، لذلك بدلاً من إرسال رسالة خطأ لطيفة (والتي كانت ستؤدي إلى SAFE - not RDP)، يغلق الاتصال فجأة.
    • جهاز وسيط، مثل IPS أو جدار حماية أو NAT، أغلق الاتصال لأنه حدد هذا على أنه عدائي، أو نفدت موارده.
    • سبب آخر لم أتعرف عليه، هناك الكثير من الأشياء الغريبة التي تحدث عندما أمسح الإنترنت.
  • UNKNOWN - no connection - host unreachable (ICMP error) الشبكة البعيدة تبلغ أن المضيف لا يمكن الوصول إليه أو لا يعمل. حاول مرة أخرى لاحقًا إذا كنت تعتقد أن المضيف يجب أن يكون نشطًا.
  • UNKNOWN - no connection - network unreachable (ICMP error) يوجد خطأ شبكة (مؤقت) في الطرف البعيد، حاول مرة أخرى لاحقًا إذا كنت تعتقد أن تلك الشبكة يجب أن تعمل.
  • UNKNOWN - RDP protocol error يعني هذا أن بعض الفساد حدث في بروتوكول RDP، إما لأن الطرف البعيد يطبقه بشكل خاطئ (ليس نظام ويندوز)، أو لأنه يعالج خطأ شبكة مؤقت بشكل سيء، أو شيء آخر.
  • UNKNOWN - SSL protocol error منذ Windows Vista، يستخدم RDP بروتوكول STARTTLS للتشغيل عبر SSL. هذه الطبقة لها مشاكلها الخاصة مثل ما ورد أعلاه، والتي تشمل معالجة أخطاء الشبكة الأساسية بشكل سيء، أو محاولة التواصل مع أنظمة لديها نوع من عدم التوافق. إذا حصلت على رسالة خطأ طويلة جدًا هنا (مثل SSL3_GET_RECORD:wrong version)، فهذا لأن الجانب الآخر لديه خطأ في SSL، أو مكتبة SSL الخاصة بك التي تستخدمها بها خطأ.

الاستخدام مع masscan

أداة rdpscan هذه بطيئة إلى حد ما، حيث تمسح بضع مئات من الأهداف فقط في الثانية. يمكنك بدلاً من ذلك استخدام masscan لتسريع الأمور. أداة masscan أسرع بحوالي 1000 مرة، ولكنها تعطي معلومات محدودة فقط عن الهدف.

الخطوات هي:

  • أولاً امسح نطاقات العناوين باستخدام masscan للعثور بسرعة على المضيفين الذين يستجيبون على المنفذ 3389 (أو أي منفذ تستخدمه).
  • ثانيًا قم بتغذية مخرجات masscan إلى rdpscan، بحيث يمسح فقط الأهداف التي نعرف أنها نشطة.

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

root@kitploit:~
masscan 10.0.0.0/8 -p3389 | rdpscan --file -

الطريقة التي أفعل بها ذلك هي في خطوتين:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt

البناء

الجزء الصعب هو الحصول على مكتبات OpenSSL المثبتة، وعدم تعارضها مع الإصدارات الأخرى على النظام. بعض الأمثلة لإصدارات لينكس التي اختبرتها عليها هي ما يلي، لكنها تستمر في تغيير أسماء الحزم من توزيعة إلى أخرى. أيضًا، هناك العديد من الخيارات لواجهة برمجة تطبيقات متوافقة مع OpenSSL، مثل BoringSSL و LibreSSL.

root@kitploit:~
$ sudo apt install libssl-dev
$ sudo yum install openssl-devel

بمجرد حل هذه المشكلة، يمكنك فقط تجميع جميع ملفات .c معًا مثل هذا:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -o rdpscan

لقد وضعت ملف Makefile في الدليل يقوم بذلك، لذا يمكنك على الأرجح القيام بما يلي:

root@kitploit:~
$ make

الكود مكتوب بلغة C، لذا يحتاج إلى مترجم C مثبت، مثل القيام بما يلي:

root@kitploit:~
$ sudo apt install build-essential

أخطاء البناء الشائعة

يصف هذا القسم أخطاء البناء الأكثر وضوحًا.

root@kitploit:~
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory

يعني هذا أنك إما لا تملك رؤوس OpensSSL المثبتة، أو أنها ليست في مسار ما. تذكر أنه حتى إذا كان لديك ملفات OpenSSL الثنائية مثبتة، فهذا لا يعني أن لديك مواد التطوير مثبتة. تحتاج إلى كل من الرؤوس والمكتبات المثبتة.

لتثبيت هذه الأشياء على Debian، قم بما يلي:

root@kitploit:~
$ sudo apt install libssl-dev

لإصلاح مشكلة المسار، أضف علامة تجميع -I/usr/local/include، أو شيء مشابه.

مثال على مشكلة رابط هو ما يلي:

root@kitploit:~
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
    _rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
    _rdssl_cert_to_rkey in ssl-d5fdf5.o

أحصل على هذا على macOS لأن هناك إصدارات متعددة من OpenSSL. أقوم بإصلاح هذا عن طريق ترميز المسارات بشكل ثابت:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan

وفقًا لتعليقات الآخرين، قد يعمل سطر الأوامر التالي على macOS إذا كنت قد استخدمت Homebrew لتثبيت الأشياء. ما زلت أحصل على أخطاء الربط أعلاه، مع ذلك، لأنني قمت بتثبيت مكونات OpenSSL أخرى تتعارض.

root@kitploit:~
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c

التشغيل

يقدم القسم أعلاه نصائح سريعة لتشغيل البرنامج. يقدم هذا القسم مساعدة أكثر تفصيلاً.

لمسح هدف واحد، فقط مرر عنوان الهدف:

root@kitploit:~
./rdpscan 192.168.10.101

يمكنك تمرير عناوين IPv6 وأسماء DNS. يمكنك تمرير أهداف متعددة. مثال على ذلك:

root@kitploit:~
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1

يمكنك أيضًا مسح نطاقات من العناوين، باستخدام عناوين IPv4 بداية-نهاية، أو مواصفات CIDR لـ IPv4. نطاقات IPv6 غير مدعومة لأنها كبيرة جدًا.

root@kitploit:~
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16

افتراضيًا، يمسح فقط 100 هدف في المرة الواحدة. يمكنك زيادة هذا الرقم باستخدام المعامل --workers. ومع ذلك، بغض النظر عن مدى ارتفاع هذه المعلمة، في الممارسة العملية ستحصل على حد أقصى يتراوح بين 500 إلى 1500 عامل يعملون في وقت واحد، اعتمادًا على نظامك.

root@kitploit:~
./rdpscan --workers 1000 10.0.0.0/24

بدلاً من تحديد الأهداف في سطر الأوامر، يمكنك تحميلها من ملف بدلاً من ذلك، باستخدام المعامل --file المسمى جيدًا:

root@kitploit:~
./rdpscan --file ips.txt

تنسيق الملف هو عنوان واحد، أو اسم، أو نطاق لكل سطر. يمكنه أيضًا استهلاك النص الناتج عن masscan. يتم تقليم المسافات البيضاء الزائدة، يتم تجاهل الأسطر الفارغة، ويتم تجاهل أي أسطر تعليق. التعليق هو سطر يبدأ بالحرف #، أو أحرف //.

يتم إرسال المخرجات إلى stdout مع إعطاء حالة VULNERABLE أو SAFE أو UNKNOWN. يمكن أن تكون هناك أسباب إضافية لكل منها. تم وصف هذه الأسباب أعلاه.

root@kitploit:~
211.101.37.250 - SAFE - CredSSP/NLA required
185.11.124.79 - SAFE - not RDP - SSH response seen
125.121.137.42 - UNKNOWN - no connection - refused (RST)
40.117.191.215 - SAFE - CredSSP/NLA required
121.204.186.182 - SAFE - CredSSP/NLA required
99.8.11.148 - SAFE - CredSSP/NLA required
121.204.186.114 - SAFE - CredSSP/NLA required
49.50.145.236 - SAFE - CredSSP/NLA required
106.12.74.155 - VULNERABLE - got appid
222.84.253.26 - SAFE - CredSSP/NLA required
144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout
199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout
183.134.58.152 - UNKNOWN - no connection - refused (RST)
83.162.246.149 - VULNERABLE - got appid

يمكنك معالجة هذا بأوامر unix إضافية مثل grep و cut. للحصول على قائمة بالآلات المعرضة فقط:

root@kitploit:~
./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'

المعامل -dddd يعني معلومات تشخيصية، حيث كلما زاد عدد ds التي تضيفها، زادت التفاصيل المطبوعة. يتم إرسال هذا إلى stderr بدلاً من stdout حتى تتمكن من فصل التدفقات. باستخدام bash يتم ذلك على النحو التالي:

root@kitploit:~
./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt

معلومات تشخيصية

إضافة المعامل -d يقوم بتفريغ معلومات تشخيصية حول الاتصالات إلى stderr.

root@kitploit:~
./rdpscan 62.15.34.157 -d

[+] [62.15.34.157]:3389 - connecting...
[+] [62.15.34.157]:3389 - connected from [10.1.10.133]:49211
[+] [62.15.34.157]:3389 - SSL connection
[+] [62.15.34.157]:3389 - version = v4.8
[+] [62.15.34.157]:3389 - Sending MS_T120 check packet
[-] [62.15.34.157]:3389 - Max sends reached, waiting...
62.15.34.157    - SAFE - Target appears patched

على macOS/Linux، يمكنك إعادة توجيه stdout و stderr بشكل منفصل إلى ملفات مختلفة بالطريقة المعتادة:

root@kitploit:~
./rdpscan --file ips.txt 2> diag.txt 1> results.txt

SOCKS5 و Tor للمتعة

لذا فهي تتضمن دعم SOCKS5:

root@kitploit:~
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050

يجعل مشاكل الاتصال أسوأ لذلك تحصل على عدد أكبر بكثير من نتائج "UNKNOWN".

ربط OpenSSL بشكل ثابت

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

تبدأ كلتا الخطوتين بتنزيل مصدر OpenSSL ووضعه بجوار دليل rdpscan:

root@kitploit:~
git clone https://github.com/openssl/openssl

ويندوز

للويندوز، تحتاج أولاً إلى تثبيت إصدار من Perl. أستخدم الإصدار من ActiveState.

بعد ذلك، ستحتاج إلى "مُجمّع" خاص. أستخدم الموصى به المسمى NASM)

بعد ذلك، ستحتاج إلى مترجم. أستخدم VisualStudio 2010. يمكنك تنزيل أحدث "Visual Studio Community Edition" (وهو 2019) بدلاً من ذلك من مايكروسوفت.

الآن أنت بحاجة لبناء ملف makefile. يتم ذلك بالذهاب إلى دليل OpenSSL وتشغيل برنامج Perl Configure:

root@kitploit:~
perl Configure VC-WIN32

اخترت 32 بت لويندوز لأن هناك الكثير من إصدارات ويندوز القديمة، وأريد جعل البرنامج متوافقًا قدر الإمكان مع الإصدارات القديمة.

أريد بناءًا ثابتًا تمامًا، بما في ذلك وقت تشغيل C. للقيام بذلك، قمت بفتح ملف makefile الناتج في محرر، وقمت بتغيير علامة تجميع C من /MD (بمعنى استخدام DLLs) إلى /MT. بينما كنت هناك، أضفت ما يلي إلى CPPFLAGS -D_WIN32_WINNT=0x501، مما يقيد OpenSSL بالميزات التي تعمل على Windows XP و Server 2003. وإلا، ستحصل على أخطاء تفيد بعدم العثور على bcrypt.dll إذا قمت بتشغيلها على تلك الأنظمة القديمة.

الآن ستحتاج للتأكد من أن كل شيء في مسارك. قمت بنسخ nasm.exe إلى دليل في PATH. لـ Visual Studio 2010، قمت بتشغيل البرنامج vcvars32.bat لإعداد متغيرات المسار للمترجم.

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

root@kitploit:~
nmake

هذا يصنع المكتبات. الثابتة هي libssl_static.lib و libcrypto_static.lib، والتي أستخدمها للربط في rdpscan.

macOS

أولاً، تحتاج إلى تثبيت مترجم. أستخدم أدوات المطور من Apple، بتثبيت XCode والمترجم. أعتقد أنه يمكنك استخدام Homebrew لتثبيت gcc بدلاً من ذلك.

ثم اذهب إلى دليل المصدر لـ OpenSSL وأنشئ ملف makefile:

root@kitploit:~
perl Configure darwin64-x86_64-cc

الآن فقط قم ببنائه:

root@kitploit:~
make depend
make

عند هذه النقطة، قام بإنشاء كل من المكتبات الديناميكية (.dylib) والثابتة (.lib). حذفت المكتبات الديناميكية بحيث يتم استخدام المكتبات الثابتة افتراضيًا.

الآن في rdpscan، فقط قم ببناء ملف makefile لـ macOS:

root@kitploit:~
make -f Makefile.macos

سيقوم هذا بتجميع جميع ملفات مصدر rdpscan، ثم الربط بمكتبات OpenSSL في الدليل ../openssl الذي قمت ببنائه للتو.

يجب أن ينتج هذا ملفًا تنفيذيًا بحجم 3 ميغابايت. إذا حصلت بدلاً من ذلك على ملف تنفيذي بحجم 200 كيلوبايت فقط، فقد أخطأت وربطت بالمكتبات الديناميكية بدلاً من ذلك.

تنزيل الأداة