محاكاة الأجهزة المختلفة باستخدام Pi Zero - كيف نفعل ذلك؟



إذا كنت تريد محاكاة محول الشبكة ولوحة المفاتيح ومحرك الأقراص وكل شيء آخر باستخدام Pi Zero ، كل ذلك في نفس الوقت ، يمكنك القيام بكل ذلك. يأتي LibComposite إلى الإنقاذ ، ومع ذلك ، في هذه الحالة ، يجب أن تتذكر أنه لا يوجد حل في نظام Windows ، فالطريقة مناسبة فقط لنظام Linux أو Mac OS X. يوجد وصف تفصيلي لإجراءات المستخدم لتحقيق النتيجة الموضحة في الرأس في تتمة ( المصدر ).

الخطوة 0 - تكوين بطاقة SD


قم بتنزيل أحدث إصدار من Raspbian Jessie وتثبيته على بطاقة SD مناسبة (يجب أن تكون ذات سعة كافية) ، وزيادة قسم الجذر.

الخطوة 1 - النواة


تحتاج إلى استخدام Kernel 4.4 ، والذي لا يأتي افتراضيًا مع التوزيع Rasbian. لكن التحديث سهل بما يكفي ، ما عليك سوى تنفيذ أمر وحدة التحكم هذا:

sudo BRANCH = next rpi-update

بعد ذلك ، قم بذلك:

echo "dtoverlay = dwc2" | sudo tee -a /boot/config.txt
صدى "dwc2" | sudo tee -a / etc / modules


أخيرًا ، قم بتنشيط برنامج تشغيل libcomposite:

sudo echo "libcomposite" | sudo tee -a / etc / modules

الخطوة 2 - تكوين الأجهزة


الآن أنت بحاجة إلى تحديد الجهاز الذي يجب محاكاته - بطاقة شبكة أو لوحة مفاتيح أو كل هذا معًا؟

نقوم بتكوين هذا باستخدام ConfigFS ، نظام الملفات الظاهري في / sys /. يتم تثبيته تلقائيًا في بداية "التوت" ، لذلك يمكنك العمل معه في المستقبل.
هناك مثال رائع لجهاز يسمى USBArmory ، مثال هنا . سيتم عرض كل شيء آخر على أساسه.

ننشئ نصًا برمجيًا للتكوين.

سيتعين عليك تشغيله في كل مرة تبدأ فيها تشغيل الجهاز. قم بإنشاء isticktoit_usb في / usr / bin / file باستخدام محرر النصوص المفضل لديك. نكتب هذا:
sudo touch / usr / bin / isticktoit_usb # إنشاء الملف
sudo chmod + x / usr / bin / isticktoit_usb # جعله قابل للتنفيذ
sudo nano / usr / bin / isticktoit_usb # تحرير الملف


بعد ذلك ، يجب تشغيل البرنامج النصي تلقائيًا عند بدء التشغيل. للحصول على أفضل أداء ، يمكنك إنشاء ملف وحدة systemd ، ولكن الآن ، دعنا نتجول في rc.local. (هذا جزء من نظام sysvinit القديم ، ولكنه يعمل على التوت pi افتراضيًا).

فتح كما /etc/rc.local الجذر وإضافة السطر التالي (في الجبهة !!!) السطر الذي يحتوي على كلمة «الخروج»:

سودو نانو /etc/rc.local
/etc/rc.local ...
/ البيرة / بن / دليل isticktoit_usb # libcomposite
إنهاء التكوين


إنشاء أداة ذكية

هذا تكوين عام ، لذلك لا يهم عدد أدوات USB التي ترغب في استخدامها. يمكنك تغيير الرقم التسلسلي والشركة المصنعة واسم المنتج في هذه الكتلة.

/usr/bin/isticktoit_usbcd /sys/kernel/config/usb_gadget/
mkdir -p isticktoit
cd isticktoit
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
mkdir -p strings/0x409
echo «fedcba9876543210» > strings/0x409/serialnumber
echo «Tobias Girstmair» > strings/0x409/manufacturer
echo «iSticktoit.net USB Device» > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo «Config 1: ECM network» > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
# Add functions here
# see gadget configurations below
# وظائف النهاية
ls / sys / class / udc>


محول UDC Ethernet

أولاً وقبل كل شيء ، دعنا نضيف هذا إلى ملف التكوين الخاص بنا:

sudo nano / usr / bin / isticktoit_usb
/ usr / bin / isticktoit_usb # أضف وظائف هنا
mkdir -p وظائف / ecm
يجب أن يكون .usb0 # البايت الأول من العنوان
HOST = "48: 6f: 73: 74: 50: 43" # "HostPC"
SELF = "42: 61: 64: 55: 53: 42" # "BadUSB"
صدى $ HOST> وظائف / ecm.usb0 / host_addr
echo $ SELF> وظائف / ecm.usb0 / dev_addr
ln -s وظائف / ecm.usb0 configs / c.1 /
# إنهاء وظائف
ls / sys / class / udc> UDC
# أدخل هذا في نهاية الملف:
ifconfig $ N 10.0.0.1 netmask 255.255.255.252 up
route add -net default gw 10.0.0.2


