全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 3344|回复: 11
打印 上一主题 下一主题

通用型微信抢红包神器

[复制链接]
跳转到指定楼层
1#
发表于 2016-2-27 05:07:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lovees 于 2016-2-27 05:11 编辑

本篇文章记录 2015年初时利用微信网页版红包 H5 接口实现的通用型平台抢红包神器,不同于目前市面上的抢红包外挂(模拟点击、HookAPI等)方式,当然该漏洞在15年3月便已经修复。
WebAPI
我们在使用网页版微信时无法点击领取红包,但是通过控制台查看网络包发现红包地址在 Response 中:
https://wxapp.tenpay.com/app/v1.0/receive.cgi?showwxpaytitle=1&sendid=1000033901********10153974107&channelid=1&msgtype=1&ver=2&sign=aefc0f0fadb6f09993fb071bf3****************9b4d8020f07c351c4bb6489d60d65f7f9fb2622f977fa613cbe443f6c7279f03fff2aff18859674c978656ed45388e3f606eae42a0f8ef9014f1***********21e055163c935
299000ec8b975733c3e.jpg (34.09 KB, 下载次数: 0)
当群组或者用户给我们发红包时可以在返回内容中可以看到红包的 URL 地址(手机端老版本的微信是使用 H5 的接口领取红包,而无法自动判断用户发来的消息是否为红包,网页版本微信解决了判断是否为红包消息的问题,并且能获取 URL)。
直接在浏览器访问获取到的红包 URL,提示来源错误。任何 HTTP 请求重放都是简单的,之后使用 Mitmproxy 获取手机抢红包时的 Cookie,User-Agent 等 Header 头,然后进行重放包是可以成功领取红包的。
27c000f5704a27f71d3.jpg (22.58 KB, 下载次数: 0)
Process
流水线:
使用 JavaScript 对微信网页版 Hook 实时监听,判断收到消息是否为红包,如果是则匹配;
使用 Mitmproxy 对手机端进行抓包,获取 Header 信息;
利用获取到的头信息填充至开始获得到的红包地址,领取红包;
自动化:
编写填充头信息以方便打开红包的 Python 脚本;
编写实时监控浏览器中网络传输红包数据的 JavaScript 脚本;
考虑方便本机搭建 Mini Django 项目,在获取到红包 URL 后自动发送请求给后端抢红包[1];
...
效果图:
29d00031c21539d48e8.jpg (15.68 KB, 下载次数: 0)

