python實現手機APP自動簽到

現在的app在應用已經到達了頂峰狀態了,一個小小的企業網站有時也要做一個app了,下文我們來看一個python實現手機APP自動簽到的例子。
當今是移動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項的相應塊勾選:

python實現手機APP自動簽到

python實現手機APP自動簽到

2、手機端配置

這裏假設安裝fiddler 軟件的PC機IP爲192.168.1.104 ,使用手機浏覽器打開http://192.168.1.104:8888 , 點"FiddlerRoot certificate" 然後安裝證書 。安裝完成後,在手機的網路連接裏找到代理設置項,將代理IP設爲192.168.1.104 ,端口爲8888 。這裏以IOS手機爲例:

python實現手機APP自動簽到

3、抓包與過濾

此時訪問手機APP上的應用或者通過手機打開頁面都可以在PC fiddler上查看到相應的包,而且可以在fiddler上對抓到的包進行過濾,只取我們想要的包:

python實現手機APP自動簽到

二、呼應自動簽到


1、包分析


過抓包分析,我們獲取了四個URL (登錄、簽到、簽到信息、時長信息),這個四個URL都是通近GET方法進行請求,四個URL請求後返回的都是XML格式 。

登錄URL:

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請求時會用到。

# 簽到實現
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 解析取得相關信息,並通過郵件進行通知確認:

#!/usr/bin/python
#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import pycurl,StringIO
import smtplib
from email.mime.text import MIMEText
def CurlGet(url):
c = pycurl.Curl()
c.setopt(pycurl.FOLLOWLOCATION, 1) #允許跟蹤來源
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.CONNECTTIMEOUT, 8)
head = ['Accept-Encoding: gzip'
'User-Agent: 呼應 2.0.0 rv:2.0.0.2 (iPhone; iPhone OS 8.4; zh_CN)']
buf = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, buf.write)
c.setopt(pycurl.URL, url)
c.setopt(pycurl.HTTPHEADER, head)
c.perform()
the_page =buf.getvalue()
buf.close()
return the_page
def send_mail(to_list,sub,content):
me="huying"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,_subtype='plain',_charset='utf-8')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False
logintxt = CurlGet('http://pes.huying-network.com:9999/httpservice?cmd=getuserinfo&name=手機號&password=密碼串%3D&appid=5&v=2.0.0.800&sign=sign串')
getgift = 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串')
getdetail = 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串')
gettime = CurlGet('http://pes.huyingdianhua.com:9999/httpservice?cmd=getusertimer&uid=用戶ID&at=at串3D&v=2.0.0.800&sign=sign串')
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
login = ET.fromstring(logintxt)
detail = ET.fromstring(getdetail)
freetime = ET.fromstring(gettime)
login_at = login.find('at').text
longtime = freetime.find('freethreshold').text
signdate = detail.find('signdate').text
signday = detail.find('signday').text
msg = '登錄字符串:' + login_at + '\n' + '目前免費時長:' + longtime + '\n' + '本月簽到日期:' + signdate + '\n' + '連續簽到天數:' + signday
if __name__ == '__main__':
mailto_list=['郵件接收人']
mail_host="smtp.163.com" #設置伺服器
mail_user="username" #用戶名
mail_pass="password" #口令
mail_postfix="163.com" #發件箱的後綴
if send_mail(mailto_list,"呼應自動簽到",msg):
print "發送成功"
else:
print "發送失敗"
由于at串的過其日志是10天,這裏出于研究目的,並未對at串進行變量替換,具體使用時,還需要對at串信息進行替換。

3、效果

最終郵件收到的效果如下 ,通過郵件發送的另一個目的是,便于在軟件版本更新,URL變更,簽到失敗等情況時,可以二次分析包,進行軟件更新。

python實現手機APP自動簽到

寫在最後:由于呼應的URL包還是比較簡單的,比如企鵝的微信、QQ消息包是涉及到內容加密的,想要實現對其某些功能的自動完成,就沒有這麽簡單了
更多相關文章
  • python實現3g QQ機器人程序代碼
    目前網上有不少的實現QQ機器人的方法,都不太穩定甚至都已經失效了,而且我們還要冒著QQ號被盜用的風險.其實我們可以自己實現一個QQ自動應答的機器人,思路非常簡單:通過模擬登錄3G版QQ,來實現相關的操作:一.首先我們得看看3GQQ的相關協定 爲此,我們需要一個支持WAP的浏覽器,可以使用Firefo ...
  • 網頁爬蟲可以說是蜘蛛爬蟲了,我們可以通過它來抓取網頁的內容並且讓對方對爲是正常的方便了,下面來看兩個網頁爬蟲的例子.一般來說,使用線程有兩種模式, 一種是創建線程要執行的函數, 把這個函數傳遞進Thread對象裏,讓
  • 下文爲各位介紹一個python實現git鈎子(hooks)的例子,如果各位想深入了解hooks的話不防進入一起和小編來看看吧.雖然是用python實現的,其實可以是任何服務端腳本.svn的鈎子功能非常的好用,git也是可以實現鈎子功能,只不過因爲其實分布式的特征,我們如果想讓某個伺服器更新提交代碼, ...
  • 生化危機:啓示錄2電腦MOD實現聯機方法一覽
    在生化危機:啓示錄2這一款遊戲裏,目前的電腦版本沒有區域網路以及離線合作的模式,目前玩家們想要聯機只能通過下載MOD來實現聯機,今天小編就爲各位玩家們來詳細的說一下這個MOD的聯機方法,下面就一起看看吧.<生化危機:啓示錄2>,是卡普空于2015年2月25日起以章節式發行的生化危機續作; ...
  • tcpdump能幫助我們捕捉並保存網路包,保存下來的網路包可用于分析網路負載情況,包可通過tcpdump命令解析,也可以保存成後綴爲pcap的文件,使用wireshark等軟件進行查看,下面我們就來看一個tcpdump實現24小時自動抓包實現例子.安裝tcpdump 代碼如下 # yum insta ...
  • 以前用php寫過關于ftp文件上傳功能,下面我來給大家介紹python實現ftp文件上傳到伺服器方法,有需要了解的朋友可參考. 代碼如下 #!/usr/bin/env python2# coding: utf-8import os,socket,threading,time#import trace ...
  • 下面爲各位介紹一個關于python實現html代碼轉義轉換的例子,以前用過最多的是在php中了,今天看到一篇這樣的文件整理過來與給需要的參考.之前記錄了從網上翻來的 Python HTMLParser處理HTML轉義
  • 我們一起來看看python實現DB系統預警聯系人API的例子,如果各位在運維中有碰到需要監控系統狀態可以嘗試使用此方法來監控的哦.在我們維護系統時,需要把系統的報警信息即時傳遞給相應同學,如果把聯系方式直接寫到腳本裏
一周排行