查壳:
发现里边有个压缩包,弄出来看看:
再查壳看看:
啥也不是,把它扔进IDA:
没有伪代码,一个字‘找’,关键点(是否IDA能成功反编译,还是说用了java的反编译才行,是否有flag或者CTF之类的字样):
发现特殊字样,跟进:
大写String?大胆点进jadx:
成功,告诉我们什么?要大胆点,不然会浪费很多的时间:找我们的NSSCTF吧:
发现一个异或,先记下,继续
找到特殊字样的根源地,而且下面还有yes字样,证明这里是最终的判断:
分析程序能知道是将flag与key异或得到这特殊字样,那么我们反异或不就得到flag?
上脚本:
会给你报个越界的错误,那么怎么改呢?由于ASCII有效位最大位127,那么我们只用%128就好了
Des = '棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌'
key = 123456789
flag = ''
for i in Des:
flag += chr((ord(i) ^ key) % 128)
print(flag)
得到‘jwwgpb_ETO}}`wY’???说明啥,key不对,我们再找找,看看有没有人调用改变key的值:
在这发现有改变了key的值,最终的脚本如下:
Des = '棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌'
key = 987654321
flag = ''
for i in Des:
flag += chr((ord(i) ^ key) % 128)
print(flag)