【NSSCTF逆向】【2023题目】《snake》《easy_asm》

发布时间 2023-05-30 00:23:34作者: Corax0o0

题目snake

解法

是一个pyc文件,经过之前的学习。了解到可以通过uncompyle6的反编译还原出一个py脚本
试试

反编译不出来,后面查阅了别人的资料了解到这个魔数是类似于标记python脚本的东西,uncompyle6的报错告诉我们没找到这个魔数
于是winhex看看

结合看别人的正常的pyc文件头,看到这里的头已经被修改过了。
所以我们现在要做的就是还原出一个好的magic number然后让他能被反编译。
起先我认为,这个是根据本机的环境,也就是python来决定魔数的,于是我用我电脑上的一个py文件生成了一个pyc文件
然后可以看到这个magic number

可以看到这是61 0D 0D 0A,然后我填的题目里进行反编译

后来试了一下python3.7才明白,这个number得根据编译文件的版本,题目可以看到

再网上找了37的魔数 https://www.cnblogs.com/Here-is-SG/p/15885799.html

(得倒置)
再翻译就成功了,然后就有了一个py脚本

关键在于这里,直接截取关键段并输出

LitCTF{python_snake_is_so_easy!}

题目easy_asm

解法

这道题是把我苦了很久的一道题,打也打不开(是msdos文件)。没办法直接扔进ida

代码看上去是很轻松,但是不让f5,只能自己慢慢分析了。

这串代码是关键,把al当中的内容和\(相比较,不相同则转移到前面,意思就是不相等就继续循环,找到al的内容为\)就出去了。
所以我看别人的wp将这里其实就是判断到没到\(,也就是说到\)就到结尾了。
但是我看上面的东西我又不明白了,xor的结果不是应该存在al当中吗?
那后面的cmp中的al已经是被操作过的了,怎么会是输入的字符串呢?
输入后的字符串应该经过和0x10异或过了,应该是异或过的字符串,不应该啊。有明白的师傅可以评论指点一下。


那既然wp都这么讲,只能硬着头皮写了吧。
其实刚开始还有一个不明白,就是al到底是怎么存的。
直到看见这里的buffer

实际上也是关系到键盘输入的。


那我们继续往下看,wp讲下面已经有密文了。
我往下看

wp有讲equal!前面的都是判断而已,不是密文,我也不大明白,只能硬着头皮看下去。
也就是说X。。后面的东西才是密文,把他经过^0x10。就是我们的flag。
贴上别的师傅的脚本

NSSCTF{Just_a_e3sy_aSm}

附:其实这题前几天已经做了,但是因为想不明白最后的那个判断过程,所以也没交flag。
现在和别的师傅交流了一下,探讨了一下这道题中读取字符和比较的详细过程,虽然现在暂定的结果还是题有些问题,但还是学了不少。

。今天打了三个多小时羽毛球。爽的一。题做的有点少了最近也在考试。加大力度

总结

snake pyc反编译 反混淆
easy_asm 二进制 asm