本文持续更新
0x01 dmd-50
下载附件发现为ELF文件,在Linux中运行
需要输入key,猜测为flag,拖入64位ida中查看源码,F5反汇编查看main函数C伪码
if不成立的话则输出The Key is valid ! :)
主函数发现md5函数,双击跟进查看
md5函数中,对字符串v40进行md5加密并返回
提取if语句中的值进行md5解密
在Linux中输入解密结果grape
仍是无法通过,查看发现解密网站对字符串进行了md5(md5($pass))解密。重新载入对提取串进行一次md5解密得到 b781cbb29054db12f88f08c6e161c199,输入Linux中得到正确结果
flag: b781cbb29054db12f88f08c6e161c199
0x02 Shuffle
根据题目提示和在Linux中的运行结果,猜测程序对flag进行随机化打乱
载入IDA查看源码,发现在程序输出前存在rand函数
提取rand前的数据转换成ascii码
即可得到flag
0x03 re-for-50-plz-50
Linux中无法运行,直接载入ida32,发现代码为为MIPS指令集,ida无法直接反出伪代码
简单了解了一下MIPS指令集
猜测异或算法
1 | a = "cbtcqLUBChERV[[Nh@_X^D]X_YPV[CJ" |
得到flag: TUCTF{but_really_whoisjohngalt}
后续通过得知,可通过安装ida插件Retdec对MIPS指令集进行反汇编得出伪码
0x04 crackme
文件为exe文件,通过题目名推测考察脱壳技术,拖入PEID中查壳
发现为北斗壳,没有什么脱壳经验便百度了一下OD手动脱壳的方法,原文连接如下
载入OD
F8运行到第一个call指令,此时ESP和EIP都是红色,下硬件访问断点,然后Shift+F9,运行到ESP落脚点,然后继续F8运行
之后便来到了程序真正入口点,选择这条汇编右键脱壳
即可得到脱壳后文件,可载入ida查看伪码
红框部分便为加密算法
Payload:
1 | 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] |
得flag:flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}
0x05 re2-cpp-is-awesome
ELF文件Linux下运行
推测运行命令后输入正确flag,载入ida
对应运行结果,运行命令后未接参数会提示输入flag
跟进sub_400B56函数
出现输入失败时的字符串,推测红框内为加密算法,提取相应数据
Payload:
1 | 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,] |
flag: ALEXCTF{W3_L0v3_C_W1th_CL45535}
0x06 Key
.exe文件,拖入PEID,无壳
直接打开.exe文件一闪而过,用od运行出现
载入ida32查看,发现相关字符串出现
跟进if语句上面的sub_321620()函数,发现一串奇怪的路径
创建此路径,并输入asd123456保存,再次运行
推测程序从此文件读取输入进行字符串匹配
OD断点到main函数位置,F7跟入,到关键比较的位置下断点
可以发现对比串:idg_cni~bjbfi|gsxb,将其输入flag.txt文件中再次运行程序,得到正确输出判断为flag
提交成功flag :idg_cni~bjbfi|gsxb