求教一道CTF题目

docx文件其实就是一个压缩包 里面是┅堆xml和附件用binwalk检查没有异常就直接解压

多看几个包你就会注意到这个字节在0 1 2 之间变动 写个脚本提取出来

[PHP] 纯文本查看 复制代码

当然不是直接就能写出这个脚本的。具体过程你可以看着脚本自己分析一下

看起来应该是flag的后半部分。所以还要找前半部分

提示是图片隐写,其實这个提示就是隐写的工具名字

这道题唯一一个麻烦的地方就是提示Image Steganography会想到是图片隐写,然后找一堆隐写工具发现并没什么卵用
最后財发现有这么个工具就叫这个名字- -

在CTF比赛中逆向类题目常常以考察选手的逆向分析能力、算法分析能力角度出发,通过还原程序中的算法逻辑从而获取flag。但是如果可以在程序执行过程中使用符号代替真实值,多路径遍历程序找到能够到达输出flag的路径,或者设置约束条件求解满足检验flag条件的输入则可能降低分析程序的难度,提高解题的效率

题目提供了一个ARM架构编译的64位共享库文件:

IDA载入分析,可以看到程序逻辑比较简单在main函数中对输入的flag经过65轮校验函数校验,最终输出0表示flag校验通过1则表示校验失败:

  1. //flag正确时输出的fin值为0,否则为1

进入任意一个校验函数sub_6B8可以看到函数校验flag的第0位和第2位需符合嘚两条方程:

因此,只需求解出符合所有一元二次方程的解则可得到flag。

这里使用z3求解z3是一套约束求解器,常用于求解方程:

  1. # 添加约束:65*2个一元二次方程

  2. # 添加约束:flag只能包含数字、字母或下划线

除了通过z3解方程还可以通过符号执行技术,遍历找到符合条件的路径即为flag。

使用angr工具进行符号执行为了减少搜索的路径,因此设定当fin=1时为无效路径这里使用IDA Python编写脚本寻找程序中赋值fin为1的地址处(mov W8, #1):

得到搜索时需要避开的路径列表:

  1. # 约束:flag范围在可见字符内(32-127)

  2. # 约束:flag最后两个字符为'}

  3. # 约束:flag最后以\x00作字符串结尾结束

  4. # 重定位输入到开始处(0),且长度为68

下载百度知道APP抢鲜体验

使用百喥知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 教资教学设计题 的文章

 

随机推荐