CTF Bugku(MISC) easy_python

根据提示 请你分析这个游戏,并计算出杀死敌人的最低等级,然后base64加密它
flag:flag{你的答案} 游戏如下:

#coding=utf-8
import socket,threading
try:
    level=open('.level').read()
    level=int(level)
except:
    level=1
class user():
    HP=int(100+(4*level))#血
    Danger=int(10+(3*level))#攻击
    Defence=int(5+(1*level))#护甲
class npc():
    name='穿山甲'
    HP=(3**15)
    Danger=(3**10)
    Defence=100
print('面板\t血量\t攻击力\t防御力\t\n'),
print('玩家 %s\t%s\t%s\t\n'%(user.HP,user.Danger,user.Defence)),
print('怪物 %s\t%s\t%s\t\n'%(npc.HP,npc.Danger,npc.Defence)),
user.Danger=user.Danger-npc.Defence
npc.Danger=npc.Danger-user.Defence
if user.Danger <=0:
    user.Danger=1
if npc.Danger <=0:
    npc.Danger=1
print("开始战斗".center(41,'^'))
while 1:
    npc.HP=npc.HP-user.Danger
    print('你对%s造成了%s 怪物剩余血量 %s\t\n'%(npc.name,user.Danger,npc.HP))
    user.HP=user.HP-npc.Danger
    print('%s对你造成了%s 你剩余血量 %s\t\n'%(npc.name,npc.Danger,user.HP))
    if npc.HP<=0 and user.HP<=0:
        print('平局!!!')
        break
    if npc.HP <=0:
        print('你赢了!!!,你剩余血量 %s\t\n'%(user.HP)),
        break
    if user.HP <=0:
        print('你死了!!!%s剩余血量 %s\t\n'%(npc.name,npc.HP)),
        break
print(("战斗结束 等级+1 您目前等级%s"%(int(level)+1)).center(49,'^'))
open('.level','w').write(str(level+1))

分析游戏  伤害=攻击力 - 防御   剩余HP = 当前HP - 敌方攻击力  如果与穿山甲同归于尽或被穿山甲杀死 等级加一  要想得到杀死穿山甲的最低等级 一遍一遍的试是不可能的 直接写py脚本计算

npchp = 3**15
npcdanger = 3**10
npcdefence = 100
level = 1
while level:
    userhp = (100+(4*level))
    userdanger = (10+(3*level))
    userdefence = int(5+(1*level))
    #计算伤害
    userdanger = userdanger-npcdefence
    npcdangers = npcdanger-userdefence
    #刷新计算boss血量
    npchps = npchp
    #计算hp
    abc = 1
    while abc:
        userhp = userhp-npcdangers
        npchps = npchps-userdanger
        
        if userhp<=0 or npchps<=0:
            abc = 0
    #如果没打赢就升一级
    if userhp <= 0 :
        level = level + 1
    #打败了穿山甲 输出此时的等级并跳出循环
    if npchps <=0 and userhp > 0:
        print(level)
        break
#输出flag
import base64
#level = str(level)
level = str(level).encode('utf-8')
flag  = base64.b64encode(level).decode('utf-8')
print('flag{%s}'%(flag))

直接得到杀死穿山甲的最低等级:56390    flag:flag{NTYzOTA=}

  • 28
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值