欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 编程语言 > python >内容正文

python

【micropython】用python来进行badusb的usb-hid测试(含无线控制) -尊龙游戏旗舰厅官网

发布时间:2025/1/21 python 23 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 【micropython】用python来进行badusb的usb-hid测试(含无线控制) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

转载请注明:@小五义http://www.cnblogs.com/xiaowuyi  qq群:64770604 

     本文以tpyboardv101开发板为例讲解了利用micropython进行badusb的usb-hid设备测试的主要方法,使用mt7681模块进行了一个简单的实验,实现了手机摇控键盘输入的测试。

0x01引言

micropython运行在微控制器上的python只要你懂python3.x,就可以让你像使用arduino那样进行硬件开发。随着micropython的发布,已经有越来越多的人研究和利用其进行项目开发。本人也进行了一些研究,发现利用python进行操作确实很方便,很简单。目前支持micropython的开发板有很多,如pyboardpymagictpyboard等。

  pyboard

  pymagic

tpyboard

 

  最近从网上搞了一块tpyboard v101(尊龙游戏旗舰厅官网www.micropython.net.cn)进行了一下研究,特别是对其自身的usb-hid功能进行了测试,令人惊喜的是,你可以在仅懂python的情况下,进行hid攻击的姿态测试。具体tpyboardv101的使用方法,请参见www.micropython.net.cn 

  0x02 tpyboardv101模拟键盘 

     该板子的使用方法入门,本文中略过,有兴趣的可以查看其网站http://www.micropython.net.cn/support_category.php?id=2。tpyboardv101中,在进行键盘模拟时,每次发送了8个字符,只要搞清楚了这8个字符的含义,就能够进行hid模拟了。 

键盘发送的8个字byte1 byte2 byte3 byte4 byte5 byte6 byte7 byte8。其中byte1用来实现功能键:

 

byte1 -- |--bit0: left control 按下时为1 |--bit1: left shift按下时为1 |--bit2: left alt按下时为1 |--bit3: left gui按下时为1 |--bit4: right control按下时为1 |--bit5: right shift按下时为1 |--bit6: right alt按下时为1 |--bit7: right gui按下时为1

 

byte3byte8是具体按键(见0x06附件),如:

按下left shift a ,则发送 0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00

这里以按下left gui r来具体讲解实现过程。

第一步:修改boot.py文件,代码如下:

 

import machine import pyb #pyb.main('main.py') # main script to run after this one #pyb.usb_mode('cdc msc') # act as a serial and a storage device pyb.usb_mode('cdc hid',hid=pyb.hid_keyboard)

第二步,修改main.py文件,代码如下:

 

# main.py -- put your code here! hid=pyb.usb_hid() def release_key_once():buf = bytearray(8) # report is 8 bytes longbuf[2] = 0hid.send(buf) # key releasedpyb.delay(10) def press_key_once(key):buf = bytearray(8) # report is 8 bytes longbuf[2] = keyhid.send(buf) # key releasedpyb.delay(10) def press_2key(key1,key2):buf = bytearray(8) # report is 8 bytes longbuf[0] = key1buf[2] = key2hid.send(buf) # key releasedpyb.delay(10) def release_2key():buf = bytearray(8) # report is 8 bytes longbuf[0] = 0buf[2] = 0hid.send(buf) # key releasedpyb.delay(10)pyb.delay(1000) #开始加入1秒延时 press_2key(0x08,0x15)#具体键值见附录部分 release_2key() 

第三步,安全退出tpyboardv101,然后按一下rst键,可以看到一秒后“运行”窗口弹出。

  0x03 简单的hid测试

   测试打开“运行”窗口,输入cmd,然后弹出cmd后,输入shutdown -s -t 60 ,60秒后自动关机。

main.py的代码如下:

 

# main.py -- put your code here! hid=pyb.usb_hid() def release_key_once():buf = bytearray(8) # report is 8 bytes longbuf[2] = 0hid.send(buf) # key releasedpyb.delay(10) def press_key_once(key):buf = bytearray(8) # report is 8 bytes longbuf[2] = keyhid.send(buf) # key releasedpyb.delay(10) def press_2key(key1,key2):buf = bytearray(8) # report is 8 bytes longbuf[0] = key1buf[2] = key2hid.send(buf) # key releasedpyb.delay(10) def release_2key():buf = bytearray(8) # report is 8 bytes longbuf[0] = 0buf[2] = 0hid.send(buf) # key releasedpyb.delay(10)pyb.delay(1000) #开始加入1秒延时 press_2key(0x08,0x15)#具体键值见附录部分 release_2key() pyb.delay(100) a=[0x06,0x10,0x07,0x28] #cmd enter for i in a:press_key_once(i)release_key_once() pyb.delay(1000) #shutdown -s -t 60 enter a=[0x16,0x0b,0x18,0x17,0x07,0x12,0x1a,0x11,0x2c,0x2d,0x16,0x2c,0x2d,0x17,0x2c,0x23,0x27,0x28] for i in a:press_key_once(i)release_key_once() pyb.delay(1000)

