如何分析微信 Https 流量并获取用户信息接口
·2024-08-01 10:24:35 浏览次数: TGA:绝地求生各种枪最佳配件绝地求生十大神枪大神求生绝地枪配什么武器
经过数次实践,微信的所有通信都采用了HTTPS技术进行加密传输,因此在采集到的数据中未发现有价值的参考数据。在此背景下,破解现有加密数据并提取有效信息成为当前迫切需要解决的难题,然而面对如此坚固的防御体系,我们获取信息的途径似乎陷入了困境。
破解HTTPS加密的方法
为了解决此难题,我们借助尖端科技手段,将根证书植入手机与电脑中,以深度解密HTTPS通讯流量。尽管这一过程看似复杂,但一旦配置完成,必然能够揭示出隐秘信息中的细枝末节,犹如打开了通向未知世界的神秘之门。
{
"user_info": {
"openid": "oODfo0pjBQkcNuR4XLTQ321xFVws",
"head_img_url": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM5hSWxxxxxUQPwW9ibxxxx9DlxLTsKWk97oWpDI0rg/96",
"nick_name": "望",
"role_name": "xxxx",
"zone_area_id": 0,
"plat_id": 1
},
"battle_info": {
"total_1": 75,
"total_10": 336,
"total_game": 745,
"total_kill": 1669
},
"battle_list": [{
"map_id": 1,
"room_id": "6575389198189071197",
"team_id": 57,
"dt_event_time": 1530953799,
"rank_in_ds": 3,
"times_kill": 1,
"label": "前五",
"team_type": 1,
"award_gold": 677,
"mode": 0
}],
"appitem": {
"AppID": "wx13051697527efc45",
"IconURL": "https://mmocgame.qpic.cn/wechatgame/mEMdfrX5RU0dZFfNEdCsMJpfsof1HE0TP3cfZiboX0ZPxqh5aZnHjxPFXUGgsXmibe/0",
"Name": "绝地求生 全军出击",
"BriefName": "绝地求生 全军出击",
"Desc": "官方正版绝地求生手游",
"Brief": "枪战 | 808.2M",
"WebURL": "https://game.weixin.qq.com/cgi-bin/h5/static/detail_v2/index.html?wechat_pkgid=detail_v2&appid=wx13051697527efc45&show_bubble=0",
"DownloadInfo": {
"DownloadURL": "https://itunes.apple.com/cn/app/id1304987143",
"DownloadFlag": 5
},
"Status": 0,
"AppInfoFlag": 45,
"Label": [],
"AppStorePopUpDialogConfig": {
"Duration": 1500,
"Interval": 172800,
"ServerTimestamp": 1531066098
},
"HasEnabledChatGroup": false,
"AppType": 0,
"game_tag_list": ["绝地求生", "正版还原", "好友开黑", "百人对战", "超大地图"],
"recommend_reason": "正版绝地求生,荒野射击",
"size_desc": "808.2M"
},
"is_guest": true,
"is_blocked": false,
"errcode": 0,
"errmsg": "ok"
}
流量分析的初步成果
{
"errcode": 0,
"errmsg": "ok",
"next_after_time": 1528120556,
"battle_list": [{
"map_id": 1,
"room_id": "6575389198111172597",
"team_id": 57,
"dt_event_time": 1530953799,
"rank_in_ds": 3,
"times_kill": 1,
"label": "前五",
"team_type": 1,
"award_gold": 677,
"mode": 0
}, {
"map_id": 1,
"room_id": "6575336498940384115",
"team_id": 11,
"dt_event_time": 1530941404,
"rank_in_ds": 5,
"times_kill": 2,
"label": "前五",
"team_type": 1,
"award_gold": 632,
"mode": 0
}],
"has_next": true
}
在证书成功部署之后,我们得以更加深度地解析网络流量。现在,我们可以发掘HTTPS请求和响应中潜藏的珍贵信息,从而准确识别所需的业务接口。此过程犹如探寻神秘宝藏地图,每一步都充满了未知的惊喜。
{
"errcode": 0,
"errmsg": "ok",
"base_info": {
"nick_name": "柚茶",
"head_img_url": "http://wx.qlogo.cn/mmhead/xxxx/96",
"dt_event_time": 1528648165,
"team_type": 4,
"rank": 1,
"player_count": 100,
"role_sex": 1,
"label": "大吉大利",
"openid": "oODfo0s1w5lWjmxxxxxgQkcCljXQ"
},
"battle_info": {
"award_gold": 622,
"times_kill": 6,
"times_head_shot": 0,
"damage": 537,
"times_assist": 3,
"survival_duration": 1629,
"times_save": 0,
"times_reborn": 0,
"vehicle_kill": 1,
"forward_distance": 10140,
"driving_distance": 5934,
"dead_poison_circle_no": 6,
"top_kill_distance": 223,
"top_kill_distance_weapon_use": 2924130819,
"be_kill_user": {
"nick_name": "小旭",
"head_img_url": "http://wx.qlogo.cn/mmhead/ibLButGMnqJNFsUtStNEV8tzlH1QpwPiaF9kxxxxx66G3ibjic6Ng2Rcg/96",
"weapon_use": 20101000001,
"openid": "oODfo0qrPLExxxxc0QKjFPnPxyI"
},
"label": "大吉大利"
},
"team_info": {
"user_list": [{
"nick_name": "ooo",
"times_kill": 6,
"assist_count": 3,
"survival_duration": 1638,
"award_gold": 632,
"head_img_url": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM4k4RXdyxavNxxxxUjcX6Tl47MNNV1dZDliazRKRg",
"openid": "oODfo0xxxxf1bRAXE-q-lEezK0k"
}, {
"nick_name": "我吃炒肉",
"times_kill": 2,
"assist_count": 2,
"survival_duration": 1502,
"award_gold": 583,
"head_img_url": "http://wx.qlogo.cn/mmhead/sTJptKvBQLKd5SAAjOF0VrwiapUxxxxFffxoDUcrVjYbDf9pNENQ",
"openid": "oODfo0gIyDxxxxZpUrSrpapZSDT0"
}]
},
"is_guest": true,
"is_blocked": false
}
关键接口的发现
url = 'https://game.weixin.qq.com/cgi-bin/gamewap/getpubgmdatacenterindex?openid=%s&plat_id=0&uin=&key=&pass_ticket=%s' % (openid, settings.pass_ticket)
r = requests.get(url=url, cookies=settings.def_cookies, headers=settings.def_headers, timeout=(5.0, 5.0))
tmp = r.json()
wfile = os.path.join(settings.Res_UserInfo_Dir, '%s.txt' % (rediskeys.user(openid)))
with codecs.open(wfile, 'w', 'utf-8') as wf:
wf.write(simplejson.dumps(tmp, indent=2, sort_keys=True, ensure_ascii=False))
通过深度分析,我们专注于以下三个关键接口:收集完整的用户数据、获取用户实际操作记录和实时监控游戏活动。这些接口如同宝贵矿床,各自富含独特价值。无需深究其精密计算法则,仅需简单的网络抓取和默认信息提取,便可将其融入到程序代码中,立即投入使用。
数据抓取的策略
# rediskeys.user_battle_list 根据openid获取存在redis中的key值
def user_battle_list(openid):
return 'ubl_%s' % (openid)
确立接口后,立即展开全方位数据搜集,并借用Redis工具来做信息标注,从而避免重复采集现象。这一策略堪比给每位信息资源赋予独特标签,确实保证了有效的信息挖掘。
# 在提取battle list之前,首先判断这用用户的数据是否已经提取过了
if settings.DataRedis.get(rediskeys.user_battle_list(openid)):
return True
爬虫任务的实现
# 在提取battle list之后,需要在redis中记录用户信息
settings.DataRedis.set(rediskeys.user_battle_list(openid), 1)
该接口实现了A至B的双重引导以及反向指引功能,以防信息采集的重复性。这如同给每份有用的数据宝藏贴上标签,有效避免了同一地点的重复探索。
task_queues = (
Queue('queue_get_battle_info', exchange=Exchange('priority', type='direct'), routing_key='gbi'),
Queue('queue_get_battle_list', exchange=Exchange('priority', type='direct'), routing_key='gbl'),
Queue('queue_get_user_info', exchange=Exchange('priority', type='direct'), routing_key='gui'),
)
task_routes = ([
('get_battle_info', {'queue': 'queue_get_battle_info'}),
('get_battle_list', {'queue': 'queue_get_battle_list'}),
('get_user_info', {'queue': 'queue_get_user_info'}),
],)
数据分析的惊人发现
@app.task(name='get_battle_list')
def get_battle_list(openid, plat_id=None, after_time=0, update_time=None):
# 判断是否已经取过用户战绩列表信息
if settings.DataRedis.get(rediskeys.user_battle_list(openid)):
return True
if not plat_id:
try:
# 提取用户信息
us = handles.get_user_info_handles(openid)
plat_id=us['plat_id']
except Exception as e:
print 'can not get user plat_id', openid, traceback.format_exc()
return False
# 提取战绩列表
battle_list = handles.get_battle_list_handle(openid, plat_id, after_time=0, update_time=None)
# 为每一场战斗创建异步获取详情任务
for room_id in battle_list:
if not settings.DataRedis.get(rediskeys.user_battle(openid, room_id)):
get_battle_info.delay(openid, plat_id, room_id)
return True
在收集和处理了高达20万条用户信息之后,我们对其展开深度分析。研究表明,用户平均每天在该平台上花费超过两小时的时间,绝大部分人则停留超过一小时,还有部分人连续使用长达8小时之久。这些精确且详实的数据让我们能够更为深入地了解用户的行为规律,帮助我们逐步揭示出用户行为的深层机制。
游戏高峰时段的揭示
from tasks.all import get_battle_list
my_openid = 'oODfo0oIErZI2xxx9xPlVyQbRPgY'
my_platid = '0'
get_battle_list.delay(my_openid, my_platid, after_time=0, update_time=None)
分析显示,晚上10点是玩家的游戏活跃高峰期,这让我们对于用户的游戏行为有了更深入的了解。此时游戏界犹如巅峰时刻,种种事物皆呈现至臻之境。
游戏本质的反思
# 启动获取用户详情worker
celery -A tasks.all worker -c 5 --queue=queue_get_user_info --loglevel=info -n get_user_info@%h
# 启动获取战绩列表worker
celery -A tasks.all worker -c 5 --queue=queue_get_battle_list --loglevel=info -n get_battle_list@%h
# 启动获取战绩详情worker
celery -A tasks.all worker -c 30 --queue=queue_get_battle_info --loglevel=info -n get_battle_info@%h
在本次实践中,通过深入挖掘,我们成功收集了大量游戏数据并深入分析了其内在奥秘。游戏不仅仅是简单的消遣工具,它还生动地展现出人与人之间的行为和心理互动。本次数据采集主要得力于微信游戏频道对匿名玩家数据的公开披露,这为我们提供了宝贵的研究素材。基于此,我们有能力进一步剖析其他热门游戏,例如《王者荣耀》等的数据,对于此类研究感兴趣的人士可以尝试进行探索。
celery flower -A tasks.all --broker=redis://:$REDIS_PASS@$REDIS_HOST:$REDIS_PORT/10