2016 华山杯 Writeup

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/swjtu100/article/details/52523125

Reverse7 移动迷宫

Value: 200
Description: 当赶到的时候发现对方已经提前接头了,但在现场遗留了一个 U 盘并恢复出了一个登陆程序,如何才能拿到密钥?

题目为走迷宫的形式。IDA中F5查看伪代码,程序先将输入的字符串通过locate函数进行变换。

这里写图片描述

locate函数将输入字符串str的字符与二维数组table中的字符进行匹配,并返回各字符在数组中所在的列号(1,2,3,4),这些整数代表移动方向:1—>up;2–>down;3–>left;4–>right。

这里写图片描述

这里写图片描述

具体移动的逻辑实现如下:根据locate返回的整数序列移动横纵坐标。二维数组route中的字符代表路径:“#”代表通路,“*”代表障碍物,初始位置为(3,0),终点为(9,8)。

这里写图片描述

这里写图片描述

根据以上分析,step数组的值应为4114 4422 3222 4414 4442 2223才能走到终点,映射到table数组中的字符为Ba47F1A256E0B347F1B2C6Ef,所以最终的flag是flag_Xd{hSh_ctf:Ba47F1A256E0B347F1B2C6Ef}。

Misc1 Try Everything

Value:200
Description:
try everything you can to get flag, and DO NOT ASK MANAGER THE FLAG.

解压文件打开能看到一串乱序字符串,其中包含组成flag的“{”“}”等字符。

这里写图片描述

用binwalk查看可知,file文件由文件名为0~163的164个小文件组成。

这里写图片描述

重新排序即得到flag。

# binwalk file.gz | awk -F '"' '{print $2}'
offset=[24,72,108,129,18,92,63,162,110,156,132,101,34,143,28,136,115,114,17,14,69,10,7,11,127,55,58,86,149,21,41,120,142,6,22,36,37,88,133,161,35,137,31,3,20,113,46,42,91,78,102,19,135,153,105,48,107,9,68,64,81,93,147,67,138,160,85,106,154,75,89,66,26,141,2,98,96,124,145,84,71,15,140,90,144,100,61,131,27,23,53,40,130,47,117,148,150,50,111,122,146,57,121,123,82,45,152,109,62,70,116,77,12,139,155,80,103,13,74,16,51,94,87,97,25,151,128,54,125,112,119,118,158,99,95,4,38,79,157,29,33,134,30,126,1,104,52,65,44,83,73,163,0,76,5,60,59,159,8,49,32,43,56,39]

s="a o pcrcr6yteSoahTos ehaek,a:rcsht  on:@dgace.no aipl9 cr eepotr_b pFveoe{niur_deddwhahe hn kisf4taocy utuagewi vX1ooearim nvEw  mi Acmeudbbnftninofmeh}Se t 8eaimer"

result = ''.join([s[offset.index(x)] for x in range(len(s))])
print result

这里写图片描述

猜你喜欢

转载自blog.csdn.net/swjtu100/article/details/52523125