使用Pi Zero模拟各种设备-怎么做?



如果您想同时使用Pi Zero模拟网络适配器,键盘,驱动器以及其他所有功能,则可以全部完成。LibComposite可助您一臂之力,但是,在这种情况下,您需要记住,在Windows下没有解决方案,该方法仅适用于Linux或Mac OSX。在续集()中详细介绍了用户为实现标题所描述的结果而进行的操作

步骤0-配置SD卡


在合适的SD卡上下载并安装最新的Raspbian Jessie发行版(应该足够大),并增加根分区。

第1步-内核


您需要使用内核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 /模块

第2步-配置设备


现在,您需要确定要模拟的设备-网卡,键盘或所有这些一起使用吗?

我们使用ConfigFS(/ sys /中的虚拟文件系统)进行配置。它会自动安装在“树莓”的开头,因此将来您可以使用它。
有一个很好的例子,称为USBArmory的设备,这里是一个例子。其他所有内容都将根据其显示。

我们创建了一个配置脚本

,每次启动设备时都必须运行它。使用您喜欢的文本编辑器在/ usr / bin /文件中创建isticktoit_usb。我们这样写:
sudo touch / usr / bin / isticktoit_usb#创建文件
sudo chmod + x / usr / bin / isticktoit_usb#使其可执行
sudo nano / usr / bin / isticktoit_usb#编辑文件


之后,脚本必须在启动时自动运行。为了获得最佳性能,您可以创建一个systemd单元文件,但是现在,让我们解决rc.local。 (这是旧sysvinit系统的一部分,但是默认情况下它在树莓派上运行)。

打开根目录/etc/rc.local并添加一行(在!!!之前),其中包含单词“ exit”:

sudo nano /etc/rc.local
/etc/rc.local.../usr
/ bin / 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


以太网适配器

首先,让我们将其添加到我们的配置文件中:

sudo nano / usr / bin / isticktoit_usb
/ usr / bin / isticktoit_usb#在此处添加函数
mkdir -p函数/ ecm .usb0
#地址的第一个字节必须为偶数
= =“ 48:6f:73:74:50:43”#“ HostPC”
SELF =“ 42:61:64:55:53:42”#“ BadUSB”
echo $ 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 1​​0.0.0.2


我们保存并退出,然后转到主机PC:
如果自动连接存在问题,请断开连接并执行以下操作:

dmesg | grep cdc_ether
[13890.668557] cdc_ether 1-1:1.2 eth0:在usb-0000:00注册'cdc_ether': 14.0-1,CDC以太网设备,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函数/ hid.usb0
回声1>函数/ hid.0 /协议
回声1>函数/ hid.0 /子类
回声8>函数/ hid.0 / report_length
回声- 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 \\ \\ X15 X08 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#释放所有键


但这不是最实用的方法,因此您应该使用此示例并将其下载到PC。然后,将其提取到“树莓” SD卡中并启动它。

在Pi上:
cd PATH_TO_HARDPASS_REPO
使#compile程序
echo -n“ hello world!” | sudo ./scan / dev / hidg0 1 2


此处的“ 1”表示美国键盘布局,“ 2”表示德国-奥地利语。输入第二个数字即可输入键盘上没有的字符(2 = Linux,3 = Windows(尽管此操作系统没有驱动程序))。

驱动器

这很难做到。您只能使用磁盘映像文件。该示例创建了一个非常小的磁盘映像文件来保存以太网主机配置。
首先,让我们制作一个磁盘。这是一个相当漫长的过程,教程在这里
然后再次进入配置:

sudo nano / usr / bin / isticktoit_usb
/ usr / bin / isticktoit_usb#在此处添加功能
FILE = / home / pi / usbdisk.img
mkdir -p $ {FILE / img / d}
mount -o loop, ro,偏移量= 1048576 -t ext4 $ FILE $ {FILE / img / d}
mkdir -p函数/ mass_storage.usb0
回声1>函数/ mass_storage.usb0 /停止
回声0>函数/ mass_storage.usb0 / lun.0 / cdrom
回声0>函数/ mass_storage.usb0 / lun.0 / ro
echo 0>函数/ mass_storage.usb0 / lun.0 / nofua
echo $ FILE>函数/ mass_storage.usb0 / lun.0 /文件
ln -s函数/ mass_storage.usb0 configs / c.1 /
#结束函数

之后应该有FAT32格式的可移动磁盘可用,将在下一次Pi连接到主PC后显示。要访问Pi上存储的文件,您可以运行unmount,然后在其他地方重新连接。

还有什么



Linux内核总共可以模拟约20个USB小工具。这里是有关此的更多信息

有用的链接:内核文档中的
gbaman
libcomposite 教程
-> hardpass-PiZero项目(键盘仿真) <- USBArmory Wiki页面

Source: https://habr.com/ru/post/zh-CN391099/


All Articles