Simple File System
Simple File System思路题目给了四个文件,flag,simplefs,image.flag,instruction.txt
打开介绍文件看一下,里面的内容如下
123456789101112# instructionsI implemented a very simple file system and buried my flag in it.The image file are initiated as follows: ./simplefs image.flag 500 simplefs> format simplefs> mount simplefs> plantflag simplefs> exitAnd you cold run "help" to explore other commands.
从这里面和题目的描述就可以看出这是简单的文件系统,通过挂载然后执行命令。
先执行一遍看看,结果发现plantflag后将flag加密输入到flag文件中,IDA找找加密的地方
在21b2处发现了单字节的加密
下面就是依次 ...
2022HFCTF fpbe
eBPF-for-Ghidrahttps://github.com/Nalen98/eBPF-for-Ghidra
Ghidrahttps://github.com/NationalSecurityAgency/ghidra
比赛时没有想到居然是这样的,fpbe逆回来是ebpf,在文件里面也可以看到bpf的函数,bpf的文件是直接包含再ELF中的,直接利用binwalk就可以分离出来
分离出F4018,利用Ghidra中eBPF-for-Ghidra插件进行反编译,github地址在上面
需要先创建一个项目,然后导入文件,对文件选择语言,然后点左上角的小绿龙
进来可以看到就一个uprobeh函数,里面就是输入的16位flag拆成四个,进行四元四次解方程
EXP
123456789101112from z3 import *a,b,c,d=BitVecs('a b c d',32)s = Solver()s.add(28096*a+64392*b+29179*c+52366*d == 209012997183893)s.add(61887*a+27365*b+44 ...
hgame2
xD MAZE简单的一维数组
输入的0,1,2,3代表移动的位数
123456789map=[0x20,0x20,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x20,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x20,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0 ...
160crackme04
查壳
程序是使用delphi编写的 32位无壳
运行查看
要求输入用户名,注册码,一个图片显示框
个大按钮有两个对应的相应事件, 分别是单击事件和双击事件。
这里是整个程序的所有的响应事件 以及对应的RVA
第一个FormCreate是窗体的创建事件 这个不必关心,一般创建事件都是显示图形界面相关的操作
第二个事件名是chkcode,全称应该是checkcode,校验代码
第三个KeyUp是响应的键盘的弹起
第四个DbClick是按钮的双击事件
第五个Click是按钮的单击事件
调试
获取用户名
获取用户名长度 将长度加上0x1E
将长度转为字符串
字符串拼接 拼接为长度+用户名+循环次数
整个算法循环18次
深育杯reverse
Press
打开主函数,可以看到先打开了一个flag的文件,最后经过计算存入out文件中,先查看out文件的内容,010打开
里面的数据就是最后存入的数据,再看主函数,可以猜测主要的逻辑在sub_40094B里面,进去看看
1234567891011121314151617181920212223242526272829303132333435363738394041424344__int64 sub_40094B(){ int i; // [rsp+0h] [rbp-8h] int j; // [rsp+4h] [rbp-4h] switch ( s[dword_6020A0] ) { case '>': ++dword_602348; break; case '<': --dword_602348; break; case '+': ++byte_6021A0[dword_602348]; break; ...