Skip to content

Instantly share code, notes, and snippets.

@garis
Last active September 26, 2018 10:34
Show Gist options
  • Save garis/1b148e8bdd1eca075985aef6876a0d26 to your computer and use it in GitHub Desktop.
Save garis/1b148e8bdd1eca075985aef6876a0d26 to your computer and use it in GitHub Desktop.
Solution to the HEXADOKU on the Reply Cyber Security Challenge Practice
#!/usr/bin/env python3
import time
import sys
import signal
import hashlib
CHAR_LIST=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
CHAR_EMPTY='-'
s= [['3','F','-','-','-','6','8','9','5','2','4','-','-','-','A','B'],
['B','-','C','6','-','5','-','4','9','-','D','-','E','3','-','2'],
['2','D','E','-','0','-','-','-','-','-','-','7','-','9','4','C'],
['-','-','4','-','-','A','-','-','-','-','F','-','-','0','-','-'],
['-','-','-','-','3','-','-','8','6','-','-','D','-','-','-','-'],
['-','-','D','-','-','E','5','6','A','C','7','-','-','F','-','-'],
['6','-','-','C','-','-','2','7','F','B','-','-','8','-','-','1'],
['-','2','3','-','4','-','F','-','-','9','-','1','-','D','C','-'],
['-','B','5','-','9','-','6','-','-','3','-','E','-','1','0','-'],
['8','-','-','E','-','-','B','3','7','A','-','-','C','-','-','5'],
['-','-','9','-','-','7','E','1','C','6','5','-','-','B','-','-'],
['-','-','-','-','5','-','-','0','4','-','-','9','-','-','-','-'],
['-','-','6','-','-','C','-','-','-','-','9','-','-','8','-','-'],
['0','C','F','-','2','-','-','-','-','-','-','3','-','E','6','7'],
['9','-','1','2','-','F','-','5','E','-','C','-','3','A','-','D'],
['D','A','-','-','-','3','7','E','B','F','2','-','-','-','5','0']]
L = 16;
SEGNAPOSTO = [[0 for x in range(L)] for y in range(L)]
TEMP = [['-' for x in range(L)] for y in range(L)]
VALIDO = [[0 for x in range(L)] for y in range(L)]
#riempie gli spazi vuoti con caratteri validi
ricomincia=False
tent=0;
lastRigaScan=0
lastColScan=0
for g in range(16):
for n in range(16):
TEMP[g][n]=s[g][n]
while(True):
ricomincia=False
tent=tent+1
print("TENT #"+str(tent))
for riga in range(16):
for colonna in range(16):
if ricomincia==False:
if s[riga][colonna]==CHAR_EMPTY and VALIDO[riga][colonna]==0:
valido=False
carattere='-'
while SEGNAPOSTO[riga][colonna]<16 and valido==False:
carattere=CHAR_LIST[SEGNAPOSTO[riga][colonna]]
SEGNAPOSTO[riga][colonna]=SEGNAPOSTO[riga][colonna]+1
valido=True
#controlla la riga
for i in range(16):
if(TEMP[i][colonna]==carattere):
valido=False
#controlla la colonna
for i in range(16):
if(TEMP[riga][i]==carattere):
valido=False
if valido:
valido=True
#controlla se e' valido nel sotto blocco
riga_limite_inf=riga-riga%4
riga_limite_sup=riga_limite_inf+4
colonna_limite_inf=colonna-colonna%4
colonna_limite_sup=colonna_limite_inf+4
for rigaTEST in range(riga_limite_inf,riga_limite_sup):
for colonnaTEST in range(colonna_limite_inf,colonna_limite_sup):
if carattere==TEMP[rigaTEST][colonnaTEST]:
VALIDO[riga][colonna]=1
valido=False
#print("TEST: SUB REGION FAIL")
if SEGNAPOSTO[riga][colonna]>16 or valido==False:
VALIDO[riga][colonna]=0
VALIDO[lastRigaScan][lastColScan]=0
SEGNAPOSTO[riga][colonna]=0
TEMP[riga][colonna]=s[riga][colonna]
TEMP[lastRigaScan][lastColScan]=s[lastRigaScan][lastColScan]
ricomincia=True
elif valido==True:
ricomincia=False
VALIDO[riga][colonna]=1
TEMP[riga][colonna]=carattere
if s[riga][colonna]==CHAR_EMPTY:
lastRigaScan=riga
lastColScan=colonna
#sys.stdout.flush()
#time.sleep(0.01)
if ricomincia==False:
print("TEST: VALIDO")
for i in range(16):
for j in range(16):
print(TEMP[i][j]+" ", end="")
print("")
str1=''.join(str(r) for v in TEMP for r in v)
print (str(str1))
hash_object = hashlib.sha256(str1.encode('utf-8'))
hex_dig = hash_object.hexdigest()
print("RISULTATO:")
print(hex_dig)
sys.exit(0)
#SOLUZIONE
#TENTATIVO #316971
#TEST: VALIDO
#3 F 0 1 E 6 8 9 5 2 4 C D 7 A B
#B 8 C 6 7 5 1 4 9 0 D A E 3 F 2
#2 D E A 0 B 3 F 1 8 6 7 5 9 4 C
#7 5 4 9 C A D 2 3 E F B 6 0 1 8
#4 E B F 3 1 C 8 6 5 0 D A 2 7 9
#1 9 D 8 B E 5 6 A C 7 2 0 F 3 4
#6 0 A C D 9 2 7 F B 3 4 8 5 E 1
#5 2 3 7 4 0 F A 8 9 E 1 B D C 6
#F B 5 D 9 4 6 C 2 3 8 E 7 1 0 A
#8 6 2 E F D B 3 7 A 1 0 C 4 9 5
#A 4 9 0 8 7 E 1 C 6 5 F 2 B D 3
#C 1 7 3 5 2 A 0 4 D B 9 F 6 8 E
#E 3 6 B A C 4 D 0 7 9 5 1 8 2 F
#0 C F 5 2 8 9 B D 1 A 3 4 E 6 7
#9 7 1 2 6 F 0 5 E 4 C 8 3 A B D
#D A 8 4 1 3 7 E B F 2 6 9 C 5 0
#3F01E689524CD7ABB8C6751490DAE3F22DEA0B3F1867594C7549CAD23EFB60184EBF31C8650DA27919D8BE56AC720F3460ACD927FB3485E1523740FA89E1BDC6FB5D946C238E710A862EFDB37A10C495A49087E1C65F2BD3C17352A04DB9F68EE36BAC4D0795182F0CF5289BD1A34E6797126F05E4C83ABDDA84137EBF269C50
#RISULTATO:
#85029ec428707d32f91868a93dc726a26a87698e7d86e795e77df6f33363cfb7
#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment