点击关注我的Telegram群组和微信公众号

MENU

如何在黑五用99%的折扣购买想要的软件授权

2022 年 12 月 01 日 • 阅读: 364 • 技术,网络,Python,分享,教程

前言

Mailbird 是一款我用了很多年的 Windows 平台的邮箱客户端,对于我这样拥有多个活跃邮箱帐号的重度用户而言是极好用的。最近,由于新的需求,准备升级到它的商业版(主要是为了支持Exchange邮箱)。这周,Mailbird 发布了其今年的黑五促销信息。它官方网站上创建了一个新的页面,随机地生成折扣比例并附加到终身版授权的订单中。在这个页面中,我们可以看到最高折扣率为99%,那么就不得不试一下该如何获得这最高的折扣了。

Screenshot 2022-11-25 175833

判断折扣生成的方式

  • 首先我们从表象开始分析

    • 在进入页面后,折扣会开始滚动并最终固定在一个折扣率上。而我们有一次机会重新随机这个折扣率

      image-20221125194104959

    • 在这之后,重新随机的按钮会消失

      image-20221125194121339

    • 随便地使用浏览器的隐身模式我们便可以重复上面的步骤,发现隐身模式中获得的折扣不会被之前的记录影响;已经固定的折扣率,不会因为离开页面而丢失

      • 那么我们就可以简单地判断出折扣数据应该是写在cookie中的,因为不保存cookie是隐身模式中很重要的一个特征,也是常用的保存用户数据和特征值的地方
    • 现在打开一个新的隐身模式会话,启用浏览器的控制台,我们看看在访问这个活动页面时都有什么请求

      • 直接打开页面,只发现了一个动态请求

        • https://mailbird.onfastspring.com/popup-biz-payonce/builder

          • 直接访问这个接口,我们发现返回了invalid-origin的跨域错误
          • 看接口名称,应该是生成一个购买的对象
      • 点击购买按钮请求了一个类似的finalize接口

        • https://mailbird.onfastspring.com/popup-biz-payonce/builder/finalize
      • 点击购买后处理支付的是一个名为 FastSpring 的第三方平台,可以捕获到请求的支付页面

        • https://mailbird.onfastspring.com/popup-biz-payonce/session/[id]?_ga=[ga_id]

          • 其中 id为一个22位的字串符
          • ga_id是一个很长的用户标识符,考虑到网络包中有很多 Google Analysis 的请求,应该ga指的就是谷歌提供的用户标签

            image-20221125223644299

          • 直接在浏览器中请求这个地址就会在第三方页面上完成支付,因为id一栏代表了这个交易的 ID,而这个交易中有一个已经填上的优惠码,使得价格为网页上显示的折扣后价格

            image-20221125223606659

      • 继续检查请求,发现了一个很有趣的接口

        • https://www.getmailbird.com/wp-content/themes/MailbirdTheme/root/get-discount-bfcm.php?data=[data]

          • 其中[data]是一些长度极长的数据

            • 这时候在控制台的Application一栏中检查一下网站用到的 cookie,很容易就发现有一个名为getmailbird_com_black_friday_2022的cookie。这条 cookie 记录的值长度不固定,大致是在1935左右。但是这个值始终都由eyJp开头,加上其这明显的名称,可以先认定它为储存折扣信息的cookie。而最碰巧的是,这个cookie就是上方[data]的值

              image-20221125223530841

          • 如果直接请求这个接口会返回一些键值,包括fs_keyproductsproducts中又包括了销售的软件授权产品,包括personal_payonce, personal_lifetime_update, business_payoncebusiness_lifetime_update

            • 也许这些值就是组成cookie的原始数据,但如果不去阅读代码的话,肯定是不知道是如何的逻辑了。这里由于我的JavaScript水平几乎为0,所以就跳过了。
    • 那么,携带着有效cookie时,请求这个get-discount-bfcm.php接口会得到什么呢?

      {"success":"true",
       "id":"...",
      "discount":75,
      "coupon":"BFCM75XX7UAHH",
      "type":"none",
      "quantity":1,
      "fs_key":"...",
       "products":{"personal_payonce":"...",
           "personal_lifetime_update":"...",
                   "business_payonce":"...",
                   "business_lifetime_update":"..."}
      }
      • 看到这里,就已经有答案了:它不仅会返回订单是否有效的布尔值,还会返回折扣率、折扣码这样的重要信息。

