手机APP自动签到—python实现
当今是移动APP的天下,很多APP软件为了吸引客户每天登录使用,设置的有每天签到送一些奖励的活动。这里以一个挺火的网络电话软件呼应(每天签到送长)为例,通过python 实现自动签到。
一、Fiddler 抓包
Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求。Fiddler能捕获IOS设备发出的请求,比如IPhone, IPad, MacBook. 等等苹果的设备。 同理,也可以截获Andriod,Windows Phone的等设备发出的HTTP/HTTPS数据包。
前提条件是:安装Fiddler的机器,跟手机在同一个网段 (这个还不简单,一个无线路由器搞定)。
1、Fiddler 配置
fiddler安装完成后,需要进行如下步骤进行配置 ,点击:Tools->Fiddler Options 分别在https和connections项的相应块勾选:
2、手机端配置
这里假设安装fiddler 软件的PC机IP为192.168.1.104 ,使用手机浏览器打开http://192.168.1.104:8888 , 点”FiddlerRoot certificate” 然后安装证书 。安装完成后,在手机的网络连接里找到代理设置项,将代理IP设为192.168.1.104 ,端口为8888 。这里以IOS手机为例:
3、抓包与过滤
此时访问手机APP上的应用或者通过手机打开页面都可以在PC fiddler上查看到相应的包,而且可以在fiddler上对抓到的包进行过滤,只取我们想要的包:
二、呼应自动签到
1、包分析
通过抓包分析,我们获取了四个URL (登录、签到、签到信息、时长信息),这个四个URL都是通近GET方法进行请求,四个URL请求后返回的都是XML格式 。
登录URL:
<pre data-language="XML">```markup
http://pes.huying-network.com:9999/httpservice?cmd=getuserinfo&name=手机号&password=密码串%3D&appid=5&v=2.0.0.800&sign=sign串
返回信息:
<root>
<result>1</result>
<uid>用户ID</uid>
<number>呼应号</number>
<name>手机号</name>
<issetpwd>1</issetpwd>
<invitecode>1nsye8</invitecode>
<at>at串</at>
<expire>864000</expire>
</root>
登录URL通过请求后,返回以上信息,其中比较有用的是 at字符串 ,后面的三个URL请求时会用到。
```bash
# 签到实现
http://pes.huyingdianhua.com:9999/httpservice?cmd=givegift&uid=用户ID&type=4&subtype=12&at=at串3D&v=2.0.0.800&sign=sign串
# 签到信息
http://pes.huyingdianhua.com:9999/httpservice?cmd=getusertaskdetail&uid=用户ID&type=4&subtype=12&at=at串%3D&v=2.0.0.800&sign=sign串
# 时长信息
http://pes.huyingdianhua.com:9999/httpservice?cmd=getusertimer&uid=用户ID&at=at串3D&v=2.0.0.800&sign=sign串
2、自签到代码
这里要实现的功能是,自动签到后,通过 xml 解析取得相关信息,并通过邮件进行通知确认:
1#!/usr/bin/python
2#coding=utf-8
3import sys
4reload(sys)
5sys.setdefaultencoding('utf-8')
6import pycurl,StringIO
7import smtplib
8from email.mime.text import MIMEText
9def CurlGet(url):
10 c = pycurl.Curl()
11 c.setopt(pycurl.FOLLOWLOCATION, 1) #允许跟踪来源
12 c.setopt(pycurl.MAXREDIRS, 5)
13 c.setopt(pycurl.CONNECTTIMEOUT, 8)
14 head = ['Accept-Encoding: gzip'
15 'User-Agent: 呼应 2.0.0 rv:2.0.0.2 (iPhone; iPhone OS 8.4; zh_CN)']
16 buf = StringIO.StringIO()
17 c.setopt(pycurl.WRITEFUNCTION, buf.write)
18 c.setopt(pycurl.URL, url)
19 c.setopt(pycurl.HTTPHEADER, head)
20 c.perform()
21 the_page =buf.getvalue()
22 buf.close()
23 return the_page
24def send_mail(to_list,sub,content):
25 me="huying"+"<"+mail_user+"@"+mail_postfix+">"
26 msg = MIMEText(content,_subtype='plain',_charset='utf-8')
27 msg['Subject'] = sub
28 msg['From'] = me
29 msg['To'] = ";".join(to_list)
30 try:
31 server = smtplib.SMTP()
32 server.connect(mail_host)
33 server.login(mail_user,mail_pass)
34 server.sendmail(me, to_list, msg.as_string())
35 server.close()
36 return True
37 except Exception, e:
38 print str(e)
39 return False
40logintxt = CurlGet('http://pes.huying-network.com:9999/httpservice?cmd=getuserinfo&name=手机号&password=密码串%3D&appid=5&v=2.0.0.800&sign=sign串')
41getgift = CurlGet('http://pes.huyingdianhua.com:9999/httpservice?cmd=givegift&uid=用户ID&type=4&subtype=12&at=at串3D&v=2.0.0.800&sign=sign串')
42getdetail = CurlGet('http://pes.huyingdianhua.com:9999/httpservice?cmd=getusertaskdetail&uid=用户ID&type=4&subtype=12&at=at串%3D&v=2.0.0.800&sign=sign串')
43gettime = CurlGet('http://pes.huyingdianhua.com:9999/httpservice?cmd=getusertimer&uid=用户ID&at=at串3D&v=2.0.0.800&sign=sign串')
44try:
45 import xml.etree.cElementTree as ET
46except ImportError:
47 import xml.etree.ElementTree as ET
48login = ET.fromstring(logintxt)
49detail = ET.fromstring(getdetail)
50freetime = ET.fromstring(gettime)
51login_at = login.find('at').text
52longtime = freetime.find('freethreshold').text
53signdate = detail.find('signdate').text
54signday = detail.find('signday').text
55msg = '登录字符串:' + login_at + '\n' + '目前免费时长:' + longtime + '\n' + '本月签到日期:' + signdate + '\n' + '连续签到天数:' + signday
56if __name__ == '__main__':
57 mailto_list=['邮件接收人']
58 mail_host="smtp.163.com" #设置服务器
59 mail_user="username" #用户名
60 mail_pass="password" #口令
61 mail_postfix="163.com" #发件箱的后缀
62 if send_mail(mailto_list,"呼应自动签到",msg):
63 print "发送成功"
64 else:
65 print "发送失败"
由于at串的过其日志是10天,这里出于研究目的,并未对at串进行变量替换,具体使用时,还需要对at串信息进行替换。
3、效果
最终邮件收到的效果如下 ,通过邮件发送的另一个目的是,便于在软件版本更新,URL变更,签到失败等情况时,可以二次分析包,进行软件更新。
写在最后:由于呼应的URL包还是比较简单的,比如企鹅的微信、QQ消息包是涉及到内容加密的,想要实现对其某些功能的自动完成,就没有这么简单了。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/mobile-app-auto-sign/4661.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.