刷题记录reverse
攻防世界
reverse
maze
拖入exe
发现无壳并拖入64位IDA
F5反汇编
‘R’键将数字转换成字符串
可以知道控制方向键的分别为“O”,“o”,“.”,“0”
判断分别代表什么方向:
左减右加,上减下加
O左移 o右移 .上移 0下移
判断迷宫的x轴和y轴
所以迷宫的起点就是(0,0)
sub_400690函数中是a2+a3*8,即a3表示行,a2表示列
a3 通过edx传递
a2 通过esi传递
行×8?再去看这个字符串,发现是64位,正好就是8×8
双击asc_601060查看字符串
用记事本整理得迷宫图形
******
* * *
*** * **
** * **
* *# *
** *** *
** *
********
*是边界,空格是通路,#号是终点。
O是左移,o是右移,0是下移,.是上移
得到flag为nctf{o0oo00O000oooo..OO}
Shuffle
拖进exe,无壳,拖入32位IDA
F5反汇编
没想到直接看到flag,SECCON{Welcome to the SECCON 2014 CTF!},提交竟然是对的
dmd-50
拖入EXE,无壳,拖入64位IDA,F5反汇编
R快捷键将ASCII码转成字符
得到字符串870438d5b6e29db0898bc4f0225935c0
根据题目名称dmd-50猜测这是MD5密文,故将字符串解密得到grape
然而这并不是flag
发现重点md5(v40,v39)
意思是md5加密一次
将刚得到的grape再次md5加密
得到flag为b781cbb29054db12f88f08c6e161c199
lgniteMe
拖入exe,无壳,拖入32位IDA,F5反汇编
发现”Congratulations!”,应该是输入正确flag后的输出,故双击跟进sub_4011c0
存在两个函数异或,进入函数byte_4420B0
选中后按shift+e提取字符,选择demical十进制的数表示
编写脚本:
yihuo_qian =( 13, 19, 23, 17, 2, 1, 32, 29, 12, 2,
25, 47, 23, 43, 36, 31, 30, 22, 9, 15,
21, 39, 19, 38, 10, 47, 30, 26, 45, 12,
34)
flag = ''
yihuo_result='GONDPHyGjPEKruv{{pj]X@rF'
for i in range(len(yihuo_result)):
flag+=chr(((ord(yihuo_result[i])^yihuo_qian[i])-72)^85)
print(flag)
得到flag为EIS{WADX_TDGK_AIHC_IHKN_PJLM}(不过不知道提交为什么就是不正确)
还发现一种大佬的一种解法
shift+F2在IDA中嵌入脚本打印
脚本为:
addr=0x4420B0
list=[]
for i in range(32):
list.append(Byte(addr+i))
print(list)
逆向逻辑脚本为:
key1="GONDPHyGjPEKruv{{pj]X@rF"
list1=[13, 19, 23, 17, 2, 1, 32, 29, 12, 2, 25, 47, 23, 43, 36, 31, 30, 22, 9, 15, 21, 39, 19, 38, 10, 47, 30, 26, 45, 12, 34, 4]
flag=[]
v3=0
for i in range(len(key1)):
flag.append(((ord(key1[i])^list1[i])-72)^85)
if flag[i] >= 65 and flag[i] <= 90:
flag[i]+=32
elif flag[i] >= 97 and flag[i] <=122:
flag[i]-=32
print(''.join([chr(i) for i in flag]))
print(len(''.join([chr(i) for i in flag])))
re-for-50-plz-50
拖入EXE,无壳,拖入32位IDA。F5查看伪代码
代码非常简单,很好理解
进入函数meow,得到字符串
编写脚本:
a = "cbtcqLUBChERV[[Nh@_X^D]X_YPV[CJ"
f = ''
for i in range(len(a)):
f += chr(ord(a[i])^55)
print(f)
运行得到flag为TUCTF{but_really_whoisjohngalt}