
جهاز افتراضي يعمل بنظام لينكس على جانب العميل يعمل في المتصفح عبر WebAssembly، مع شبكات Tailscale، وصور مخصصة قائمة على Dockerfile، ودعم تحديات CTF للتعليم والتطوير في مجال الأمن.
يستضيف هذا المستودع الكود المصدري لـ https://webvm.io، وهي آلة افتراضية تعمل بنظام لينكس في المتصفح.
جرب بيئة Alpine / Xorg / i3 الرسومية الجديدة: https://webvm.io/alpine.html
WebVM هي بيئة افتراضية بدون خادم تعمل بالكامل من جانب العميل في HTML5/WebAssembly. وهي مصممة لتكون متوافقة مع ABI لينكس وتشغيل توزيعة دبيان غير معدلة بما في ذلك العديد من أدوات التطوير الأصلية.
يعمل WebVM بواسطة محرك المحاكاة الافتراضية CheerpX، الذي يوفر:
[!NOTE] قم بزيارة https://webvm.io لتبدأ فورًا في متصفحك. لا حاجة لأي إعداد.
للإعداد المحلي وبناء الصور المخصصة وإرشادات النسخ/النشر، راجع التطوير والتخصيص.
يدعم WebVM دمج Tailscale. وبذلك يمكن لجهاز VM في متصفحك الوصول إلى شبكتك الخاصة، ومع عقدة الخروج، إلى الإنترنت العام أيضًا.
[!NOTE] بعض عمليات الشبكات منخفضة المستوى (خاصة ICMP المستخدمة بواسطة
ping) غير متوفرة حاليًا في هذه البيئة. لفحص الاتصال، استخدمcurlأوwget.
أصبح لدى WebVM الآن إمكانية الوصول إلى جميع الأجهزة في شبكة Tailscale الخاصة بك!
[!TIP] على الاتصالات البطيئة قد يكون هناك تأخير قصير قبل التهيئة. يتم عرض حالة الاتصال كنقطة ملونة على الزر: برتقالي = الشبكة المحلية، أخضر = عالمي/إنترنت. يعرض نص الزر عنوان IP الخاص بك في Tailscale بمجرد الاتصال.
للوصول إلى الإنترنت العام من WebVM، قم بإعداد عقدة خروج على جهاز آخر في شبكة Tailscale الخاصة بك:
كبديل لتسجيل الدخول التفاعلي، أضف مفتاح مصادقة Tailscale الخاص بك إلى جزء URL:
https://webvm.io/#authKey=<your-ephemeral-key>
هذا يعادل خيار --login-server في Tailscale.
[!TIP] إذا كنت بحاجة أيضًا إلى خادم تحكم مخصص، أضف
controlUrlفي نفس جزء URL وافصل القيم بـ&، على سبيل المثال:#authKey=...&controlUrl=....
نحن ندعم أيضًا headscale، وهو تطبيق مفتوح المصدر مستضاف ذاتيًا لخادم التحكم Tailscale. نظرًا لأن Headscale لا يضيف رؤوس CORS افتراضيًا، ستحتاج إلى وكيل أمامه. راجع وثائق إعداد الوكيل العكسي لـ Headscale للحصول على مثال.
بمجرد أن يصبح جاهزًا، أضف السطر التالي إلى الكتلة location / في ملف nginx.conf الخاص بك.
if ($http_origin = "https://yourdomain.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
ثم قم بالوصول إلى WebVM باستخدام:
https://yourdomain.com/#controlUrl=<your-headscale-url>
[!NOTE] المستخدمون لديهم صلاحيات الجذر افتراضيًا.
sudoغير مثبت، ولكن يمكن إضافته بسهولة إلى Dockerfile إذا لزم الأمر.
هذه سير عمل بسيطة ومبتدئة. للاستضافة المحلية والتخصيص، انظر أدناه الاستضافة المحلية وتكوين الصورة.
قم بنسخ مستودع WebVM لنشر نسختك الخاصة إلى GitHub Pages:
Deploy من الإجراءاتdeploy_to_github_pages
نفس سير عمل Deploy يقوم أيضًا ببناء صور قرص مخصصة .ext2 من Dockerfile. يمكنك توجيهه إلى dockerfiles/debian_mini أو Dockerfile آخر، ثم إما نشر النتيجة كأصل إصدار GitHub أو نشر بناء Pages من نسختك.
[!NOTE]
dockerfiles/debian_largeهي صورة كبيرة جدًا لـ GitHub Pages.
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/يتضمن هذا المستودع دليلاً ثابتًا custom-disk-images/ لملفات .ext2 المحلية.
لاستخدام صورة دبيان المصغرة الرسمية، قم بتنزيلها من الإصدارات:
debian_mini_20230519_5022088024.ext2
يمكنك أيضًا نسخ صورة قمت ببنائها بنفسك.
قم بتحرير config_public_terminal.js:
export const diskImageUrl =
"/custom-disk-images/debian_mini_20230519_5022088024.ext2";
export const diskImageType = "bytes";
npm install
npm run build
nginx -p . -c nginx.conf
ثم افتح http://127.0.0.1:8081 واستمتع بـ WebVM المحلي!
لبيئة سطح المكتب Alpine الكاملة، راجع leaningtech/alpine-image.
لمزيد من التفاصيل، راجع وثائق الصور المخصصة لـ CheerpX.
[!TIP] بالنسبة لـ REPL Python3، يأخذ سير عمل
Deployفي الاعتبارCMDالمحددة في Dockerfile.لبناء REPL يمكنك ببساطة تغيير
CMD [ "/bin/bash" ]إلىCMD [ "/usr/bin/python3" ]ونشر.
للوصول إلى Claude AI، تحتاج إلى مفتاح API. اتبع هذه الخطوات للبدء:
"حل تحدي CTF في /home/user/chall1.bin. لاحظ أن الملف الثنائي يقرأ من stdin."
هام: مفتاح API الخاص بك خاص ولا يجب مشاركته أبدًا. ليس لدينا إمكانية الوصول إلى مفتاحك، حيث يتم تخزينه محليًا فقط في متصفحك.
الإبلاغ عن المشكلات: استخدم GitHub Issues للإبلاغ عن الأخطاء أو طلب ميزات.
التحدث معنا: انضم إلى مجتمع Discord الخاص بنا لمناقشة WebVM ومشاركة الأفكار والحصول على المساعدة.
المقالات والموارد:
مثال على النشر:
التقنية وراء WebVM:
هذا المشروع مدعوم من:
الإصدارات:
يستخدم WebVM حزمة NPM CheerpX، التي يتم تحديثها في كل إصدار.
كل بناء غير قابل للتغيير. إذا كان إصدار معين يعمل بشكل جيد معك اليوم، فسيستمر في العمل إلى الأبد.
تم إصدار WebVM بموجب ترخيص Apache، الإصدار 2.0.
نرحب بك لاستخدام وتعديل وإعادة توزيع محتويات هذا المستودع.
يتم توفير نشر CheerpX العام كما هو ومجاني للاستخدام للاستكشاف التكنولوجي والاختبار والاستخدام من قبل الأفراد. أي استخدام آخر من قبل المؤسسات، بما في ذلك المؤسسات غير الربحية والأكاديمية والقطاع العام، يتطلب ترخيصًا. لا يُسمح بتنزيل بناء CheerpX بغرض استضافته في مكان آخر دون ترخيص تجاري.
اقرأ المزيد هنا حول ممارسات الترخيص لدينا.
إذا كنت ترغب في بناء منتج يعتمد على CheerpX/WebVM، يرجى الاطلاع على خيارات الترخيص الأخرى الخاصة بنا: ترخيص CheerpX أو اتصل بنا: [email protected]