目录
BUUCTF REVERSE
(一)easyre
题目地址
解题思路
-
下载解压得到exe文件,运行后没有特别输出
-
考虑反汇编,先用ExEinfo PE查看有没有壳
没有壳 -
用IDA查看,查找所有的字符串(快捷键shift+f12),得到flag
工具:ExEinfo PE、IDA
(二)reverse1
题目地址
解题思路
- 给出压缩包解压得到的可执行文件执行如下,没有get到提示
- 先用ExEinfo PE查看有没有壳
没有壳 - 用IDA查看,先查看所有的string,没有找到flag,但发现提示 this is the right flag!
- 进一步双击查看,然后右键选择列出交叉引用
5. 进入引用代码进一步分析
生成pseudocode(伪代码)方便阅读
6. 伪代码大致内容是先把str2里的字符o换成字符0,输入str1,如果与处理过的str2相等,即为flag。于是双击查看str2,str2为{hello_world},所以str1应该为{hell0_w0rld},得到flag。
工具:ExEinfo PE、IDA
(三)reverse2
题目地址
解题思路
- 先用ExEinfo PE查看压缩包解压得到的文件,为linux的ELF可执行文件
- 用IDA打开,查看string和伪代码
- 伪代码大致内容为,把flag里的i或者r替换成1,得到的结果为真正的flag。于是双击查看flag的值,切换到16进制模式下观察,得到flag的值,再把i和r替换成1,得到真正的flag。
工具:ExEinfo PE、IDA
(四)内涵的软件
题目地址
解题思路
- 先用ExEinfo PE查看压缩包解压得到的文件,无壳
- 用IDA查看,查看所有字符串,看到有一串可疑字符串,尝试发现是flag
工具:ExEinfo PE、IDA
(五)新年快乐
题目地址
解题思路
- 先用ExEinfo PE查看压缩包解压得到的文件,有壳,UPX
- 使用UPX去壳
- 用IDA打开,查看字符串,根据提示,这次的字符串并没有花括号,结合题目,怀疑 HappyNewYear! 是flag,尝试,成功。
工具:ExEinfo PE、IDA、UPX
工具说明
#UPX命令
upx.exe -d 要脱壳的文件名
(六)xor
题目地址
解题思路
-
先用ExEinfo PE查看压缩包解压得到的文件,无壳
-
用IDA打开,查看string和伪代码
- 伪代码大致内容为,输入的值__b长度为33,所有的值之间异或得到的最终值与global变量的值相等,所以需要推出__b,先查看global的值’f’,0Ah,‘k’,0Ch,‘w&O.@’,11h,‘x’,0Dh,‘Z;U’,11h,‘p’,19h,‘F’,1Fh,‘v"M#D’,0Eh,‘g’,6,‘h’,0Fh,‘G2O’,0,数字和字符的集合,需要处理一下,最后相互异或得到flag(理论依据:A^B = C , 则由 A^C = B, B^C = A)
global_value = [ 'f',0xA,'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O' ]
flag = "f"
global_value_char2int = [ord(i) if isinstance(i, str) else i for i in global_value]
for i in range(len(global_value_char2int)-1):
flag += chr(global_value_char2int[i]^global_value_char2int[i+1])
print(flag)
工具:ExEinfo PE、IDA
(七)helloword
题目地址
解题思路
- 用IDA打开得到的apk文件,查看string
- 搜索flag{,得到flag
工具:IDA
(八)reverse3
题目地址
解题思路
- 先用ExEinfo PE查看压缩包解压得到的文件,无壳
- 用IDA打开,查看string和伪代码
- 从下往上看,如果Destination的值等于Str2的值,等成功,说明flag最后处理的结果为Str2的值,查看Str2的值为e3nifIH9b_C@n@dH,for循环是destination每个字符自增自己的下标,destination来自于v4,v4来自于sub_4110BE,查看sub_4110BE)如下,看到"/3""和*4"想到可能是base64对字符的二进制编码做的处理,加上while和if判断,先尝试一下base64
- 编写代码如下,运行得到flag
import base64
str2= "e3nifIH9b_C@n@dH"
flag=""
for i in range(len(str2)):
flag += chr(ord(str2[i])-i)
print(base64.b64decode(flag))
工具:ExEinfo PE、IDA
(九)不一样的flag
题目地址
解题思路
-
下载解压得到exe文件,运行后出现上下左右指令
-
考虑反汇编,先用ExEinfo PE查看有没有壳
没有壳 -
用IDA查看,查找所有的字符串,一步步追踪到main函数
-
看到v3图形如下,
*1111
01000
01010
00010
1111#
-
49是‘1’,35是‘#’,猜测可能是一个迷宫。0为通路,1为错路,#为最终出路,*为起点,以v3为迷宫图
-
*到#的路径为222441144222,尝试即为flag