注:本教程其实不限于python或者是米米号,用其他编程语言或者写注册其他账号的注册机也是类似的原理。
最近"摩尔庄园"这个IP重启,在再次沉迷这个游戏的同时,又有些羡慕其他小摩尔的靓号。其实很久很久以前我也有用过米米号(登录摩尔庄园所需的账号)注册机,但是现在失效了。于是,我闲的蛋疼(在寒假快结束,然而寒假作业还没写的情况下)用python写了一个米米号注册机。下面叙述一下制作的过程。
简单来说,要编写一个注册机首先需要弄清楚注册页面发送了哪些参数,收到了什么回复。
以https://account.61.com/user/register?type=3为例:
从页面上基本能看出注册账号需要发送“自定义账号”、“登录密码”、“确定登录密码”、“验证码”这四个参数。然后,我们可以通过谷歌浏览器的“检查”功能再看看网络情况,找出发送的地址和具体参数。
由于我发现以前米米号注册的老入口还在,所以就没用上述网址。老入口是在一个swf文件中的。现地址为:http://122.114.228.12/ (摩尔勇士复兴版)。可以看到,点击“申请淘米账号”后,只需要输入两遍面和验证码就行了。由于这是一个flash页面,寻找处理请求的服务器地址有两种途径:一是像上面一样通过谷歌浏览器的“检查”功能追踪。二是直接从缓存中提取swf文件进行反编译直接看源代码。
我两种方法都尝试过了,在这里都是行得通的。第一种方法在发送申请请求的时候,能在“检查”中看到向http://account-httpd.61.com/index.php发送了POST请求,传递参数有pwd,cfmpwd,seccode,gid,tad,cmd。看上去有点多啊……不过不要紧,一般来说我们只需要管密码和验证码就可以了,其他参数保持不变。至于验证码的请求,在执行更换验证码的时候,又能检测到向http://account-httpd.61.com/index.php发送了GET请求,传递参数有cmd,type,rnd。我们待会儿获取验证码的时候就需要这些。如果你弄不明白这些参数的含义,请尽量不要做出变动。但是在这里可以大致看清楚cmd是指令代码,rnd是一个0~1的随机数。
第二种方法就比较高端了,直接提取swf文件,然后反编译看源代码。但是代码往往都比较多,很难精确定位。而且实际操作中发现那as文件是一环套一环的……不过最终能找到注册的请求代码,以及验证码的请求代码。在代码中能很清楚的看到那些参数的来源和含义(gid是游戏id,tad一直是"none")。

好了,既然数据来源和去向都弄明白了,可以开始着手编写程序了。在python3中,我使用urllib库来处理网页请求,使用tkinter来实现可视化(万一有些人不会用命令行什么的……)。对了,为了让验证码同步我还引用了http.cookiejar模块。下面主要贴一下如何利用python发送POST和GET请求:
- POST请求:
data = urllib.parse.urlencode(values).encode('utf-8')
request = urllib.request.Request(url, data, headers)
html = opener.open(request).read().decode('utf-8') - GET请求:
req_auth = urllib.request.Request(url)
reqo_auth = opener.open(req_auth).read()
这里GET请求没有解码是因为得到的是验证码图片,直接保存下来就可以了。具体代码请看文末github链接。
最后提一下,在注册请求发送后通过read()得到返回的参数。其中应该就有注册的账号信息或者错误代码了。如果什么都没收到,应该考虑是够参数或者地址有误,还有可能是敲代码时手抖了233
最后就是成品啦,附个截图(注册到上限了,所以都是错误代码orz)
最后附上github地址:https://github.com/RainbowHerry/Taomee-Account-Register



