从设置为 HID USB 键盘的 Adafruit ItsyBitsy 32u4 中提取代码
Extract code from Adafruit ItsyBitsy 32u4 set up as a HID USB Keyboard
我最近在我的办公室发现了一个可疑设备,我将其插入了备用计算机。它被系统识别为键盘,开始点击和输入。无论是恶意设备、恶作剧还是自动化工具;我想找到它的用途和代码。
插入时:
$ sudo dmesg
[ 59.018129] usb 1-4: new full-speed USB device number 5 using xhci_hcd
[ 59.169828] usb 1-4: New USB device found, idVendor=239a, idProduct=800e, bcdDevice= 1.00
[ 59.169842] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 59.169847] usb 1-4: Product: ItsyBitsy 32u4 5V 16MHz
[ 59.169851] usb 1-4: Manufacturer: Adafruit
[ 59.169855] usb 1-4: SerialNumber: C
[ 59.192196] cdc_acm 1-4:1.0: ttyACM0: USB ACM device
[ 59.192216] usbcore: registered new interface driver cdc_acm
[ 59.192218] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 59.199938] input: Adafruit ItsyBitsy 32u4 5V 16MHz as /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.2/0003:239A:800E.0002/input/input22
[ 59.260993] hid-generic 0003:239A:800E.0002: input,hidraw1: USB HID v1.01 Keyboard [Adafruit ItsyBitsy 32u4 5V 16MHz] on usb-0000:00:14.0-4/input2
[ 59.261027] usbcore: registered new interface driver usbhid
[ 59.261028] usbhid: USB HID core driver
它是 Adafruit ItsyBitsy 32u4。根据它在 Adafruit 网站上的描述,它有一个 ATmega32u4 板载芯片和 USB 引导加载程序“AVR109 兼容”。
我知道我无法直接获得源代码,但我打算使用反汇编程序进行翻译。也许会得到一些关于它的提示。也欢迎对此提供任何帮助。
我了解到我可以使用工具 avrdude
从引导加载程序中转储二进制文件。虽然,因为这个设备被设置为 HID 键盘,我不知道我看到的方法是否适合这个,或者可能无法再访问引导加载程序。
我试过以下方法:
$ sudo avrdude -p m32u4 -c avr109 -U flash:r:flash.hex -v -v
- -p:微控制器的类型。 ATmega32u4 的“m32u4”ID
- -c:程序员使用id。 “avr109”
- -U:内存操作。将设备的(“r”)“闪存”ROM读入“flash.hex”
- -v -v:更冗长
这是输出(错误):
130 ⨯
avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/etc/avrdude.conf"
User configuration file is "/root/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyS0
Using Programmer : avr109
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : butterfly
Description : Atmel AppNote AVR109 Boot Loader
Connecting to programmer: .avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
Found programmer: Id = ""; type =
Software Version = .; Hardware Version = .
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
我应该尝试添加其他选项吗?就像端口的 -P 一样,我在互联网上的其他问题中看到过。虽然,我不知道给这个选项赋什么值。
我想知道,是否可以从引导加载程序中提取代码?如果是,怎么办?我应该使用 avrdude
还是其他工具?怎么样?
提前致谢。
是的,您正在寻找 -P 标志,当它在其引导加载程序中时,它需要指向 AVR 串行设备的路径。只要它是一个普通的 itsybitsy,而不是经过修改以在没有引导加载程序的情况下工作的,您需要在 750 毫秒内按两次重置按钮将其放入引导加载程序,并且在 8 秒内您需要 运行 avrdude 命令。
对于 -P 标志,您发布了 dmesg 输出,它与我的机器相同,/dev/ttyACM0。
所以,我的方法是按住重置 5 次(让 Linux 注意到它已经消失并释放分配给它的设备),快速再次按下重置按钮,等待一秒钟(但不要太长;Linux 需要重新分配 tty 但你不能错过引导加载程序 window),然后 运行 avrdude 命令:
sudo avrdude -p m32u4 -c avr109 -P /dev/ttyACM0 -U flash:r:flash.hex -v -v
祝你好运!希望这只是一个恶作剧。
我最近在我的办公室发现了一个可疑设备,我将其插入了备用计算机。它被系统识别为键盘,开始点击和输入。无论是恶意设备、恶作剧还是自动化工具;我想找到它的用途和代码。
插入时:
$ sudo dmesg
[ 59.018129] usb 1-4: new full-speed USB device number 5 using xhci_hcd
[ 59.169828] usb 1-4: New USB device found, idVendor=239a, idProduct=800e, bcdDevice= 1.00
[ 59.169842] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 59.169847] usb 1-4: Product: ItsyBitsy 32u4 5V 16MHz
[ 59.169851] usb 1-4: Manufacturer: Adafruit
[ 59.169855] usb 1-4: SerialNumber: C
[ 59.192196] cdc_acm 1-4:1.0: ttyACM0: USB ACM device
[ 59.192216] usbcore: registered new interface driver cdc_acm
[ 59.192218] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 59.199938] input: Adafruit ItsyBitsy 32u4 5V 16MHz as /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.2/0003:239A:800E.0002/input/input22
[ 59.260993] hid-generic 0003:239A:800E.0002: input,hidraw1: USB HID v1.01 Keyboard [Adafruit ItsyBitsy 32u4 5V 16MHz] on usb-0000:00:14.0-4/input2
[ 59.261027] usbcore: registered new interface driver usbhid
[ 59.261028] usbhid: USB HID core driver
它是 Adafruit ItsyBitsy 32u4。根据它在 Adafruit 网站上的描述,它有一个 ATmega32u4 板载芯片和 USB 引导加载程序“AVR109 兼容”。
我知道我无法直接获得源代码,但我打算使用反汇编程序进行翻译。也许会得到一些关于它的提示。也欢迎对此提供任何帮助。
我了解到我可以使用工具 avrdude
从引导加载程序中转储二进制文件。虽然,因为这个设备被设置为 HID 键盘,我不知道我看到的方法是否适合这个,或者可能无法再访问引导加载程序。
我试过以下方法:
$ sudo avrdude -p m32u4 -c avr109 -U flash:r:flash.hex -v -v
- -p:微控制器的类型。 ATmega32u4 的“m32u4”ID
- -c:程序员使用id。 “avr109”
- -U:内存操作。将设备的(“r”)“闪存”ROM读入“flash.hex”
- -v -v:更冗长
这是输出(错误):
130 ⨯
avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/etc/avrdude.conf"
User configuration file is "/root/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyS0
Using Programmer : avr109
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : butterfly
Description : Atmel AppNote AVR109 Boot Loader
Connecting to programmer: .avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
Found programmer: Id = ""; type =
Software Version = .; Hardware Version = .
avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
我应该尝试添加其他选项吗?就像端口的 -P 一样,我在互联网上的其他问题中看到过。虽然,我不知道给这个选项赋什么值。
我想知道,是否可以从引导加载程序中提取代码?如果是,怎么办?我应该使用 avrdude
还是其他工具?怎么样?
提前致谢。
是的,您正在寻找 -P 标志,当它在其引导加载程序中时,它需要指向 AVR 串行设备的路径。只要它是一个普通的 itsybitsy,而不是经过修改以在没有引导加载程序的情况下工作的,您需要在 750 毫秒内按两次重置按钮将其放入引导加载程序,并且在 8 秒内您需要 运行 avrdude 命令。
对于 -P 标志,您发布了 dmesg 输出,它与我的机器相同,/dev/ttyACM0。
所以,我的方法是按住重置 5 次(让 Linux 注意到它已经消失并释放分配给它的设备),快速再次按下重置按钮,等待一秒钟(但不要太长;Linux 需要重新分配 tty 但你不能错过引导加载程序 window),然后 运行 avrdude 命令:
sudo avrdude -p m32u4 -c avr109 -P /dev/ttyACM0 -U flash:r:flash.hex -v -v
祝你好运!希望这只是一个恶作剧。