国家开放大学自动答题的终极实现之模拟登录
有一朋友为了升学历弄积分,报考了一个国家开放大学,里面的在线作业还挺多的,看视频,单选,多选,上传,判断题,综合题等,说他的很多同学也有这个需求,希望我能帮他实现一下,于是我先按规矩上网搜了一下各种工具,发觉网上的工具基本分为两类。一类是基油猴的浏览器插件,这种基于油猴的大多数就是用于看看视频,做选择题和别的题目基本没什么好办法,而且还要用户参与操作,必须到指定的页面,容错率差。 还有一种是也是基于浏览器操作的selenium,虽然不用用户频繁参与操作,但本身selenium就是一种重加载,会因网速硬件等问题产生各种问题,要么速度慢,最多适合几个人简单用用。大多数人,就希望输入用户名与密码后等着就可以做完,或者干脆什么都不想操作,告诉你用户名与密码等着出结果就可以了。所以说网上找的工具还是不能满足要求。
本着解决这个问题的想法,最终解决这个要求,必须要做到只需要用户名密码就可以不用用户操作了,后面全部不用用户参与,只能是基于协议的方法了。
经过近一个多月的努力,终于实现了想要的绝大部分功能,具体包括模拟登录,批量看视频,支持判断题,单选题,多选题,上传题,简答题等,且实现了题库自动维护,随机做题控制分数范围,支持多线程,ip代理的自动切换,支持多个账号学生同时学习,,与做题的进度记录控制等功能。简单点说就是只需提供学生账号密码,一键就搞定了,不需要任何人工干预。
今天先写第一章节:模拟登录
一般来说,解决自动登录并记住cookie是一项非常重要的工作,如果登录搞不定,cookie拿不到,后面的自动学习功能肯定无法顺利进行。需要用到的工具是fidder,用于抓包。
打开国家开放大学的官方网站:http://one.ouchn.cn/,点击登录,会看到以下界面
有一个图片验证,这个图片验证码很简单,可以自已分析,最好是用第三方的打码,很好搞定。
然后最重要的是看一下这个密码是不是加密了,看下fidder的抓包,果然是加密了
需要拿到这个加密方式,只能分析js了,首先在chrome里查找#password,可以看到有一段这样的js
说明用户名与密码都用strEnc这个函数做了处理,且IDToken1就是加密后的用户名,IDToken2就是加密后的密码,IDToken3是验证码结果。重点就是strEnc这个方法了,分析下strEnc这个函数,发现里面有4个参数,第二个参数是#random,这个random值简单,在源码里可以看到是一个hidden,用正则就可以取到,再到源码里找strEnc,可以看到
说明是一个des加密算法,比较通用,可以直接调用所用语言的des算法即,最靠谱的方法就是取出源码中的js代码,直接调用最好。
整理一下:
用户名就是用strEnc处理过后的IDToken1,密码也是用strEnc处理过后的IDToken2,IDToken3则是图片验证码的结果,图片验证可以用第三方接口返回即可。后面的几个参数不重要。
目前所有的难点都解决了,可以写代码调试了,用语言的可以自已用熟悉的语言即可。
等有空了再写别的功能。