程序运行的效果是:当开发板插入电脑后,会首先弹出“运行”窗口,然后在该窗口里输入cmd,此时弹出cmd,并在其中输入shutdown -s -t 60和回车,然后电脑在1分钟后关机。 

  0x04 diy一键关机

    tpyboardv101带着一个usr按键,可以利用这个按键来制作一键关机功能。当板子程序运行后,按下usr按键,产生中断,led3闪一下,进行关机操作。具体代码如下:

 

# main.py -- put your code here! import pyb flag=0 #flag标记,当为1时,关机def release_key_once():buf = bytearray(8) # report is 8 bytes longbuf[2] = 0hid.send(buf) # key releasedpyb.delay(10) def press_key_once(key):buf = bytearray(8) # report is 8 bytes longbuf[2] = keyhid.send(buf) # key releasedpyb.delay(10) def press_2key(key1,key2):buf = bytearray(8) # report is 8 bytes longbuf[0] = key1buf[2] = key2hid.send(buf) # key releasedpyb.delay(10) def release_2key():buf = bytearray(8) # report is 8 bytes longbuf[0] = 0buf[2] = 0hid.send(buf) # key releasedpyb.delay(10)def shutdownpc():global flagpyb.led(3).on()flag=1pyb.delay(300)pyb.led(3).off()hid=pyb.usb_hid() sw=pyb.switch() sw.callback(shutdownpc) while(1): #led2闪烁表示板子已经正常工作pyb.led(2).toggle()pyb.delay(300)print(flag)if flag==1:pyb.delay(1000) #开始加入1秒延时press_2key(0x08,0x15)#具体键值见附录部分release_2key()pyb.delay(100)a=[0x06,0x10,0x07,0x28] #cmd enterfor i in a:press_key_once(i)release_key_once()pyb.delay(1000)#shutdown -s -t 60 entera=[0x16,0x0b,0x18,0x17,0x07,0x12,0x1a,0x11,0x2c,0x2d,0x16,0x2c,0x2d,0x17,0x2c,0x23,0x27,0x28]for i in a:press_key_once(i)release_key_once()pyb.delay(1000)flag=0

 

 视频演示:

 

  0x05 用手机摇控键盘输入

  这个实验中,我使用了mt7681wifi模块,该模块可以直接进行串口透传。将mt7681tpyboardv101进行连接,接线示意图,见下图。这里用的是tpyboardv101uart3,串口波特率115200。具体代码如下:

# main.py -- put your code here! import pyb flag=0def release_key_once():buf = bytearray(8) # report is 8 bytes longbuf[2] = 0hid.send(buf) # key releasedpyb.delay(10) def press_key_once(key):buf = bytearray(8) # report is 8 bytes longbuf[2] = keyhid.send(buf) # key releasedpyb.delay(10) def press_2key(key1,key2):buf = bytearray(8) # report is 8 bytes longbuf[0] = key1buf[2] = key2hid.send(buf) # key releasedpyb.delay(10) def release_2key():buf = bytearray(8) # report is 8 bytes longbuf[0] = 0buf[2] = 0hid.send(buf) # key releasedpyb.delay(10)def shutdownpc():global flagpyb.led(3).on()flag=1pyb.delay(1000)pyb.led(3).off() def getchars():global flagpyb.led(3).on()flag=2pyb.delay(1000)pyb.led(3).off() hid=pyb.usb_hid() sw=pyb.switch() sw.callback(shutdownpc)u1=pyb.uart(3,115200) u1.init(115200, bits=8, parity=none, stop=1) u1.write('hello world!') buf='' #print(buf) while(1): #led2闪烁表示板子已经正常工作buf=u1.readline()print(buf)if buf==b's':getchars()pyb.led(2).toggle()pyb.delay(1300)print(flag)if flag==1:pyb.delay(1000) #开始加入1秒延时press_2key(0x08,0x15)#具体键值见附录部分release_2key()pyb.delay(100)a=[0x06,0x10,0x07,0x28] #cmd enterfor i in a:press_key_once(i)release_key_once()pyb.delay(1000)#shutdown -s -t 60 entera=[0x16,0x0b,0x18,0x17,0x07,0x12,0x1a,0x11,0x2c,0x2d,0x16,0x2c,0x2d,0x17,0x2c,0x23,0x27,0x28]for i in a:press_key_once(i)release_key_once()pyb.delay(1000)flag=0if flag==2:pyb.delay(1000) #开始加入1秒延时press_2key(0x08,0x15)#具体键值见附录部分release_2key()pyb.delay(100)a=[0x11,0x12,0x17,0x08,0x13,0x04,0x07,0x28] #notepad enterfor i in a:press_key_once(i)release_key_once()pyb.delay(1000)flag=0

 

