RE:
1、RE1:
是个exe文件,首先拖进peid:
发现不是有效的PE文件,而且它也打不开(可以试试),想到有功能强大的ida可以用,于是拖进去试试,用64位试试:
发现连main函数都没有?!于是去其他的窗口看看信息:
[图片上传失败...(image-61f364-1542020739439)]
在16进制编译窗口那里找到了我们想要的flag
2、simple_re:
[图片上传失败...(image-fc1c2b-1542020739439)]
搞下来,打开发现是个注册窗口,首先拖Peid查壳:
[图片上传失败...(image-9963f5-1542020739439)]
发现没有壳,而且是用C#语言编写的程序,这个和我们之前一直接触到的C++和C和java语言有所不同,开始很难想到突破口,因为ida和OD无计可施(可以自行尝试),后来想到应该针对语言去找对应的工具,于是谷歌C#反编译器,成功找到IL Spy:
[图片上传失败...(image-14a975-1542020739439)]
把文件拖进去看看反编译的效果:
[图片上传失败...(image-5697d8-1542020739439)]
熟悉的java代码,根据分析,应该是输入的字符串转换成ASCII进行一系列的移位运算,得到下标,再进行切片处理得到密文(切这个字符串“ABCDEFGHIJK........”),找到关键代码:
[图片上传失败...(image-226528-1542020739439)]
text2就是输入的字符串经过一系列切片操作后拼成的字符串,而 "I5LUQVD3OR3HE3RQOVSXE3LEGV6Q"就是要比较的字符串,相同则true,不同则false。通过观察发现这一串东西很像base的特征,感觉可以试一波,于是进行base32解密:
[图片上传失败...(image-1b3e8b-1542020739439)]
刚好就是我们要的Flag,这里很轻巧,(但是之前头铁,想着算法逆回去,写脚本,但是失败了,想着暴力破解,拿头一个个去逆,泪......)
3、MAZE:
打开文件:
[图片上传失败...(image-c35785-1542020739439)]
看来是要输入Flag,首先拖进Peid,查壳:
[图片上传失败...(image-b3c014-1542020739439)]
发现是UPX壳(右上角EP区段),于是先进行脱壳:
[图片上传失败...(image-61fd0-1542020739439)]
成功脱壳,然后拖进32位的ida(事实证明是32位的exe):
[图片上传失败...(image-2818dd-1542020739439)]
F5大法,来到main函数,接着进去:
[图片上传失败...(image-82b794-1542020739439)]
[图片上传失败...(image-73712d-1542020739439)]
[图片上传失败...(image-f04d4e-1542020739438)]
经过一波分析,可以大概预测出,str时输入的字符串,然后复制给str1,接着拿str1进行操作:
[图片上传失败...(image-8da555-1542020739438)]
看到一个strcmp函数,看到”GWHT{“,看来是先比较前五位,相同则进一步操作,看switch
[图片上传失败...(image-40510c-1542020739438)]
v4是从输入的字符串中得到的,是核心,引起v8和v9的变化,再看LABEL_14:
[图片上传失败...(image-b5e318-1542020739438)]
看到congratulation!,猜想是要满足那个if表达式,(&v12+4v9+v8),v12应该是个数组,
点v12进去,单击var_12,右键转成array后,返回,按F5,可以看到了:
[图片上传失败...(image-5caaa1-1542020739438)]
都是ASCII码,全部转一下(单击数字,右键,转成char)
[图片上传失败...(image-a459f7-1542020739438)]
[图片上传失败...(image-f66b9c-1542020739438)]
[图片上传失败...(image-65638a-1542020739438)]
此时,V1是从Str输入字符串中得到的,v1变化引起v7和v8的变化,发现* . 和#,同时输入的字符串后5位之后都是由0,O,_,o这4个组成的(case),根据MAZE提示,发现是迷宫问题,接触的是64位,88的迷宫,这里数组16位,应该是44的迷宫,同时发现V8需要进行乘4操作,V7则一步操作,说明在迷宫中,V7是左右操作,V8是上下操作,于是手动画图出来:
[图片上传失败...(image-452001-1542020739438)]
顺序是0_00__OOOo
所以得到flag就是GWHT{0_00__OOOo},很有趣的一道题。
网友评论