/
stego.py
100 lines (79 loc) · 2.45 KB
/
stego.py
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from PIL import Image
import math, base64,requests,hashlib,cv2
import numpy as np
from urllib import *
import pytesseract
import webbrowser
s = requests.Session()
challenge_link = 'http://gamebox1.reply.it/ae6cdb9098e1252ec193b2c50587d1b3'
headers = {'User-Agent':'robot'}
def extract_md5(img_name):
global m,c
im = Image.open(img_name,'r')
md5=''
pix=im.load()
for x in range(im.size[0]):
for y in range(im.size[1]):
if y == math.floor(m*x+c):
md5+=chr(pix[x,y][2])
print(md5)
return md5
'''
NO NEEDED :(
'''
def md5_break(md5):
for i in range(10000,100000):
if hashlib.md5(str(i).encode()).hexdigest() in md5:
print('TROVATA')
return str(i)
def ocr_core(filename):
text = pytesseract.image_to_string(Image.open(filename))
return text
'''
FROM STEGSOLVE SEE PLANE0 GREEN CHANNEL
'''
def extract_green_plane(img_name):
img = cv2.imread(img_name)
row,col,pl = img.shape
bit_planes,c = [],0
'''
Extract only green pixel, plane 0
'''
for i in range(img.shape[0]):
for j in range(img.shape[1]):
bit_planes.append(np.binary_repr(img[i][j][1],width=8))
one_bit_img = (np.array([int(i[7]) for i in bit_planes],dtype = np.uint8) * 1).reshape(img.shape[0],img.shape[1])
'''
increase contrast
'''
for i in range(one_bit_img.shape[0]):
for j in range(one_bit_img.shape[1]):
if one_bit_img[i][j] !=0:
one_bit_img[i][j] = 255
cv2.imwrite('green_p0.png',one_bit_img)
m,c=0,0
if __name__=='__main__':
for i in range(5):
if i ==0:
r = s.get(challenge_link, headers = headers)
print(r.text)
base64_img = r.text.split(',')[1].split('">')[0]
with open("img.png", "wb") as fh:
fh.write(base64.decodebytes(base64_img.encode()))
extract_green_plane('img.png')
pass_expr = ocr_core('green_p0.png')
'''
Use OCR to recognize image
'''
c = float(pass_expr.split(' ')[4][:-1])
m = float(pass_expr.split(' ')[3][1:-1])
md5_code = extract_md5('img.png')
r = s.post(challenge_link+'/#',headers = headers, data={'response':md5_code})
'''
last page html, ae6cdb9098e1252ec193b2c50587d1b3/58f5c08dd0131e49275cd553a9063131
is generated by last link, copy the print below, save on new html file and follow the 4 link
'''
print(r.text)
r = s.get('http://gamebox1.reply.it/ae6cdb9098e1252ec193b2c50587d1b3/58f5c08dd0131e49275cd553a9063131',headers = headers)
print(r.text)
#{FLG:Oh_M4m4m14_M4m4m14_L3tM3Go}