2020西湖论剑-逆向

Author Avatar
Xzhah 10月 15, 2020
  • 在其它设备中阅读本文章

西湖论剑-Reverse-Cellular

做法1

好久没更新博客了,我开始了。

这是一个蜂窝寻路题,下面这个函数在根据map的字符串数组构建地图。

地图如下

然后输入L,R进行路劲探索,R是逆时针,L是顺时针,如果下一步是之前走过的就停下,如果下一步是’+’号直接挂掉。需要遍历所有’-‘号,从’*’到’#’。代表性实现部分如下:其实就是判断目前所在方位然后决定顺时针/逆时针的方向路线(在题目中一个节点有2,3,4三个方向可以走)。

最后走出来就是答案,路线如下:

做法2

acd的做法…直接把程序patch了来dfs。patch成只要路能走完,不碰到’+’就成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import subprocess

length=25
route=''


def dfs_fake(route):
p=subprocess.Popen("Cellular.exe", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out,err=p.communicate(route + "\r\n")
data=out
print data
p.terminate()
if 'Wrong~' in data or len(data)==0:
return False
else:
return True
def dfs_real(route):
p=subprocess.Popen("Cellular_real.exe", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out,err=p.communicate(route+'\r\n')
data=out
p.terminate()
if 'Wrong~' in data or len(data)==0:
return False
else:
return True
def bruteforce(route):
print route
if dfs_fake(route):
if dfs_real(route):
print 'get flag'
exit(0)
if (len(route)>length):
return
else:
bruteforce(route+'L')
bruteforce(route+'R')
else:
return
def main():
bruteforce('R')
if __name__=='__main__':
main()