全球主机交流论坛

标题: 通用型微信抢红包神器 [打印本页]

作者: lovees    时间: 2016-2-27 05:07
标题: 通用型微信抢红包神器
本帖最后由 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
(, 下载次数: 0)
当群组或者用户给我们发红包时可以在返回内容中可以看到红包的 URL 地址(手机端老版本的微信是使用 H5 的接口领取红包,而无法自动判断用户发来的消息是否为红包,网页版本微信解决了判断是否为红包消息的问题,并且能获取 URL)。
直接在浏览器访问获取到的红包 URL,提示来源错误。任何 HTTP 请求重放都是简单的,之后使用 Mitmproxy 获取手机抢红包时的 Cookie,User-Agent 等 Header 头,然后进行重放包是可以成功领取红包的。
(, 下载次数: 0)
Process
流水线:
使用 JavaScript 对微信网页版 Hook 实时监听,判断收到消息是否为红包,如果是则匹配;
使用 Mitmproxy 对手机端进行抓包,获取 Header 信息;
利用获取到的头信息填充至开始获得到的红包地址,领取红包;
自动化:
编写填充头信息以方便打开红包的 Python 脚本;
编写实时监控浏览器中网络传输红包数据的 JavaScript 脚本;
考虑方便本机搭建 Mini Django 项目,在获取到红包 URL 后自动发送请求给后端抢红包[1];
...
效果图:
(, 下载次数: 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. (, 下载次数: 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
复制代码


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

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


作者: 598440119    时间: 2016-2-27 05:11
你到底想说什么
作者: lovees    时间: 2016-2-27 05:14
水一贴而已!!!!!!!!!水水水!~!~!~!~!
作者: 斜阳晚暮    时间: 2016-2-27 05:21
首先要能加入土豪群。
不然吊死和吊死在一起,抢个毛。
作者: lovees    时间: 2016-2-27 05:26
:lol:lol
必须的!!!!!!!!!
作者: yjlml    时间: 2016-2-27 09:23
我想说 手机上早就有插件了!   只要有网络 有人发红包都会自动抢   
微信也不需要你开着   锁屏着一样可以自动抢
作者: ggnyj2007    时间: 2016-2-28 10:37
网上的插件不敢用,后门大大的
作者: 气味    时间: 2016-2-28 10:39
不明觉厉
作者: loveni    时间: 2016-2-28 10:42
不懂玩
作者: 叫妇    时间: 2016-2-28 13:22
大水逼
作者: sense    时间: 2016-2-28 13:24
涉及账户安全
作者: roppl    时间: 2016-3-1 11:26
yjlml 发表于 2016-2-27 09:23
我想说 手机上早就有插件了!   只要有网络 有人发红包都会自动抢   
微信也不需要你开着   锁屏着一样 ...

求插件..




欢迎光临 全球主机交流论坛 (https://sunk.eu.org/) Powered by Discuz! X3.4