之前看到有人说Google API可以用来做图片验证码识别,想到今后或许能长期偷懒,就简单测试了下,最后发现,其实是难以用于实际攻击的。不过做了工作,还是总结一下。
1. Google Drive API快速入门
首先安装Google Client Library:
pip install --upgrade google-api-python-client
API Reference没详看,直接在Google Developers搜OCR,找到了Files: insert 方法。
它的作用是上传并创建新文档。可选参数OCR可以设定是否要应用OCR,识别图片和PDF中的文字。
阅读 Quickstart: Run a Drive App in Python 上手,有兴趣还可以看看底部的视频。 示例代码地址:goo.gl/dxuuB
去https://console.developers.google.com/创建一个新的Project
在新建的Project下创建Client ID,如下图所示:
为了省事,直接选择Web APP,在redirect_url中填写一个call back url,用户授权之后会跳转到这个URL。
把得到的Secret复制到上述示例代码中,就可以实现上传一个新文件到Google Drive中:
CLIENT_ID = '10107005646xxx-xxxx.apps.googleusercontent.com' CLIENT_SECRET = 'E6oJs9R97Bxxxxxxxxx' OAUTH_SCOPE = 'https://www.googleapis.com/auth/drive' REDIRECT_URI = 'http://www.example.com/oauth2callback'
2. 为什么Google Drive API难以用于破解验证码
说起来,局限是相当多的:
1) Google在内地服务不太稳定,比如利用API下载文件的时候我遇到过HTTP Error
2) web APP , oAuth 2.0取token,嫌麻烦。
3) 实际上,根本无法直接从API返回的链接中Export Text,或者提取到字符串。那些认为上传个png,接口马上返回识别结果的人,是想错了。返回的下载链接,还是原始图片。
4) 上传后图片可以转换成为google Doc。
5) 实际上,Google Drive API还是只能识别一些常用的字体,比如Arial。用来做验证码识别,还不够智能的。
下图是我上传的测试文件,两行文本,Google Drive只正确提取到了第二行的内容:
不过这个也可以理解,毕竟Google Drive不是用于攻击,能提供这种附加功能已经很好了,百度网盘应该还没有吧?