ctf逆向题目训练笔记(一)

一:OPEN-SOURCE

题目来源:HackYou CTF

附件:main.c

拿到手的是c语言源代码。要做的就是算法逆向,很基础的题型了。格式化整理一下,看着更清晰:

yt5nPS.png

发现有几个不认识的函数,看来c学的还不到位,那就先解决看不懂这个问题吧。经过百度以后,记下几个新学的东西。

1、atoi:函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)

知道这个就可以了,不看中间那些条件,我们之间看最后输出结果。是一个算式。很明显是利用atoi函数转换数字以后再转换回来。

然后在按照前面的条件一一带入计算就行,另写一个脚本。

1
2
3
4
5
6
7
8
CODE
int main()
{
unsigned first=0xcafe; //根据前提条件
unsigned int hash = first*31337+8*11+7-1615810207; //7是字符串长度函数
printf("%x",hash);
return 0;
}

yt5kDI.png

得到flag:c0fee

二:simple-unpack

题目来源:xctf

附件:bin

一道入门加壳题。首先用exeinfope查壳。

yt5ZUf.png

是UPX

打开kali,输入upx -d 1unpack脱壳,得到源文件。

1
2
CODE
upx -d 1unpack

yt5Abt.png

将脱壳完的二进制文件丢进ida64里面。Shift+F12查看字符串窗口。Ctrl+F查找关键词“flag”。

yt5e58.png直接 找到flag:flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny}

三:python-trade

题目来源:NJUPT CTF 2017

附件:1.pyc

python逆向,之前在杂项碰到过这题。需要安装一个插件“uncompyle6”。首先安装python以后执行下面命令安装uncompyle6

1
2
CODE
pip install uncompyle6

安装完成后直接执行下面语句:

uncompyle6 1.pyc > 1.py

得到源代码。然后发现是一个加密算法,我们再写一个解密脚本,还是很简单的。

yt5VVP.png

逆向思路:先base解码,再减少,再异或,转成字符串

1
2
3
4
5
6
7
8
PYTHON
import base64
correct ='XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
first=base64.b64decode(correct)
s=''
for i in first:
s+=chr((i-16)^32)
print(s)

最后得到flag:nctf{d3c0mpil1n9_PyC}