过程中借鉴博客
IDA出现"sp-analysis failed"和F5(反编译)失败-CSDN博客
[网鼎杯 2020 青龙组]jocker(详解)-CSDN博客
运行获得关键信息
我们分析函数的时候,这里有个报错
然后汇编是这样
有个 sp栈报错
这里我先谈谈我的理解,因为这道题的还有smc的成分,所以在之前的代码中,IDA看encry加密里面可能有return什么的,让栈报错啥的,让IDA分析错误,那么我们在SMC后,重新编译下就OK了
至于其他wp说那个改地址,我感觉没有必要,重新编译后就OK了
这个就是SMC
我们断在后面
然后在汇编中将函数重新编译就正常了
flag{d07abccf8a410c
解出来会少一部分
我们再对下面的finally函数进行重新编译(可能因为SMC的原因,一部分encry的代码干扰了finall让finally也G了)
从函数开始到所以红色的
重新编译就OK
但是这一段的逻辑很混乱
我也是看的其他人的wp才理解到思路——v3这五个字符,可能是和前面加密一样的操作,来得到flag,最后一个一定是},所以我们通过最后一个得到key,然后进行操作
脚本如下
import string
a='hahahaha_do_you_find_me?'
b=[0x0000000E, 0x0000000D, 0x00000009, 0x00000006, 0x00000013, 0x00000005, 0x00000058, 0x00000056,
0x0000003E, 0x00000006, 0x0000000C, 0x0000003C, 0x0000001F, 0x00000057, 0x00000014, 0x0000006B,
0x00000057, 0x00000059, 0x0000000D, ]
flag=''
for i in range(len(b)):
flag+=chr(b[i]^ord(a[i]))
print(flag)
c='%tp&:'
for i in range(len(b),len(a)):
flag+=chr(ord(c[i-len(b)])^71)
print(flag)
for i in string.printable:
if(ord(c[len(c)-1])^ord(i)==ord('}')):
print(ord(i))