到这一步,可以看到,手机就像一个摇控键盘一样,可以直接来控制键盘了。只需要在程序中再丰富一下,就可以做个很不错的手机键盘出来。同时,因为可以通过串口返回数据,所以可以在电脑端写个上位机,这样就可以把电脑操作的返回值返回回来。具体的扩展功能大家自己想吧,就只说到这里了。

视频演示:

 

  0x06附件

  micropython的主要键值如下:

 

#define key_none 0x00 #define key_errorrollover 0x01 #define key_postfail 0x02 #define key_errorundefined 0x03 #define key_a 0x04 #define key_b 0x05 #define key_c 0x06 #define key_d 0x07 #define key_e 0x08 #define key_f 0x09 #define key_g 0x0a #define key_h 0x0b #define key_i 0x0c #define key_j 0x0d #define key_k 0x0e #define key_l 0x0f #define key_m 0x10 #define key_n 0x11 #define key_o 0x12 #define key_p 0x13 #define key_q 0x14 #define key_r 0x15 #define key_s 0x16 #define key_t 0x17 #define key_u 0x18 #define key_v 0x19 #define key_w 0x1a #define key_x 0x1b #define key_y 0x1c #define key_z 0x1d #define key_1_exclamation_mark 0x1e #define key_2_at 0x1f #define key_3_number_sign 0x20 #define key_4_dollar 0x21 #define key_5_percent 0x22 #define key_6_caret 0x23 #define key_7_ampersand 0x24 #define key_8_asterisk 0x25 #define key_9_oparenthesis 0x26 #define key_0_cparenthesis 0x27 #define key_enter 0x28 #define key_escape 0x29 #define key_backspace 0x2a #define key_tab 0x2b #define key_spacebar 0x2c #define key_minus_underscore 0x2d #define key_equal_plus 0x2e #define key_obracket_and_obrace 0x2f #define key_cbracket_and_cbrace 0x30 #define key_backslash_vertical_bar 0x31 #define key_nonus_number_sign_tilde 0x32 #define key_semicolon_colon 0x33 #define key_single_and_double_quote 0x34 #define key_grave accent and tilde 0x35 #define key_comma_and_less 0x36 #define key_dot_greater 0x37 #define key_slash_question 0x38 #define key_caps lock 0x39 #define key_f1 0x3a #define key_f2 0x3b #define key_f3 0x3c #define key_f4 0x3d #define key_f5 0x3e #define key_f6 0x3f #define key_f7 0x40 #define key_f8 0x41 #define key_f9 0x42 #define key_f10 0x43 #define key_f11 0x44 #define key_f12 0x45 #define key_printscreen 0x46 #define key_scroll lock 0x47 #define key_pause 0x48 #define key_insert 0x49 #define key_home 0x4a #define key_pageup 0x4b #define key_delete 0x4c #define key_end1 0x4d #define key_pagedown 0x4e #define key_rightarrow 0x4f #define key_leftarrow 0x50 #define key_downarrow 0x51 #define key_uparrow 0x52 #define key_keypad_num_lock_and_clear 0x53 #define key_keypad_slash 0x54 #define key_keypad_asteriks 0x55 #define key_keypad_minus 0x56 #define key_keypad_plus 0x57 #define key_keypad_enter 0x58 #define key_keypad_1_end 0x59 #define key_keypad_2_down_arrow 0x5a #define key_keypad_3_pagedn 0x5b #define key_keypad_4_left_arrow 0x5c #define key_keypad_5 0x5d #define key_keypad_6_right_arrow 0x5e #define key_keypad_7_home 0x5f #define key_keypad_8_up_arrow 0x60 #define key_keypad_9_pageup 0x61 #define key_keypad_0_insert 0x62 #define key_keypad_decimal_separator_delete 0x63 #define key_nonus_back_slash_vertical_bar 0x64 #define key_application 0x65 #define key_power 0x66 #define key_keypad_equal 0x67 #define key_f13 0x68 #define key_f14 0x69 #define key_f15 0x6a #define key_f16 0x6b #define key_f17 0x6c #define key_f18 0x6d #define key_f19 0x6e #define key_f20 0x6f #define key_f21 0x70 #define key_f22 0x71 #define key_f23 0x72 #define key_f24 0x73 #define key_execute 0x74 #define key_help 0x75 #define key_menu 0x76 #define key_select 0x77 #define key_stop 0x78 #define key_again 0x79 #define key_undo 0x7a #define key_cut 0x7b #define key_copy 0x7c #define key_paste 0x7d #define key_find 0x7e #define key_mute 0x7f #define key_volume_up 0x80 #define key_volume_down 0x81 #define key_locking_caps_lock 0x82 #define key_locking_num_lock 0x83 #define key_locking_scroll_lock 0x84 #define key_keypad_comma 0x85 #define key_keypad_equal_sign 0x86 #define key_international1 0x87 #define key_international2 0x88 #define key_international3 0x89 #define key_international4 0x8a #define key_international5 0x8b #define key_international6 0x8c #define key_international7 0x8d #define key_international8 0x8e #define key_international9 0x8f #define key_lang1 0x90 #define key_lang2 0x91 #define key_lang3 0x92 #define key_lang4 0x93 #define key_lang5 0x94 #define key_lang6 0x95 #define key_lang7 0x96 #define key_lang8 0x97 #define key_lang9 0x98 #define key_alternate_erase 0x99 #define key_sysreq 0x9a #define key_cancel 0x9b #define key_clear 0x9c #define key_prior 0x9d #define key_return 0x9e #define key_separator 0x9f #define key_out 0xa0 #define key_oper 0xa1 #define key_clear_again 0xa2 #define key_crsel 0xa3 #define key_exsel 0xa4 #define key_keypad_00 0xb0 #define key_keypad_000 0xb1 #define key_thousands_separator 0xb2 #define key_decimal_separator 0xb3 #define key_currency_unit 0xb4 #define key_currency_sub_unit 0xb5 #define key_keypad_oparenthesis 0xb6 #define key_keypad_cparenthesis 0xb7 #define key_keypad_obrace 0xb8 #define key_keypad_cbrace 0xb9 #define key_keypad_tab 0xba #define key_keypad_backspace 0xbb #define key_keypad_a 0xbc #define key_keypad_b 0xbd #define key_keypad_c 0xbe #define key_keypad_d 0xbf #define key_keypad_e 0xc0 #define key_keypad_f 0xc1 #define key_keypad_xor 0xc2 #define key_keypad_caret 0xc3 #define key_keypad_percent 0xc4 #define key_keypad_less 0xc5 #define key_keypad_greater 0xc6 #define key_keypad_ampersand 0xc7 #define key_keypad_logical_and 0xc8 #define key_keypad_vertical_bar 0xc9 #define key_keypad_logiacl_or 0xca #define key_keypad_colon 0xcb #define key_keypad_number_sign 0xcc #define key_keypad_space 0xcd #define key_keypad_at 0xce #define key_keypad_exclamation_mark 0xcf #define key_keypad_memory_store 0xd0 #define key_keypad_memory_recall 0xd1 #define key_keypad_memory_clear 0xd2 #define key_keypad_memory_add 0xd3 #define key_keypad_memory_subtract 0xd4 #define key_keypad_memory_multiply 0xd5 #define key_keypad_memory_divide 0xd6 #define key_keypad_plusminus 0xd7 #define key_keypad_clear 0xd8 #define key_keypad_clear_entry 0xd9 #define key_keypad_binary 0xda #define key_keypad_octal 0xdb #define key_keypad_decimal 0xdc #define key_keypad_hexadecimal 0xdd #define key_leftcontrol 0xe0 #define key_leftshift 0xe1 #define key_leftalt 0xe2 #define key_left_gui 0xe3 #define key_rightcontrol 0xe4 #define key_rightshift 0xe5 #define key_rightalt 0xe6 #define key_right_gui 0xe7

 

 

 

 

 

 

 

 

 

总结

以上是尊龙游戏旗舰厅官网为你收集整理的【micropython】用python来进行badusb的usb-hid测试(含无线控制)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

网站地图