baby_reverse
下载附件,是一个没有后缀的文件,用文本编辑器打开,发现里面是16进制的编码
flag的16进制编码是666c6167
,在文件中查找,发现一长串,进行16进制密码后得到flag
山东省大学生网络技术大赛-cm50
Pe查看文件,是C++编写的32位可执行文件,放入ollydubg进行调试,全局搜索字符串,看到关键字:
U r right!\n\n
定位,并向上查找pub ebp
逐步运行,并在输入时,随意输入 ,发现在
会显示出flag
我们此设断点,运行,得到:flag{Pe_cRackme1_
,不完整的flag。继续向下调试,看到会对后续的字符串进行0x31,0x30,0x32,0x34,0x7D的对比,将16进行转为ascii,得到1024}
。将得到的两段字符串进行拼接,可以得到flag。
Reverse2
下载附件为一个exe的可执行文件,用pe工具扫描:
发现为一个32位的程序,
在cmd下执行,发现只会输入一个字符串。
用OD打开,全局搜索字符串:
找到程序执行后输出的字符串:Hi~ this is a babyre
在程序中定位:
发现下面有好多已经在程序中定义好的变量,开头4个为0x66,0x6c,0x61,0x67,转换成ascii,正好是flag。因此将定义好的变量抄出来,并进行16进制解码,得到flag:
Reverse3
下载附件为两个文件,一个为c文件的源码,源码中给出了flag。可以作弊,这是非规做法。
看到源文件,是一个base64编码。下面给出了加密后的flag。直接base64解码失败。
修改源文件如下:
用gcc编译后执行,即可得到flag。
flag{76sgf17gf9asydjhatd93e73gf9}
Reverse4
下载附件是一个exe的可执行文件,运行后,需要输入flag。然后程序会判断是否正确
用OD打开,全局查找字符串,找到关键字符串:
双击定位,并向上查找push ebp:
下断点,运行程序。
发现程序会对输入的字符串进行base64编码,再每个字符的ascii码加上位序号。
如:输入12345
程序会先进行base64编码:MTIzNDU=
再对每个字符操作:
第一位M
的ascii加0,编码后为M
第二位T
的ascii加1,编码后为’U’
第三位I
的ascii加2,编码后为K
。。。。。。以此类推
最后再和e3nifIH9b_C@n@dH
进行比较。
现在知道了流程,那么反推,编写代码:
s='e3nifIH9b_C@n@dH'
tmp=''
for i in range(len(s)):
tmp+=chr(ord(s[i])-i)
print (tmp)
s2=base64.b64decode(tmp).decode("utf-8")
print (s2)
得到`{i_l0ve_you}`。
Flag即为:`flag{i_l0ve_you}`