buuctf刷题记录21 [网鼎杯 2020 青龙组]jocker

27 篇文章 0 订阅

今天挑战一下,结果最后还是看了别人的wp才写出来的

无壳,ida查看发现不能f5,原因堆栈不平衡

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUAu0Xci-1596278228411)(D:\markdown\文件\图片\7.14.1.png)]

进行栈指针修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6BkDtEJ-1596278228413)(D:\markdown\文件\图片\7.14.2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n39QDbSk-1596278228415)(D:\markdown\文件\图片\7.14.3.png)]

修改出错的地方的栈指针偏移,快捷键alt+k,值改为0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1KY3YKVs-1596278228418)(D:\markdown\文件\图片\7.14.4.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWgnwBsY-1596278228419)(D:\markdown\文件\图片\7.14.5.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yGBUzdnF-1596278228421)(D:\markdown\文件\图片\7.14.6.png)]

然后就能f5了,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mlviMbi1-1596278228422)(D:\markdown\文件\图片\7.14.7.png)]

逻辑也不难,首先输入长度是24位,然后有三个关键函数 wrong(),omg(),encrypt()

先看wrong和omg,wrong函数,对输入的前24个进行加密

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a7uKCXhT-1596278228423)(D:\markdown\文件\图片\7.14.8.png)]

omg函数比较wrong加密结果和unk_4030C0地址的值是否相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QIxxC8Uc-1596278228423)(D:\markdown\文件\图片\7.14.9.png)]

把unk_4030C0地址的值考出来,写个脚本

s=[102, 107, 99, 100, 127, 97, 103, 100, 59, 86, 107, 97, 123, 38, 59, 80, 99, 95, 77, 90, 113, 12, 55, 102]
out=[]
for i in range(0,24):
    if i&1 :
        s[i]+=i
        out.append(s[i])
    else:
        s[i]^=i
        out.append(s[i])
for i in out:
    print(chr(i),end='')

得到 flag{fak3_alw35_sp_me!!},但这是个假的flag,头疼

继续看第三函数:encrypt,由于这里encrpty的参数是v5,与之前的两个函数无关,所以这里的v5就是最初输入

但是这里encrpy不能反编译,直接点进这个函数也是一堆乱码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bGemdlNg-1596278228424)(D:\markdown\文件\图片\7.14.10.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XCGnxuo0-1596278228426)(D:\markdown\文件\图片\7.14.14.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SRmAuIzT-1596278228426)(D:\markdown\文件\图片\7.14.15.png)]

好办,直接上od,在这个函数调用前的位置0x401833 下断点,然后执行到这:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OSASTWkj-1596278228427)(D:\markdown\文件\图片\7.14.11.png)]

f7步入,可以看到函数已经解密了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K0IzCV2h-1596278228428)(D:\markdown\文件\图片\7.14.12.png)]

啊然后olldump直接脱壳,保存到新的exe

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iBKwIB71-1596278228429)(D:\markdown\文件\图片\7.14.13.png)]

然后ida打开新的,找到这个函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3uFNtSUq-1596278228430)(D:\markdown\文件\图片\7.14.16.png)]

逻辑是,对输入的内容和hahahaha_do_you_find_me?这个字符串进行异或,然后和一个全局变量进行比较,注意只异或了19个字节,然后写出脚本还原一下

ans=[]
v2=[14, 13, 9, 6, 19, 5, 88, 86, 62, 6, 12, 60, 31, 87, 20, 107, 87, 89, 13]
str1='hahahaha_do_you_find_me?'
for i in range(0,19):
    ans.append(ord(str1[i])^v2[i])
for i in ans:
    print(chr(i),end='')

得到:flag{d07abccf8a410c

但是还差几位,继续看(由于是脱壳后的新程序,所以里的函数名有些不同)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSuN7LNU-1596278228432)(D:\markdown\文件\图片\7.14.17.png)]

最后有个函数,点进去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c49N0FYw-1596278228434)(D:\markdown\文件\图片\7.14.18.png)]

后面的判断就是无厘头,每次都是随机的,感觉这个函数有问题

但是flag的最后一位是“}”,这是固定的

盲猜v7应该是与某个数异或得到“}”

58 ^ ‘}’=71

2v3-v6应该逐位这个数异或,所以得到了后面几位:b37a}

完整拼接后得到flag{d07abccf8a410cb37a}

什么脑洞啊这是!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值