نحفظ ونخرج ، ثم ننتقل إلى الكمبيوتر المضيف:
إذا كانت هناك مشاكل في الاتصال التلقائي ، فقم بفعل ذلك وقم بذلك:

dmesg | grep cdc_ether
[13890.668557] cdc_ether 1-1: 1.2 eth0: تسجيل "cdc_ether" على usb-0000: 00: 14.0-1 ، جهاز CDC Ethernet ، 48: 6f: 73: 74: 50: 43
[13890.674117] USBcore: برنامج تشغيل الواجهة الجديدة المسجل cdc_ether
[13890.687619] cdc_ether 1-1: 1.2 enp0s20u1i2: تمت إعادة تسميته من eth0 يمكنك


إعادة تسمية المحول حتى بعد ذلك ، بينما دعنا نسميها enp0s20u1i2

sudo ifconfig enp0s20u1i2 10.0.0.2 netmask 255.255.255.252 لأعلى

وقم بالاتصال عبر ssh بـ PI:

ssh 10.0.0.1 -l pi

لوحة المفاتيح والماوس وعصا التحكم (HID)

sudo nano / usr / bin / isticktoit_usb
/ usr / bin / isticktoit_usb # أضف دالات هنا
mkdir -p function / hid.usb0
echo 1> function / hid.0 / protocol
echo 1> function / hid.0 / subclass
echo 8> function / hid.0 / report_length
echo - ne \\ x05 \\ x01 \\ x09 \\ x06 \\ xa1 \\ x01 \\ x05 \\ x07 \\ x19 \\ xe0 \\ x29 \\ xe7 \\ x15 \\ x00 \\ x25 \\ x01 \ \ x75 \\ x01 \\ x95 \\ x08 \\ x81 \\ x02 \\ x95 \\ x01 \\ x75 \\ x08 \\ x81 \\ x03 \\ x95 \\ x05 \\ x75 \\ x01 \\ x05 \\ x08 \\ x19 \\ x01 \\ x29 \\ x05 \\ x91 \\ x02 \\ x95 \\ x01 \\ x75 \\ x03 \\ x91 \\ x03 \\ x95 \\ x06 \\ x75 \\ x08 \\ x15 \\ x00 \\ x25 \\ x65 \\ x05 \\ x07 \\ x19 \\ x00 \\ x29 \\ x65 \\ x81 \\ x00 \\ xc0> وظائف / hid.0 / report_desc
ln - وظائف s / hid.usb0 configs / c.1 /
# إنهاء الوظائف


إليك أسهل طريقة لإرسال ضغطات المفاتيح إلى ملف الجهاز:
echo "\ 0 \ 0 \ x4 \ 0 \ 0 \ 0 \ 0 \ 0"> / dev / hidg0 # اضغط على الزر A
echo "\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0"> / dev / hidg0 # أصدر كل المفاتيح


ولكن هذه ليست الطريقة الأكثر عملية ، لذا يجب عليك استخدام هذا المثال وتنزيله على جهاز الكمبيوتر الخاص بك. ثم نقوم باستخراجها على بطاقة SD "raspberry" ونبدأ تشغيلها.

على Pi:
cd PATH_TO_HARDPASS_REPO
جعل # تجميع برنامج
echo -n "hello world!" | sudo ./scan / dev / hidg0 1 2


هنا ‚1 تعني تخطيط لوحة المفاتيح الأمريكية ، و" 2 "- الألمانية-النمساوية. الرقم الثاني مطلوب لإدخال الأحرف غير الموجودة على لوحة المفاتيح (2 = Linux ، 3 = Windows (على الرغم من عدم وجود برامج تشغيل لنظام التشغيل هذا)).

القيادة

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

sudo nano / usr / bin / isticktoit_usb
/ usr / bin / isticktoit_usb # أضف وظائف هنا
FILE = / home / pi / usbdisk.img
mkdir -p $ {FILE / img / d}
mount -o loop، ro ، offset = 1048576 -t ext4 $ FILE $ {FILE / img / d}
mkdir -p Functions / mass_storage.usb0
echo 1> function / mass_storage.usb0 / stall
echo 0> function / mass_storage.usb0 / lun.0 / cdrom
echo 0> function / mass_storage.usb0 / lun.0 / ro
echo 0> function / mass_storage.usb0 / lun.0 / nofua
echo $ FILE> function / mass_storage.usb0 / lun.0 / file
ln -s functions / mass_storage.usb0 configs / c.1 /
# إنهاء الوظائف

بعد ذلك يتوفر قرص قابل للإزالة بتنسيق FAT32 ، والذي سيتم عرضه بعد اتصال Pi التالي بالكمبيوتر الرئيسي. للوصول إلى الملفات المخزنة على Pi ، يمكنك تشغيل إلغاء تحميل ثم إعادة توصيله في مكان آخر.

ماذا ايضا؟



في المجموع هناك حوالي 20 أداة USB يمكن محاكاتها بواسطة نواة لينكس. هنا مزيد من المعلومات حول هذا !

روابط مفيدة: برنامج
تعليمي من gbaman
libcomposite في وثائق Kernel
-> hardpass - مشروع PiZero (محاكاة Keyboad) <- صفحة USBArmory Wiki

Source: https://habr.com/ru/post/ar391099/


All Articles