Code
  1. wechat_web_hook.js:
  2. /*
  3. * HookJS @ evi1m0, fyth, erevus.
  4. * Datetime @ 2015
  5. */

  6. $._ajax = $.ajax;

  7. function check(c){
  8. var AddMsgList = c.AddMsgList;
  9. if (AddMsgList) {
  10. AddMsgList.forEach(function(elem, index){
  11. var str = '';
  12. str = elem.Url || '';
  13. var bingo = /https:\/\/wxapp.tenpay.com/.test(str);
  14. if(bingo) {
  15. str = str.replace(/amp;/g, '')
  16. console.log(str);
  17. $.post('http://localhost:1234/wechat', {url: str})
  18. }
  19. });
  20. }
  21. }

  22. function a(e, n){
  23. e._s = e.success;
  24. e.success = function(data) {
  25. try{
  26. check(data, this);
  27. this._s.apply(this, arguments);
  28. }
  29. catch(e){

  30. }
  31. }
  32. c = $._ajax(e, n);
  33. return c;
  34. }
  35. $.ajax = a;
  36. views.py
  37. #!/usr/bin/env python
  38. # author : evi1m0, rains
  39. # datetime: 201502

  40. from django.shortcuts import render
  41. from django.http import HttpResponse

  42. import re
  43. import sys
  44. import json
  45. import time
  46. import base64
  47. import urllib
  48. import urllib2
  49. import requests

  50. def index(request):
  51. url = 'http://www.baidu.com'
  52. req = urllib2.urlopen(url)
  53. content = req.read
  54. return HttpResponse(content)


  55. def open(request, url):
  56. url = urllib.unquote(url).replace('amp;', '')
  57. print url
  58. cookie = "test "
  59. return HttpResponse(_money(url, cookie))


  60. def _money(url, cookie):
  61. headers_fake = {'User-Agent': ("Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; Galaxy Nexus - 4.2.2 - with Google Apps"
  62. "- API 17 - 720x1280 1 Build/JDQ39E) AppleWebKit/534.30 (KHTML, like Gecko)"
  63. "Version/4.0 Mobile Safari/534.30 MicroMessenger/5.3.0.80_r701542.440"),
  64. 'X-Requested-With': 'com.tencent.mm',
  65. 'Cookie': cookie,
  66. }

  67. try:
  68. req_key_content = requests.get(url, headers=headers_fake).content
  69. except Exception,e:
  70. print e

  71. try:
  72. g_sendld = re.findall('g_sendId: "(.*?)",', req_key_content)
  73. g_sendnick = re.findall('g_sendNick: "(.*?)",', req_key_content)
  74. g_detailtoke = re.findall('g_detailToke: "(.*?)",', req_key_content)
  75. g_detailtoke = (g_detailtoke[0])
  76. except Exception, e:
  77. print '[-] Error: %s' % str(e)
  78. return False

  79. sign_key = (str(url.split('&')[-1:]).split('=')[1])[:-2]
  80. receive_url = ("https://wxapp.tenpay.com/app/v1.0/wxhb_open.cgi?msg_type=&send_id=%s&channel_id=&detailToke=%s&scene="
  81. "&us=&sign=%s&attention=0&hb_version=v2&ver=2&isappinstalled=0&clientversion=25030050&devicetype=android"
  82. "-17")
  83. receive_url = receive_url % (g_sendld[0], g_detailtoke[:-4]+'%3D', sign_key)
  84. # LOLLLLLLLLLLLLLLLLLLLLLLLLL
  85. time.sleep(1)
  86. receive_content = requests.get(receive_url, headers=headers_fake).content

  87. try:
  88. return_json_data = json.loads(receive_content)
  89. if return_json_data['retmsg'] == 'ok':
  90. money_count = return_json_data['amount'] * 0.01
  91. print '[+] Success: %s

  92. 文中部分代码和图片因时间无法全面提供,修复后不再传输红包地址:
  93. 29c0004f1cae554cd4a.jpg (95.51 KB, 下载次数: 0)
  94. 如果你要问现在还有没有新的方法,嗯是有的。

  95. % money_count
  96. return money_count
  97. else:
  98. print '[-] Status: %s' % return_json_data['retmsg']
  99. except Exception, e:
  100. print str(e)
  101. End
复制代码


文中部分代码和图片因时间无法全面提供,修复后不再传输红包地址:

如果你要问现在还有没有新的方法,嗯是有的。

2#
发表于 2016-2-27 05:11:58 来自手机 | 只看该作者
你到底想说什么
3#
 楼主| 发表于 2016-2-27 05:14:12 | 只看该作者
水一贴而已!!!!!!!!!水水水!~!~!~!~!
4#
发表于 2016-2-27 05:21:02 | 只看该作者
首先要能加入土豪群。
不然吊死和吊死在一起,抢个毛。
5#
 楼主| 发表于 2016-2-27 05:26:21 | 只看该作者
:lol:lol
必须的!!!!!!!!!
6#
发表于 2016-2-27 09:23:15 | 只看该作者
我想说 手机上早就有插件了!   只要有网络 有人发红包都会自动抢   
微信也不需要你开着   锁屏着一样可以自动抢
7#
发表于 2016-2-28 10:37:42 | 只看该作者
网上的插件不敢用,后门大大的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-11-10 03:18 , Processed in 0.071722 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表