写在前头的话
最近“沉迷”于微信一款小程序,就是抽奖助手。反正这个抽奖几乎不用什么成本, 就是一个个抽奖活动点进去点击参与抽奖比较麻烦。要是如果有个程序一键解决这些步骤,那就是零成本了,哈哈哈。 话不多说,抓包走起。
Download
使用方法
运行LuckyNocode.exe,按照提示输入你的Authorization值即可。 程序会生成config文件,用于保存Authorization值。如果要修改该值,可删掉config文件。
注:下文会介绍如何获取该值。
抓包结果
注:不感兴趣的可以跳过这一部分
1. 获取每日福利抽奖列表
request header (仅列出必要项)
GET /public_lottery?page=1&size=5 HTTP/1.1
charset: utf-8
authorization: Bearer eyJhbGciOiJIUzI1太长省略...
Host: lucky.nocode.com
response body (经过gzip解压)
2. 获取自助福利抽奖列表
request header (仅列出必要项)
GET /square HTTP/1.1
authorization: Bearer eyJhbGciOiJIUzI1太长省略...
Host: lucky.nocode.com
response body (经过gzip解压)
3. 参与抽奖
request header (仅列出必要项)
POST /lottery/7FmTPqnan7k/join HTTP/1.1
authorization: Bearer eyJhbGciOiJIUzI1太长省略...
content-type: application/json
Host: lucky.nocode.com
注:url为 /lottery/欲参与的抽奖活动的id/join
requset body
{"form_id":"1534525352115"}
注:form_id应该是UNIX时间戳
response
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 17 Aug 2018 17:02:33 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 13
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *
ETag: W/"d-AZMLZIkhLL6zV6brmxWwd5pv3rs"
{"data":true}
注:响应结果中的data为true时,表示参与抽奖成功
python源码
注:同样,不感兴趣的可以跳过这一部分
# coding = utf-8
import requests
def JoinLotteries(url):
res = requests.get(url,headers=headers)
# 获得抽奖列表 table
table = res.json().get('data')
url = 'https://lucky.nocode.com/lottery/{id}/join'
for item in table:
if item.get('joined') == False:
res = requests.post(url.format(id=item.get('id')),headers=headers)
if res.status_code == 200 and res.json().get('data') == True:
print('成功参与抽奖:')
prizes = item.get('prizes').get('data')
for prize in prizes:
print(prize.get('name'))
def main():
headers['Authorization'] = input("请输入你的Authorization值:")
print('正在参与公共福利抽奖...')
JoinLotteries('https://lucky.nocode.com/public_lottery?page=1&size=5')
for i in range(100):
print('正在参与自助福利抽奖...')
JoinLotteries('https://lucky.nocode.com/square')
if __name__ == '__main__':
# 统一请求头
headers = {}
main()
抓包方式
由于微信小程序官方开发文档:HTTPS 证书
小程序必须使用 HTTPS 请求。小程序内会对服务器域名使用的 HTTPS 证书进行校验,如果校验失败,则请求不能成功发起。由于系统限制,不同平台对于证书要求的严格程度不同。为了保证小程序的兼容性,建议开发者按照最高标准进行证书配置,并使用相关工具检查现有证书是否符合要求。
所以请确保你所使用的抓包工具能捕获和解密手机的HTTPS数据包。 推荐使用Fiddler(PC),Authorization值:
注:以下教程仅适用于安卓手机。
1. 安装Packet Capture
2. 启动Packet Capture,Get Started->Continue->Install Certificate。
重命名证书名称,或者保持默认,然后点击确定
3. 点击顶部第一个按钮,然后在弹出的列表里选择微信
4. 不关闭Packet Capture,打开微信,进入抽奖助手小程序,然后再切换回去Packet Capture
第一步点击红色按钮暂停抓包(这一步并非必须做),第二步点击下面列表第一项。
5. 查找ip为1
06.75.214.244,port为443的数据包,然后点击进去
Wireshark捕获并解密HTTP数据包添加环境变量(控制面板->系统和安全->系统->高级系统设置->环境变量)SSLKEYLOGFILE,将其值设定为一个.log文件(路径和名称随意)打开Wireshark,选择一个网卡,进去之后,编辑->首选项->Protocols->SSL,点击最下面的Browse按钮,选择刚才配置环境变量时设定的log文件打开红芯(划掉)Chrome浏览器,或者是Firefox,随便上一个https的网站,如,https://www.baidu.com。
重启Wireshark,选择刚才那个网卡进入,刷新刚刚打开的网页,现在就可以看到解密后的数据包了。
Chrome/Firefox浏览器会根据上面配置的环境变量SSLKEYLOGFILE,在其对应的log文件里写入一些CLIENT_RANDOM开头的值,用于Wireshark来解密数据包。
以上方法的效果:使得Wireshark能捕获并解密来自Chrome或Firefox浏览器的HTTPS数据包。所以这样做,我们手机连接电脑热点也无法用Wireshark来捕获解密手机的HTTPS数据包。
工具推荐