1. 程式人生 > >網銀安全控件問題

網銀安全控件問題

long dwr ces pri mouse def mman code 通過

網銀的密碼輸入控件是通過直接讀鍵盤設備IO獲取的輸入。需要使用驅動級的鍵盤模擬輸入技術才能輸進去。

一個是WinIO,肯定能實現,我已測試過,WinIO怎麽用可以百度一下,有很多資料。

另外一個是虛擬鍵盤驅動,網上有個DD虛擬鍵盤http://www.ddxoft.com/,就是這樣實現的,這個DD虛擬鍵盤分免費版和收費版,免費版有廣告,會改IE主頁,(而且不知道有沒有後門),收費版的使用費為500元一臺電腦一年。

也可以自行用WDK開發一個虛擬鍵盤驅動

  • python模擬按鍵輸入(輸入的是狀態碼)
    # _*_ coding:UTF-8 _*_
    import win32api
    import win32con
    
    import win32gui from ctypes import * import time VK_CODE = { backspace:0x08, tab:0x09, clear:0x0C, enter:0x0D, shift:0x10, ctrl:0x11, alt:0x12, pause:0x13, caps_lock:0x14, esc:0x1B, spacebar:0x20, page_up:0x21, page_down:0x22, end:0x23, home:0x24, left_arrow
    :0x25, up_arrow:0x26, right_arrow:0x27, down_arrow:0x28, select:0x29, print:0x2A, execute:0x2B, print_screen:0x2C, ins:0x2D, del:0x2E, help:0x2F, 0:0x30, 1:0x31, 2:0x32, 3:0x33, 4:0x34, 5:0x35, 6:0x36, 7:0x37, 8:0x38, 9:0x39, a:0x41, b
    :0x42, c:0x43, d:0x44, e:0x45, f:0x46, g:0x47, h:0x48, i:0x49, j:0x4A, k:0x4B, l:0x4C, m:0x4D, n:0x4E, o:0x4F, p:0x50, q:0x51, r:0x52, s:0x53, t:0x54, u:0x55, v:0x56, w:0x57, x:0x58, y:0x59, z:0x5A, numpad_0:0x60, numpad_1:0x61, numpad_2:0x62, numpad_3:0x63, numpad_4:0x64, numpad_5:0x65, numpad_6:0x66, numpad_7:0x67, numpad_8:0x68, numpad_9:0x69, multiply_key:0x6A, add_key:0x6B, separator_key:0x6C, subtract_key:0x6D, decimal_key:0x6E, divide_key:0x6F, F1:0x70, F2:0x71, F3:0x72, F4:0x73, F5:0x74, F6:0x75, F7:0x76, F8:0x77, F9:0x78, F10:0x79, F11:0x7A, F12:0x7B, F13:0x7C, F14:0x7D, F15:0x7E, F16:0x7F, F17:0x80, F18:0x81, F19:0x82, F20:0x83, F21:0x84, F22:0x85, F23:0x86, F24:0x87, num_lock:0x90, scroll_lock:0x91, left_shift:0xA0, right_shift :0xA1, left_control:0xA2, right_control:0xA3, left_menu:0xA4, right_menu:0xA5, browser_back:0xA6, browser_forward:0xA7, browser_refresh:0xA8, browser_stop:0xA9, browser_search:0xAA, browser_favorites:0xAB, browser_start_and_home:0xAC, volume_mute:0xAD, volume_Down:0xAE, volume_up:0xAF, next_track:0xB0, previous_track:0xB1, stop_media:0xB2, play/pause_media:0xB3, start_mail:0xB4, select_media:0xB5, start_application_1:0xB6, start_application_2:0xB7, attn_key:0xF6, crsel_key:0xF7, exsel_key:0xF8, play_key:0xFA, zoom_key:0xFB, clear_key:0xFE, +:0xBB, ,:0xBC, -:0xBD, .:0xBE, /:0xBF, ;:0xBA, [:0xDB, \\:0xDC, ]:0xDD, "":0xDE, `:0xC0} class POINT(Structure): _fields_ = [("x", c_ulong),("y", c_ulong)] def get_mouse_point(): po = POINT() windll.user32.GetCursorPos(byref(po)) return int(po.x), int(po.y) def mouse_click(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) def mouse_dclick(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) def mouse_move(x,y): windll.user32.SetCursorPos(x, y) def key_input(str=‘‘): for c in str: win32api.keybd_event(VK_CODE[c],0,0,0) win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0) time.sleep(0.01) if __name__ == "__main__": mouse_click(1024,470) str = hello key_input(str)
  • python模擬IO鍵盤輸入(有錯誤待調試)
  • rabird.winio下載地址:https://pypi.python.org/pypi/rabird.winio

    import rabird.winio
    import time
    import atexit
    
    # KeyBoard Commands
    # Command port
    KBC_KEY_CMD = 0x64
    # Data port
    KBC_KEY_DATA = 0x60
    
    __winio = None
    
    def __get_winio():
        global __winio
    
        if __winio is None:
                __winio = rabird.winio.WinIO()
                def __clear_winio():
                        global __winio
                        __winio = None
                atexit.register(__clear_winio)
    
        return __winio
    
    def wait_for_buffer_empty():
        ‘‘‘
        Wait keyboard buffer empty
        ‘‘‘
    
        winio = __get_winio()
    
        dwRegVal = 0x02
        while (dwRegVal & 0x02):
                dwRegVal = winio.get_port_byte(KBC_KEY_CMD)
    
    def key_down(scancode):
        winio = __get_winio()
    
        wait_for_buffer_empty()
        winio.set_port_byte(KBC_KEY_CMD, 0xd2)
        wait_for_buffer_empty()
        winio.set_port_byte(KBC_KEY_DATA, scancode)
    
    def key_up(scancode):
        winio = __get_winio()
    
        wait_for_buffer_empty()
        winio.set_port_byte( KBC_KEY_CMD, 0xd2)
        wait_for_buffer_empty()
        winio.set_port_byte( KBC_KEY_DATA, scancode | 0x80)
    
    def key_press(scancode, press_time = 0.2):
        key_down( scancode )
        time.sleep( press_time )
        key_up( scancode )
    
    
    # Press ‘A‘ key
    # Scancodes references : https://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html
    key_press(0x1E)

網銀安全控件問題