Meniru berbagai perangkat dengan Pi Zero - bagaimana cara melakukannya?



Jika Anda ingin meniru adapter jaringan, keyboard, drive, dan yang lainnya dengan Pi Zero, semuanya pada saat bersamaan, Anda dapat melakukan semuanya. LibComposite datang untuk menyelamatkan, namun, dalam hal ini Anda harus ingat bahwa tidak ada solusi di bawah Windows, metode ini hanya cocok untuk Linux atau Mac OS X. Penjelasan terperinci tentang tindakan pengguna untuk mencapai hasil yang dijelaskan dalam header ada di sekuel ( sumber ).

Langkah 0 - konfigurasikan kartu SD


Unduh dan pasang distribusi Jessie Raspbian terbaru pada kartu SD yang sesuai (harus cukup luas), dan tambah partisi root.

Langkah 1 - Kernel


Anda perlu menggunakan Kernel 4.4, yang tidak datang secara default dengan distribusi Rasbian. Tetapi memperbarui cukup mudah, Anda hanya perlu menjalankan perintah konsol ini:

sudo BRANCH = pembaruan rpi berikutnya

Setelah itu, lakukan ini:

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


Akhirnya, aktifkan driver libcomposite:

sudo echo “libcomposite” | sudo tee -a / etc / modules

Langkah 2 - konfigurasikan perangkat


Sekarang Anda perlu memutuskan perangkat mana yang akan ditiru - kartu jaringan, keyboard, atau semua ini bersama-sama?

Kami mengkonfigurasi ini menggunakan ConfigFS, sistem file virtual di / sys /. Ini secara otomatis dipasang pada awal "raspberry", jadi di masa depan Anda dapat bekerja dengannya.
Ada contoh yang bagus untuk perangkat bernama USBArmory, contoh di sini . Segala sesuatu yang lain akan ditampilkan pada dasarnya.

Kami membuat skrip konfigurasi.

Anda harus menjalankannya setiap kali Anda memulai perangkat. Buat isticktoit_usb di / usr / bin / file menggunakan editor teks favorit Anda. Kami menulis ini:
sudo touch / usr / bin / isticktoit_usb #create file
sudo chmod + x / usr / bin / isticktoit_usb #membuatnya dapat dieksekusi
sudo nano / usr / bin / isticktoit_usb #edit file


Setelah itu, skrip harus dijalankan secara otomatis saat startup. Untuk kinerja terbaik, Anda dapat membuat file unit systemd, tetapi untuk sekarang, mari kita berkeliling rc.local. (Ini adalah bagian dari sistem sysvinit lama, tetapi berjalan pada raspberry pi secara default).

Buka root /etc/rc.local dan tambahkan baris (sebelum !!!) baris yang mengandung kata "exit":

sudo nano /etc/rc.local
/etc/rc.local.../usr
/ bin / isticktoit_usb # libcomposite
keluar konfigurasi


Membuat gadget

Ini adalah konfigurasi global, jadi tidak masalah berapa banyak gadget USB yang ingin Anda gunakan. Anda dapat mengubah nomor seri, pabrikan, dan nama produk di blok ini.

/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
# Akhiri fungsi
ls / sys / class / udc> UDC


Ethernet adapter

Pertama-tama, mari kita tambahkan ini ke file konfigurasi kami:

sudo nano / usr / bin / isticktoit_usb
/ usr / bin / isticktoit_usb # Tambahkan fungsi di sini
mkdir -p fungsi / ecm .usb0
# byte pertama alamat harus genap
HOST = "48: 6f: 73: 74: 50: 43" # "HostPC"
SELF = "42: 61: 64: 55: 53: 42" # "BadUSB"
echo $ PEMBAWA ACARA> functions / ecm.usb0 / host_addr
echo $ SELF> functions / ecm.usb0 / dev_addr
ln -s functions / ecm.usb0 konfigurasi / c.1 /
# Fungsi akhir
ls / sys / class / udc> UDC #
kirimkan ini di bagian paling akhir file:
ifconfig $ N 10.0.0.1 netmask 255.255.255.252 up
route add -net default gw 10.0.0.2


Kami menyimpan dan keluar, kemudian pergi ke PC host:
Jika ada masalah dengan koneksi otomatis, lepaskan dan lakukan ini:

