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

MENU

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

2022 年 12 月 01 日 • 阅读: 3218 • 技术,网络,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 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码
添加新评论

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • (。•ˇ‸ˇ•。)
  • 妖梦
  • 泡泡
  • 阿鲁
  • 颜文字