gb300,这个题是给了个ip和端口以及密码,自然就nc上去了,然后输入密码后会返回个这个东西
然后让你根据前三个来总结规律,找出第四个应该输入什么
规律就是
例如这个例子 写道
3 1 5 0 4 3
7 6 8 7 5 6
4 2 0 2 8 1
1 2 5 7 5 1
4 7 8 2 4 3
3 6 0 8 0 6
3 3 0 3
1 8 6 4 2 6
4 3 5 8 5 0
7 0 2 7 3 1
0 1 8 5 1 8
2 7 6 4 3 2
5 3 4 6 0 7
6 2 4 2
7 6 8 7 2 8
2 3 4 1 4 0
5 1 0 6 5 3
2 1 4 1 2 8
8 0 6 3 7 4
5 7 3 6 0 5
8 4 3 4
这是一次的矩阵
然后这三个矩阵我们都只看第一个元素
pin码的第一个元素
冰鱼 14:27:53
3 1 5 0 4 3
7 6 8 7 5 6
4 2 0 2 8 1
1 2 5 7 5 1
4 7 8 2 4 3
3 6 0 8 0 6
3 3 0 3
pin的第一个是3 ,它存在于
1,1
1,6
5,6
6,6
1 8 6 4 2 6
4 3 5 8 5 0
7 0 2 7 3 1
0 1 8 5 1 8
2 7 6 4 3 2
5 3 4 6 0 7
6 2 4 2
中
6存在于
1,3
1,6
5,3
6,4
这个是指矩阵中的坐标
那么通过对比
1,1
1,6
5,6
6,6
和这个
1,3
1,6
5,3
6,4
我们发现1,6这个位置是共同的
所以我们断定pin的第一个元素要处于1,6这个位置
7 6 8 7 2 8
2 3 4 1 4 0
5 1 0 6 5 3
2 1 4 1 2 8
8 0 6 3 7 4
5 7 3 6 0 5
8 4 3 4
第三个矩阵也验证了这个观点
然后你按照这个规律,可以找出第四个的pin码,然后提交上去,注意中间要用空格隔开,但是提交后你会发现再次返回四个新的矩阵,需要你再填一次,所以要写代码解决,因为总过只有大概10s不到的时间
代码如下:
#! /usr/bin/env python
#coding=utf-8
import socket
import time
from socket import *
import os,sys
import re
ip=""
port=""
def nc():
s = socket(AF_INET, SOCK_STREAM)
s.connect((ip, port))
s.send('5fd78efc6620f6\n')
#print 123
#time.sleep(0.5)
for i in xrange(4):
data = s.recv(1000)
#print data
data1 = s.recv(2000)
#print data1
data2 = s.recv(2000)
#print data2
str=data+data1+data2
if(str.find('Balance')!=-1):
break
str=filter(str)
print str
arrays=array(str)
str1=calc(arrays)
s.send(str1+'\n')
data = s.recv(1000)
#print data
data1 = s.recv(2000)
#print data1
#data2 = s.recv(2000)
#print data2
data2=""
#s.send('withdraw\n')
str=data+data1+data2
print ('123')
print str
def calc(arr):
l1=getLocationArray(arr[0:6],arr[6][0])
l2=getLocationArray(arr[0:6],arr[6][1])
l3=getLocationArray(arr[0:6],arr[6][2])
l4=getLocationArray(arr[0:6],arr[6][3])
m1=getLocationArray(arr[10:16],arr[16][0])
m2=getLocationArray(arr[10:16],arr[16][1])
m3=getLocationArray(arr[10:16],arr[16][2])
m4=getLocationArray(arr[10:16],arr[16][3])
n1=getLocationArray(arr[20:26],arr[26][0])
n2=getLocationArray(arr[20:26],arr[26][1])
n3=getLocationArray(arr[20:26],arr[26][2])
n4=getLocationArray(arr[20:26],arr[26][3])
#print arr[28:32]
k1=getSame(l1,m1,n1)
k2=getSame(l2,m2,n2)
k3=getSame(l3,m3,n3)
k4=getSame(l4,m4,n4)
s=getPin(arr[28:34],k1,k2,k3,k4)
print s
return s
def getPin(array,k1,k2,k3,k4):
#print k1[0]
#print array
t1=array[k1[0]][k1[1]]
t2=array[k2[0]][k2[1]]
t3=array[k3[0]][k3[1]]
t4=array[k4[0]][k4[1]]
return t1+' '+t2+' '+t3+' '+t4
def getSame(a,b,c):
#print a
#print b
#print c
temp1 = [val for val in a if val in b]
temp2 = [val for val in temp1 if val in c]
if len(temp2)==0:
temp2=[(0,0)]
#print temp2[0]
return temp2[0]
def getLocationArray(arr,str):
list=[]
#print arr
for i in xrange(6):
for j,j1 in enumerate(arr[i]):
if j1==str:
list.append((i,j))
return list
def array(s):
arrays=s.split('\n')
a1=[]
for i in xrange(34):
temp=arrays[i].split(' ')
count=temp.count('')
for i in xrange(count):
temp.remove('')
a1.append(temp)
return a1
def filter(s):
s=re.sub(r'\[.{7}m', '', s)
s=re.sub(r'Sun Jun.*2', '', s)
s=re.sub(r'User entered:', '', s)
s=re.sub(r'DD GOTP ATM skimmer.*1', '', s)
s=s.strip()
return s
if __name__=='__main__':
ip="140.197.217.85"
port=10435
nc()
写得比较烂,将就看吧,在四次矩阵后,我们会得到一个的界面(当时忘了截图了,根据记忆写的)
************ VovXXX ATM**************
Balance :$9464698434584894345312564.33
1)withDraw
2)XXXX
3)XXXX
4)exit
<discnenected>
然后答案就是9464698434584894345312564.33