[BSidesCF 2020]Cards
是一个21点的游戏,一开始有1000,要赢到100000
首先,打开游戏,会先向/api发送POST请求,获取一段json,保存用户信息
{"SecretState":"enc1","PlayerHand":[],"DealerHand":[],"Balance":1000,"GameState":"Idle","SessionState":"Playing","Bet":0}
/api/config发送POST请求,返回题目配置信息,然后下注进行游戏
{"Goal":100000,"MinBet":10,"MaxBet":500,"GameHandler":"/game.go","DeckHandler":"/deck.go"}
1、点击Deal向/api/deal发送POST
{"Bet":500,"SecretState":"enc1"}
然后返回的内容是手牌信息,这时会返回一个新的SecretState
{"SecretState":"enc2","PlayerHand":[["7","Spades"],["8","Spades"]],"DealerHand":[["X","X"],["4","Clubs"]],"Balance":500,"GameState":"Playing","SessionState":"Playing","Bet":500}
2、点击Hit,向/api/hit发送POST请求
返回
3、点击Stand,向/api/stand发送POST请求
判定是玩家赢,返回新的SecretState,并且把钱加上
4、点击Deal,向/api/deal发送POST
返回
5、点击Stand,向/api/stand发送POST请求
返回
6、再点击Deal,向/api/deal发送POST
返回
7、点击Stand,向/api/stand发送POST请求
返回
8、点击Deal,向/api/deal发送POST
返回
这里的GameState变成了Blackjack,并且余额直接增加了,是1750
如果把enc9作为SecretState,向/api/deal进行重放,直到返回包出现Blackjack,这时会增加金币为2000,返回包的SecretState为enc10,再把enc10作为SecretState,向/api/deal进行重放,这样重复下去,最后余额就会满足条件
至此逻辑就清楚了
Link
https://blog.csdn.net/qq_46263951/article/details/119811028