[网鼎杯 2020 青龙组]jocker

29 篇文章 1 订阅

运行程序,发现是要我们自己输入

那么肯定是拿到enc慢慢还原

32位,无壳

进来就红一下报错

 

这里可以看见长度为24

动调一下看看

这里进行了大量的异或

这里是对地址开始的硬编码进行异或,从而达到smc的效果

所以你也可以发现在进行这一步操作之前

encry函数全是报错

你点开数据段也发现这有很大一段数据

其实是因为没有异或前,是乱的

使用IDA以为是数据,保存在这

u和p一下就正常了

这是没有异或前的编译

a1就是我们输入的

然后buffer 和v1我们都知道

到这里就解出来了一部分

剩下那一部分就要靠脑洞了

你可以发现

buff是24位,说明buff还要用

我们已知最后一个是}

利用这个得到66

既然我们找不到其他数据

就用66带进去,异或

re就是要慢慢试

失败~

又想!

flag{fak3_alw35_sp_me!!}

这是前面得到的fake flag

能用吗?

直接粘贴上后面五位

还是G

好吧,现在整理下思路

已知!buff肯定要用!因为他的位数刚好24

我们围绕buff来

作者的语言也会给我们信息

为什么是come here

然后一个put函数?

f5什么也看不见

汇编呢?

汇编不是连着的吗

下面原本是一堆数据

你p一下

就出现五个数据!

试一下

塞在后面还是错了

__________

经过一系列猜测(看wp)

原来我先入为主认为buff一定ok了

op1=[0x0000000E, 0x0000000D, 0x00000009, 0x00000006, 0x00000013, 0x00000005, 0x00000058, 0x00000056,
    0x0000003E, 0x00000006, 0x0000000C, 0x0000003C, 0x0000001F, 0x00000057, 0x00000014, 0x0000006B,
    0x00000057, 0x00000059, 0x0000000D]
buuf='hahahaha_do_you_find_me?'
for i in range(len(op1)):
    print(chr(op1[i]^ord(buuf[i])),end='')
op2=[37,116,112,38,58]# 71 ^ 58 = chr('}')
for i in op2:
    print(chr(71^i),end='')

最后,至于其他wp那个改堆栈,其实对我没什么感觉,我就没写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Nickname

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值