[MRCTF2020]Transform
ida64打开,找到main函数
dword_40F040:
注意:
所以上面dword_40f040
最后那个 8 dup(0)
的数据不是8,而是0
byte_40F0E0:
倒回去就行了,写脚本:
1 | dword_40F040 = [0x9, 0x0A, 0x0F, 0x17, 0x7, 0x18, 0x0C, 0x6, 0x1, 0x10, 0x3, 0x11, 0x20, 0x1D, 0x0B, 0x1E, 0x1B, 0x16, 0x4, 0x0D, 0x13, 0x14, 0x15, 0x2, 0x19, 0x5, 0x1F, 0x8, 0x12, 0x1A, 0x1C, 0x0E, 0] |
MRCTF{Tr4nsp0sltiON_Clph3r_1s_3z}
flag是:flag{Tr4nsp0sltiON_Clph3r_1s_3z}
[WUSTCTF2020]level1
两个文件,有一个是OUTPUT,打开发现是一串数字,猜测是程序输出的东西
看另外一个文件
ida64打开,看main函数
打开flag文件读取内容,之后将里面的内容按照12行到18行的语句进行处理后输出,输出的按照之前的猜测就是OUTPUT文件里面的内容。
1 | a = ['0',198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000] |
ctf2020{d9-dE6-20c}
flag是:flag{d9-dE6-20c}
[WUSTCTF2020]level2
UPX壳,kali脱壳
ida64打开
不知道为什么64说要用32,32说要用64,只好先查看字符串
结果在最下面发现了这个,就是flag
flag是:flag{Just_upx_-d}
[GWCTF 2019]xxor
ida64
首先输入一个字符串,然后进行中间部分的操作,最后需要满足44行的if判断,看一下函数sub_400770
得到这样的关系式,求解
1 | a1[2] - a1[3] = 2225223423 |
利用z3
安装z3的命令:
1 | python -m pip install z3-solver |
1 | from z3 import * |
现在a1数组里的值就都知道了
1 | a1=[3746099070, 550153460, 3774025685, 1548802262, 2652626477, 2230518816] |
程序在main函数的36~43行进行了操作,看一下函数sub_400686
这是一个利用已知数组unk_601060对我们输入的整型数组进行异或操作,因此只需要将整个过程逆过来,for循环那段,将异或过程看成一个整体,最后就能得到输入的整型数组。
1 |
|
所以要将16进制转换成字符串
利用在线工具
flag是:flag{re_is_great!}