刷取折扣

  • 虽然我们预先判断了 cookie 是在网页请求数据后由 JavaScript 产生的,但总归还是要试一试的。我们先通过 Python 的 requests 库来看一下初次请求网页后会得到怎样的 cookie
import requests

if __name__ == '__main__':
    req_session = requests.Session()
    req_session.get("https://www.getmailbird.com/blackfriday-2022/?utm_location=US#")
    cookie = req_session.cookies.get_dict()
    print(cookie)

###
{'PHPSESSID': '041487c314ef12f26a4c9b7dedatg6d'}
###
  • 只有一个PHPSESSID,那也就证实判断。如此,就不得不使用无头浏览器来模拟真实浏览器,进而获取到 cookies 了
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get("https://www.getmailbird.com/blackfriday-2022/?utm_location=US#")

find_cookie = False
this_cookie = ""
while not find_cookie:
    cookie_list = driver.get_cookies()
    for cookie in cookie_list:
        if cookie['name'] == 'getmailbird_com_black_friday_2022':
            find_cookie = True
            this_cookie = cookie['value']
            print(this_cookie)
driver.close()

###
eyJpZCI6IjE4NGE5YTk0NDc0NmZlLTA1NWMwNTc0MDNhZmUxLTc3MTg1MzQyLTc1MzAwLTE4...
###
  • 看上去是成功获取到 getmailbird_com_black_friday_2022的值了。那么,我们就尝试用这个值来请求订单数据,看究竟能不能获取到折扣码
import json

url = "https://www.getmailbird.com/wp-content/themes/MailbirdTheme/root/get-discount-bfcm.php?data=" + this_cookie
response = json.loads(requests.get(url).text)
if response['success'] == 'true':
    discount_rate = [int(response['discount']), this_cookie]
else:
    print("Error: " + response['error'])
    discount_rate = [0, this_cookie]
print(discount_rate[0])

"""
75
"""
  • 很明显,这就是成了。那么我们只要写成脚本循环执行即可去刷想要的折扣了。附上完整代码:
import json
import requests
from selenium import webdriver


def job():
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    driver.get("https://www.getmailbird.com/blackfriday-2022/?utm_location=US#")

    # Find cookie
    find_cookie = False
    this_cookie = ""
    while not find_cookie:
        cookie_list = driver.get_cookies()
        for cookie in cookie_list:
            if cookie['name'] == 'getmailbird_com_black_friday_2022':
                find_cookie = True
                this_cookie = cookie['value']
    driver.close()
    # Get discount rate
    url = "https://www.getmailbird.com/wp-content/themes/MailbirdTheme/root/get-discount-bfcm.php?data=" + this_cookie
    response = json.loads(requests.get(url).text)
    if response['success'] == 'true':
        discount_rate = [int(response['discount']), this_cookie]
    else:
        print("Error: " + response['error'])
        discount_rate = [0, this_cookie]
    return discount_rate


if __name__ == '__main__':
    find_discount = False
    while not find_discount:
        rate = job()
        if rate[0] >= 90:
            if rate[0] == 99:
                find_discount = True
            print(rate)
            with open('test.txt', 'a') as f:
                f.write(rate)
        else:
            print("Discount rate: " + str(rate[0]) + "%")
  • 这段代码会直接检查返回的折扣率

    • 若高于或等于90,则将折扣率和对应的 cookies 写入一个 txt文件
    • 若折扣率为最高值99,则将最后一次打印并写入文件,并停止程序

    image-20221126005119510

  • 这段代码跑了半天就看到了一个99%折扣,同时还生成了一堆90%折扣和一些95%折扣

    • 商家居然真的给了99%折扣,还算得上良心,比拼多多那差1分可强多了
    • 将截获的 cookies 直接覆盖到浏览器会话中,页面上的数据立刻就变了。按照页面上的流程正常下单即可获取0.1折的激活码
      付费
最后编辑于: 2023 年 01 月 16 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码