攻防世界-reverse-game

破解程序需要先查看程序运行的过程找出关键的字符串进行破解

玩个游戏

n为灯的序号,m为灯的状态

如果第 N 个灯的 m 为 1,则点亮,否则熄灭

起初所有的灯都关上了

现在你可以输入 n 来改变它的状态

但是你要注意一件事,如果你改变第N个灯的状态,第(N-1)个和第(N+1)个的状态也会改变

当所有灯都亮时,会出现flag

现在,输入 n

输入 n,n(1-8)

1.△ 2.○ 3.◇ 4.□ 5.☆ 6.▽ 7.( ̄▽ ̄)/ 8.(;°Д°) 0.重启

n=

要是我来写这个程序的话我会每次输入之后都会判断一下这8个是不是都连起来了,可以设置0是没有连接,1是连接,如果8个都是1就会出现flag否则就是轮回了。

没有加壳,直接OD动态调试

查看一下字符串有没有敏感的关键词

找到了flag的提示地方双击进去

下个断点,记下位置009ce968

在输入完数字之后下断点逐步运行查看

动态调试:

先判断是不是1-8的数字不是就提示sorry,n error,try again\n否则就跳转

这里跳转执行成功

进入清屏

关键就是这里了,这里会逐个判断具体是怎么判断的没有细看,但是如果ZF标志位为0。Jnz跳转执行就会调到标记轮回的位置,而这里是jmp无条件跳转,跳转到重新输入的地方直到8个灯都连接才行,所以我将这里的jnz全部改为jz,jnz跳转依据:zf=0跳转,jz是zf=0 不跳转;并且把jmp无条件跳转使用nop填充;

直接来到了flag显示的地方,直接f9出现flag

把刚刚修改的地方保存下来另存到破解版文件,就是暴力破解的操作了。zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值