CGCTF-Re

从今天开始做逆向的题目,每一题都会写心得,作为积累

1、Hello,RE!

        这一题入门题,应该不会很难。把1.exe拖到PEID和ExeinfoPe里也是发现没有壳的,于是就直接放到IDA里看看,直接F5,上图

1.exe反汇编结果

        然后看到那堆数字就直接转成字符,用“R”键,结果如下

转换结果

        然后再看下面的代码,while语句里两个条件,第一个是判断有没有读完,第二个就是字符串比较。从内存的本质和strcmp的性质来看,应该是比较v4第一个字符的地址开始和v5第一个字符开始的每一个字符。这里注意上面的注释,在内存中,v5应该是在栈顶的,v6、v7……依次往下存储,而v5代表的第一个字符应该是f,也就是说我们依次往后比较的字符应该是每个字符串倒过来的。

        所以最后的答案应该是

flag{Welcome_To_RE_World!}

2、ReadAsm2

        

3、Py交易

        先下载文件,发现后缀名为pyc,没见过,第一次碰到这样的题,不会做。

        于是上网查,看大牛的解释.py与.pyc文件区别

        然后明白,原来pyc与elf是差不多的,都是中间文件,经过汇编的源代码。

        那么思路也就显然了,先反汇编出源代码,然后再看。

        于是去找python反汇编的方式,发现有在线的工具,但是貌似没发现有可以下载的工具?

        具体网址为https://tool.lu

        然后就可以得到这样一段代码


Py.pyc反编译后的程序

        然后下一步就是阅读程序了,大致意思就是判断你输入的flag经过一系列操作后是不是和他给你的正确结果一样。那么也就是说把correct反推就能得到flag。具体的脚本如下

import base64

correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'

correct = base64.b64decode(correct)

#print(type(correct))

s = ''

for i in range(len(correct)):

    x = correct[i]

    x = x - 16

    x = x ^ 32

    s = s + chr(x)

print(s)

        然后我因为不知道base64解码后的返回指类型,刚开始在循环中写的是x = ord(correct[i]),然后给我报错了,就输出了一下解码后的数据类型,发现是bytes,知道应该是数值,本来以为返回的是字符串的。这是一个小插曲吧。

        运行一下就出现flag了,这题还是比较简答的,就是会有新知识。

nctf{d3c0mpil1n9_PyC}

4、WxyVM

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • insanity 自己解题思路: 拿到代码先使用file工具查看代码类型,显示为ELF32位程序 使用ida打开程...
    Pig_deng饲养员阅读 4,048评论 0 0
  • 谜一般的比赛。。题目实在是太多了,而且时间还只有一天=。=,还好在最后冲到了第六。。。 一、Misc stage1...
    zhazhami阅读 11,539评论 1 4
  • 南邮wp 南邮ctf 1.Hello,RE! 用IDA打开,f5反编译,可见变量都是一些数字 选中数字,按R键,转...
    hefengzeng阅读 2,860评论 0 0
  • 碎碎念 第一次出题,前两个题是我出的,后两个是师父出的,师父好厉害。感觉最后一道题是我最不擅长的题,大概算算法题?...
    SamiraG阅读 3,203评论 0 0
  • 老套路,拖进IDA然后F5 输入字符串v9,如果v5和v9相等(即v3 = 0),输出flag get。所以我们只...
    苗__a5d1阅读 4,179评论 0 0

友情链接更多精彩内容