4.elf
装好了ubuntu
它的glibc版本够用
通过动态调试找到了其存储数据的正确顺序
先依次输入数组中存起来备用
1 | if ( v3 == v9 ) |
根据其加密方式需要判断输入的字符的大小,z3无法检验flag具体的大小来建模
所以可以设立多种情况
1 | out1[i]=(flag[i]^0x47)+1#只经过前一次异或 |
所以约束条件可为
1 | f.add(((a[2*i]==v61[2*(17-i)-2])and(a[2*i+1]==v61[2*(17-i)-2]))or((a[2*i]==v62[2*(17-i)-2])and(a[2*i+1]==v62[2*(17-i)-2]))or((a[2*i]==v63[2*(17-i)-2])and(a[2*i+1]==v63[2*(17-i)-2]))or((a[2*i]==v64[2*(17-i)-2])and(a[2*i+1]==v64[2*(17-i)-2]))) |
整体求解如下
1 | from z3 import * |
上述代码是有解的,但增加约束条件时会抽风
因为不知道具体flag格式,无法具体限制其条件只能限制末尾是’}’之类的,但输入条件时就会报错
未输入其他条件就会有非常多的解下图只是一部分
只不过不知道z3中的And,Or是否效果跟原来的逻辑符and,or是否等效
但在我使用下列求解时
1 | from z3 import * |
其输出的是无解
非常奇特
- 标题: 4.elf
- 作者: runwu2204
- 创建于 : 2023-01-06 22:54:33
- 更新于 : 2023-01-07 01:14:48
- 链接: https://runwu2204.github.io/2023/01/06/CTF WP/Re/pythonz3/4.elf/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论