码迷,mamicode.com
首页 > 其他好文 > 详细

网银安全控件问题

时间:2017-12-02 19:15:19      阅读:584      评论:0      收藏:0      [点我收藏+]

标签:win   odi   通过   ati   put   pytho   targe   sleep   rac   

网银的密码输入控件是通过直接读键盘设备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)

     

     

     

网银安全控件问题

标签:win   odi   通过   ati   put   pytho   targe   sleep   rac   

原文地址:http://www.cnblogs.com/zhouxinfei/p/7954917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!