re [网鼎杯 2020 青龙组]jocker 复现

本文讲述了对32位无壳exe文件的破解过程。放入ida后因堆栈不平衡手动修改,发现假flag并得知真flag为24位。encyrpt函数中有关键加密代码和smc,动调为简单异或操作,只能看到前19位。尝试用subprocess爆破后失败,最后需在fanally函数中找最后5位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

32位exe,无壳,主要考smc和堆栈

放入ida,最开始堆栈不平衡,ida不能很好的反汇编,先手动修改一下,然后有个假的flag

 flag{fak3_alw35_sp_me!!}一看就是假的,但是知道了flag是24位的,接着往下走,encyrpt函数里是关键加密代码,有个smc,可以写脚本静态,我用的动调

 动调出来就是简单的异或操作

encry=[14,   0,   0,   0,  13,   0,   0,   0,   9,   0,
    0,   0,   6,   0,   0,   0,  19,   0,   0,   0,
    5,   0,   0,   0,  88,   0,   0,   0,  86,   0,
    0,   0,  62,   0,   0,   0,   6,   0,   0,   0,
   12,   0,   0,   0,  60,   0,   0,   0,  31,   0,
    0,   0,  87,   0,   0,   0,  20,   0,   0,   0,
  107,   0,   0,   0,  87,   0,   0,   0,  89,   0,
    0,   0,  13,   0,   0,   0]
e1=[]
for i in encry:
    if i!=0:
        e1.append(i)
real_key='hahahaha_do_you_find_me?'
for i in range(len(key)):
    print(chr(ord(real_key[i])^e1[i]),end='')

但是到这里只能看到flag的前19位 :flag{d07abccf8a410c

本来想直接用subprocess爆破出来的,反正只有4位未知了,最后是},但是第一次用,没想到给我报了60多个flag,都是错的,而且到最后我把正确的flag带进去也没有什么独特的回显,只能继续往下做了,接下来是fanally函数

strrr='%tp&:'
for i in range(5):
    print(chr(ord(strrr[i])^71),end='')

这就是最后5位了

flag{d07abccf8a410cb37a}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值