爬虫碰到安全输入控件如何破?

2017-07-01 23:59:50 +08:00
 4ever911
登陆表单里面的密码框是一个控件, 支持 Windows/Mac OS,

但是该控件在加密登陆密码时有两个输入参数,一个是登陆时输入的密码,另外一个是每次都变化的从服务器取到的一个字符串( JS 取得), 所以这样生成的 POST 到服务器的加密密码每次都不一样,所以我想复用加密后的密码不可行。

控件大致伪代码如下:

timestamp = get_current_timestamp()

key = send_timestamp_to_server( timestamp)

edit.setkey(key)

newpassword = edit.get_encoded_text(realpassword)

postdata....



我尝试成功登陆,然后拷贝 cookie 到程序中是可行的, 但是感觉这方法太 weird,并且,我的主程序跑在 Linux 下,这样每次都要从 Windows 下去登陆拷贝 cookie,感觉很奇怪。

1. 有什么更好的办法吗?
2. 如果拷贝 cookie 的方法给 python requests 调用, 必须每隔一段时间去 post/get 一些数据保持长连接? 如果不发送数据,这个连接能保持多久?
6739 次点击
所在节点    Python
23 条回复
xiaocsl
2017-07-02 00:23:25 +08:00
1.找到加密算法,自己写一遍.
2.应该不叫保持长连接,应该要看服务端,会话过期时间是多久.如果服务器端设置的是 15 分钟,那 15 分钟内没任何请求会话就会过期.

其实我非常好奇网站是什么,还在用控件,而且还支持 OSX ,记忆中只有网银啊.
smilekung
2017-07-02 00:24:01 +08:00
先发请求过去请求这个 key 呗,或者直接采用 webdriver
wintercoder
2017-07-02 00:27:09 +08:00
支付宝登陆也是有自定义控件,试试 selenium 把
4ever911
2017-07-02 00:37:11 +08:00
@xiaocsl

1. 加密算法在控件里面,我看不到
2. 好在我会每隔几秒去取点信息,麻烦的是我还要每次去开一台 Windows 电脑
3. 券商的 web 登陆页面
4ever911
2017-07-02 00:37:53 +08:00
@smilekung key 我可以请求到, 但是通过 key 如何去加密输入的 password 这部分是在 editor 控件完成的,我是看不到代码的。。。
4ever911
2017-07-02 00:38:45 +08:00
@wintercoder 恩,那和我手动去拷贝 cookie 差别不是太大,而且,我的程序跑在 linux 下, 控件不支持 Linux,
doubleflower
2017-07-02 00:41:49 +08:00
直接像浏览器那样调用这个控件不就行了
lestat
2017-07-02 08:47:30 +08:00
应该是类似 rsa 的非对称加密吧,不太好搞的样子
lestat
2017-07-02 08:51:15 +08:00
服务器端有个证书,包含私钥和公钥,客户端每次会用公钥加密密码,服务器端用私钥解密,如果没有私钥即使有加密算法也不够
googlebot
2017-07-02 09:13:58 +08:00
跪了吧,人家专门防爬虫,
4ever911
2017-07-02 09:16:10 +08:00
恩, 刚才看了做完的测试代码,还在保持连接中没有被踢出, 所以就干脆拷贝 cookie 好了。
imn1
2017-07-02 09:33:53 +08:00
@4ever911
如果我破了之后,一定转移所有资金换个券商,打死不再用这家
jyf007
2017-07-02 10:15:26 +08:00
NPAPI???
arischow
2017-07-02 11:05:56 +08:00
先在 Chrome 装个 UA Switcher,看有没有 UA 能直接绕过这个控件
1314258
2017-07-02 11:20:31 +08:00
javascript 的 automation。
或者导出插件 dll,不需要破解,反正你也是用它里面的函数,在 windows 完成验证之后,返回 cookie
lianyue
2017-07-02 12:20:04 +08:00
非要桌面么 看看 移动端登录什么的
coolypf
2017-07-02 12:24:06 +08:00
@lestat 怎么不够? lz 的爬虫也用公钥加密就行了。
swulling
2017-07-02 13:55:05 +08:00
尝试反编译这个控件试试…如果是公私钥,找到那个密钥应该就可以了
smilekung
2017-07-02 15:48:17 +08:00
@4ever911 把 js 下载下来,直接本地执行…管它怎么加密的呢
masha
2017-07-02 16:49:50 +08:00
可不可以这样,Windows 下写个脚本定期用 webdriver 模拟登陆获得 cookie,再同步给 Linux。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX