从设置为 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

这是输出(错误):

          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

祝你好运!希望这只是一个恶作剧。