dmesg | grep cdc_ether
[13890.668557] cdc_ether 1-1: 1.2 eth0: register 'cdc_ether' di usb-0000: 00: 14.0-1, CDC Ethernet Device, 48: 6f: 73: 74: 50: 43
[13890.674117] usbcore: terdaftar driver antarmuka baru cdc_ether
[13890.687619] cdc_ether 1-1: 1.2 enp0s20u1i2: diganti nama dari eth0 Anda dapat


mengganti nama adaptor meskipun setelah, sementara sebut saja enp0s20u1i2

sudo ifconfig enp0s20u1i2 10.0.0.2 netmask 255.255.255.252

dan terhubung melalui ssh ke PI:

ssh 10.0.0.1-l pi

Keyboard, mouse, joystick (HID)

sudo nano / usr / bin / isticktoit_usb
/ usr / bin / isticktoit_usb # Tambahkan fungsi di sini
mkdir -p fungsi / hid.usb0
echo 1> fungsi / hid.0 / protokol
gema 1> fungsi / hid.0 / subkelas
gema 8> fungsi / 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> fungsi / hid.0 / report_desc
ln - fungsi / hid.usb0 konfigurasi / c.1 /
# Akhiri fungsi


Berikut adalah cara termudah untuk mengirim penekanan tombol ke file perangkat:
echo "\ 0 \ 0 \ x4 \ 0 \ 0 \ 0 \ 0 \ 0"> / dev / hidg0 # tekan tombol-A
echo "\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0"> / dev / hidg0 # lepaskan semua kunci


Tapi ini bukan cara yang paling praktis, jadi Anda harus menggunakan contoh ini dan mengunduhnya ke PC Anda. Lalu kami mengekstraknya ke kartu SD "raspberry" dan memulainya.

Pada Pi:
cd PATH_TO_HARDPASS_REPO
buat #compile program
echo -n "hello world!" | sudo ./scan / dev / hidg0 1 2


Di sini ‚1 'berarti tata letak keyboard Amerika, dan" 2 "- Jerman-Austria. nomor kedua diperlukan untuk memasukkan karakter yang tidak ada di keyboard Anda (2 = Linux, 3 = Windows (meskipun tidak ada driver untuk OS ini)).

Berkendara

Ini lebih sulit dilakukan. Anda hanya dapat menggunakan file gambar disk. Contoh ini membuat file gambar disk yang sangat kecil untuk menyimpan konfigurasi host ethernet.
Pertama, mari kita buat disk. Ini adalah proses yang cukup panjang, tutorialnya ada di sini .
Kemudian lagi kita pergi ke konfigurasi:

sudo nano / usr / bin / isticktoit_usb
/ usr / bin / isticktoit_usb # Tambahkan fungsi di sini
FILE = / home / pi / usbdisk.img
mkdir -p $ {FILE / img / d}
mount -o loop, ro, offset = 1048576 -t ext4 $ FILE $ {FILE / img / d}
mkdir -p fungsi / mass_storage.usb0
echo 1> fungsi / mass_storage.usb0 / stall
echo 0> fungsi / mass_storage.usb0 / lun.0 / cdrom
gema 0> fungsi / mass_storage.usb0 / lun.0 / ro
echo 0> functions / mass_storage.usb0 / lun.0 / nofua
echo $ FILE> functions / mass_storage.usb0 / lun.0 / file
ln -s functions / mass_storage.usb0 configs / c.1 /
# Akhiri fungsi

Setelah itu harus ada tersedia disk yang dapat dilepas dalam format FAT32, yang akan ditampilkan setelah koneksi Pi berikutnya ke PC utama. Untuk mengakses file yang disimpan di Pi, Anda dapat menjalankan unmount dan menghubungkan kembali di tempat lain.

Apa lagi



Total ada sekitar 20 gadget USB yang dapat ditiru oleh kernel Linux. Berikut ini informasi lebih lanjut tentang ini !

Tautan yang berguna:
Tutorial oleh gbaman
libcomposite dalam dokumentasi Kernel
-> hardpass - PiZero project (emulasi Keyboad) <- USBArmory Wiki Page

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


All Articles