type
status
date
slug
summary
tags
category
icon
password
[CISCN 2022 东北]easycpp
加密就是三次异或,不过根据第3次异或可以知道只加密到倒数第三个数据,后面的数据^0还是本身
buf2(cipher)不能直接提取,动调找,这里有调用关系,点过去就是密文
exp:
[CISCN 2023 初赛]babyRE
有点小新奇
题文件是.xml
找完只发现两个疑似信息:
上面的肯定是假的flag,下面多半是密文
在开头发现:
给了一个网址,跟进去
导入题目的xml文件
根据要求进行点击,进入锁界面
双击这个锁可以进入图形化界面
左边那一排应该是对刚刚的密文进行“扩充”,右边是唯一找到的加密逻辑翻译一下就是: cipher[i] ^= cipher[i - 1]
根据左边进行操作密文,得到exp:
[CISCN 2021初赛]babybc
.bc文件,试试打开,windows上打开是bc头文件,全是数据流
ubuntu上也打不开,查了一下文件,关键回显LLVM IR bitcode
LLVM Bitcode格式介绍(一) - 知乎 (zhihu.com)通过这篇文章了解到.bc文件是LLVM bitcode整体编码的过程文件
得到elf文件,丢进DIE查询还是显示binary文件(没有elf头)
找到clang编译器(相当于LLVM2.0)
成功导出真正的elf文件,64位elf文件
关键函数是这两个,main中还给了一个信息,input的字符的ascii码 -48 要 <5,所以input内容为'1'~'5'
先分析fii_number函数:
是一个5x5的数独,map为(实际有32个数据,只使用了25个)
其实是将input的值从左到右从上到下填入map二维数组,如果map数组这个位置的值不为0,则填入0;如果为0,则填入input [i] [j] - 48
再看docheck函数
提取row和col数组
满足两个函数即可,用z3搓个求解器解出满足的数独
[CISCN 2023 初赛]ezbyte
点开疑似主函数的地方,挨个点开看了一看,没有找到方向,看汇编能在下面找到字符串“yes”
但是这上面有个jmp指令,不会进入loc_404E0F函数,把它patch掉(改为条件跳转)
IDA反汇编函数还是连不上,那就审计这段汇编
这里能看出r12是在栈空间里的,下面具体函数中根本没有r12相关内容,被直接用来比较。r13根据上一条xor指令可以知道是0,因为r12的值与输入有关,非正确flag下r12 ≠ 0,导致这条cmp指令不成立,不会跳转到loc_404E0F函数(回显yes) -----这段分析卡了蛮久。结合“检测到堆栈被破坏”,更加验证猜想。
这个里面的逻辑很像异常处理函数,根据这里也可以构造出一个flag:
flag{aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3861}
学习C++的异常处理初探关于C++的异常处理 (notion.site)
找到r12的部分
因为要保证返回的值为0(让程序逻辑中r12的值与r13都为0,以跳转至回显"yes"的函数),上面r12到r15最后的值都该为0
以r12为例:逻辑应该是((r12 + 1892739) ^ 1237891274917891239) ^ 2616514329260088143 = 0. 即(r12 + 1892739) ^ 1237891274917891239 == 2616514329260088143
先用z3解出:
转成字符串,exp:
- 作者:Sh4d0w
- 链接:https://sh4d0w.life//article/0ee6edf6-220d-41ab-aa2b-5f1356133b14
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。