本文持续更新

0x01 dmd-50

下载附件发现为ELF文件,在Linux中运行

ndz8Wd.png

需要输入key,猜测为flag,拖入64位ida中查看源码,F5反汇编查看main函数C伪码

ndzwTS.png

if不成立的话则输出The Key is valid ! :)

ndzDYQ.png

主函数发现md5函数,双击跟进查看

ndz6ln.png

md5函数中,对字符串v40进行md5加密并返回

ndzcyq.png

提取if语句中的值进行md5解密

ndzWwT.png

在Linux中输入解密结果grape

ndz5Y4.png

仍是无法通过,查看发现解密网站对字符串进行了md5(md5($pass))解密。重新载入对提取串进行一次md5解密得到 b781cbb29054db12f88f08c6e161c199,输入Linux中得到正确结果

ndzbOx.png

flag: b781cbb29054db12f88f08c6e161c199

0x02 Shuffle

根据题目提示和在Linux中的运行结果,猜测程序对flag进行随机化打乱

ndzXTO.png

ndzxte.png

载入IDA查看源码,发现在程序输出前存在rand函数

nwSk0f.png

提取rand前的数据转换成ascii码

nwSA78.png

nwSZtg.png

即可得到flag

0x03 re-for-50-plz-50

Linux中无法运行,直接载入ida32,发现代码为为MIPS指令集,ida无法直接反出伪代码

nwSln0.png

简单了解了一下MIPS指令集

nwS37T.png

猜测异或算法

1
2
3
4
5
6
7
8
a = "cbtcqLUBChERV[[Nh@_X^D]X_YPV[CJ"
a_list = list(a) #将字符串a拆分为列表可通过下标访问
flag = ''

for i in a_list:
flag += chr(ord(i) ^ 0x37)

print(flag)

得到flag: TUCTF{but_really_whoisjohngalt}

后续通过得知,可通过安装ida插件Retdec对MIPS指令集进行反汇编得出伪码

0x04 crackme

文件为exe文件,通过题目名推测考察脱壳技术,拖入PEID中查壳

nwSdj1.png

发现为北斗壳,没有什么脱壳经验便百度了一下OD手动脱壳的方法,原文连接如下

载入ODnwSBB6.png

F8运行到第一个call指令,此时ESP和EIP都是红色,下硬件访问断点,然后Shift+F9,运行到ESP落脚点,然后继续F8运行

nwSyND.png

nwS5Hf.png

之后便来到了程序真正入口点,选择这条汇编右键脱壳

nwS74g.png

nwpZb6.png

即可得到脱壳后文件,可载入ida查看伪码

nwpMPe.png

红框部分便为加密算法

nwpl2d.png

Payload:

1
2
3
4
5
6
7
8
9
10
11
12
a = [0x12,0x4,0x8,0x14,0x24,0x5C,0x4A,0x3D,0x56,0x0A,0x10,0x67,0x0,0x41,0x0,0x1,0x46,0x5A,0x44,0x42,0x6E,0x0C,0x44,0x72,0x0C,0x0D,0x40,0x3E,0x4B,0x5F,0x2,0x1,0x4C,0x5E,0x5B,0x17,0x6E,0x0C,0x16,0x68,0x5B,0x12]
b = "this_is_not_flag"
b_list = list(b)
i = 0
flag = ''

while i < 42:
j = i % 16
flag += chr(a[i] ^ ord(b_list[j]))
i += 1

print(flag)

得flag:flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}

0x05 re2-cpp-is-awesome

ELF文件Linux下运行nwp8KI.png

推测运行命令后输入正确flag,载入idanwpGrt.png

对应运行结果,运行命令后未接参数会提示输入flag

nwpUIS.png

跟进sub_400B56函数

nwpwGQ.png

出现输入失败时的字符串,推测红框内为加密算法,提取相应数据

1566634949439

nwp02j.png

Payload:

1
2
3
4
5
index = [0x24,0x00,0x05,0x36,0x65,0x07,0x27,0x26,0x2D,0x01,0x03,0x00,0x0D,0x56,0x01,0x03,0x65,0x03,0x2D,0x16,0x02,0x15,0x03,0x65,0x00,0x29,0x44,0x44,0x01,0x44,0x2B,]
a = "L3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t"

for i in index:
print(a[i], end='')

flag: ALEXCTF{W3_L0v3_C_W1th_CL45535}

0x06 Key

.exe文件,拖入PEID,无壳

nwpyq0.png

直接打开.exe文件一闪而过,用od运行出现

nwpcZV.png

载入ida32查看,发现相关字符串出现

nwpgaT.png

跟进if语句上面的sub_321620()函数,发现一串奇怪的路径

nwpfG4.png

创建此路径,并输入asd123456保存,再次运行

nwpos1.png

推测程序从此文件读取输入进行字符串匹配

OD断点到main函数位置,F7跟入,到关键比较的位置下断点

nwpHZ6.png

可以发现对比串:idg_cni~bjbfi|gsxb,将其输入flag.txt文件中再次运行程序,得到正确输出判断为flag

nwpOiD.png

提交成功flag :idg_cni~bjbfi|gsxb