base64 본문
Base64는 그대로 표현하면 64진법이다.
바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩이다.
8비트짜리 바이트 3개를 6비트씩 4개로 쪼개어 Base64 코드 4개로 바꾸어 표현한다.
example
원문
|
E
|
1
|
L
|
|||||||||||||||||||||
바이트 값
|
0x45
|
0x31
|
0x4C
|
|||||||||||||||||||||
2진수
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
변환 값
|
17
|
19
|
5
|
12
|
||||||||||||||||||||
결과
|
R
|
T
|
F
|
M
|
원문 'E1L' 을 인코딩하는 과정이다.
결과로 'RTFM' 이 나온다.
$ echo -n E1L | base64
RTFM
$ echo RTFM | base64 --decode
E1L
리눅스에서의 인코딩 디코딩 과정이다.
Base64 변환표
값
|
문자
|
|
값
|
문자
|
|
값
|
문자
|
|
값
|
문자
|
0
|
A
|
16
|
Q
|
32
|
g
|
48
|
w
|
|||
1
|
B
|
17
|
R
|
33
|
h
|
49
|
x
|
|||
2
|
C
|
18
|
S
|
34
|
i
|
50
|
y
|
|||
3
|
D
|
19
|
T
|
35
|
j
|
51
|
z
|
|||
4
|
E
|
20
|
U
|
36
|
k
|
52
|
0
|
|||
5
|
F
|
21
|
V
|
37
|
l
|
53
|
1
|
|||
6
|
G
|
22
|
W
|
38
|
m
|
54
|
2
|
|||
7
|
H
|
23
|
X
|
39
|
n
|
55
|
3
|
|||
8
|
I
|
24
|
Y
|
40
|
o
|
56
|
4
|
|||
9
|
J
|
25
|
Z
|
41
|
p
|
57
|
5
|
|||
10
|
K
|
26
|
a
|
42
|
q
|
58
|
6
|
|||
11
|
L
|
27
|
b
|
43
|
r
|
59
|
7
|
|||
12
|
M
|
28
|
c
|
44
|
s
|
60
|
8
|
|||
13
|
N
|
29
|
d
|
45
|
t
|
61
|
9
|
|||
14
|
O
|
30
|
e
|
46
|
u
|
62
|
+[2]
|
|||
15
|
P
|
31
|
f
|
47
|
v
|
63
|
/
|
워게임에서는 base64 custom table로 문제가 나오기도 한다.
table을 사용자가 직접 바꾸어 인코딩 디코딩이 가능하다는 것이다.
https://dreamhack.io/wargame/challenges/105/
baseball
Description 바이너리를 분석하여 플래그를 얻어주세요. 얻은 플래그는 DH{<flag>} 형식으로 인증해주세요.
dreamhack.io
관련 워게임 문제이다.
python을 통한 간단한 base64 동작이다.
import base64
mytext = "This is my secret text"
encoded=(base64.b64encode(mytext.encode('ascii')))
encoded_ascii=encoded.decode('ascii')
print(encoded_ascii)
텍스트를 인코딩하는 과정이다.
ascii형태로 encode를 진행한다.
import base64
base64_text = "VGhpcyBpcyBteSBzZWNyZXQgdGV4dA=="
decoded = base64.b64decode(base64_text.encode('ascii'))
decoded_ascii=decoded.decode('ascii')
print(decoded_ascii)
텍스트를 디코딩하는 과정이다.
import base64
file = "https://d1ny9casiyy5u5.cloudfront.net/tmp/myimage.png"
with open(file, 'rb') as file_binary:
data = file_binary.read()
encoded = base64.b64encode(data)
encoded_utf8 = encoded.decode('utf-8')
print(encoded_utf8)
바이너리를 인코딩하는 과정이다.
import base64
file = "https://d1ny9casiyy5u5.cloudfront.net/tmp/myimage.png"
file_base64 = "iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAMAAACj+CEXAAAAe1BMVEUBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEEBARBQUFEREQ5OTkyMjIwMDBERERFRUUzMzNTU1M5OTk7Ozs8PDxJSUlTU1Nubm5+fn6CgoKqqqqlpaVqampXV1cAAAARERGBiHwBAAAAJXRSTlP61+/GtKCOdlBjQzEkFxIFDwYBAAEDBg0NQVJqjMz07ODco8hubKn0rgAAA5JJREFUWMPFmN1y2zgMRkMC4D8JTj5pp8k2yTRNg7z/E+6FbG+aujOunV2fO0oU5ggERVI3+BSWdV0+I84N/vpyKqse+BimhFB2Yr/tc5LO7fPriTzdJwkb8WOYRLa71uPv+hxFx0/aN8vXx28n8fRwJ57Fe2bvfgnb/9Xxnvlon2M0lz7oPJ2Wx/unuxABIkVkYPa5e72uAJpl9LECANMEEAmz97HM3qeOruvY5UH7WIDZO2ZfZ7H4flj/QOfxDgoQDaguJUgoCrQoEquiWcwiSQEwdQC9Lok5rok5l8A5B8kTWFqUkCZS4BJFExvFfq4ONh2geArkCjo7Cc43NCMO5DMApjbnBNbKJshGqQVzFNgi0MgF9hk1GElAEaM8LtVRR8AgQfQJKL6imQDNCQD2IiINwGQq4ioARxNg3zX4Bgg1lK3YmuUza+edTjOKMTjqQg3Q3LewnVnf66CRdwmAOlGgWOrkYozkK5KVBUD9DJ1ixMwcG/Nu4JvFgw7N/TNrNJ4HnWaxO8/MHNqn6jSLOsZUFWrAUvvPOh3AaAAqOZcPOtXycKRjzKmfp6OAOlJg9K12kqvoloHBfJjomYDBVIMr+/5iTYOvQO9AsXLI6nKuzsjeBwWSp8CU0dmJeB5VjJNG73PL3ksIwRkKW0Ayl1WdI2ELQCUv4qIWNi4Amvf75eUMnR5FRAGtQULuQM8iuaOISJ5BJNYoO5BEIopwHOo4B8kDWFsUyQ1JRBIALRLq2To6xugLAMwxdfsqDwW0jzHXMcbQsQezjwntY2Jxooev8hgKzDHGBIB1F+fM2jmHtXpup63of6ITzG9QNu+lbk2uADQ676Qef7Q4M6+friOUinOpsBvRpC3Jc0mZfIWSjymzz8ezc/L25490clYQDaSwTdDqAoDuRZMlAI0CLuPMJfS9Dog0WwUwcrq+jjrR7l2Zevl2+UId6b2KLysqmQtFr6tD5r13eQGAEpyXeeXstNYAoDcAiD5eV2c/kyIB++3XNXTqBx0rffR8eXbWr4/3f5/Cw8Md0KN5UaCwUepiLm/V0sSxsJN+qc7t8+uP03i63w51okAJIeQWQtjvuzXFENLAcqnOy0e+b4fOb7/c+IL/nJtfL728vb29vb09vOD/56iOmZldWef2Z52ba2fn5fvGtxszM3vcNb/fXkfn+XErmm2s7GbXev1yJZ3Xx2P8uJLO7356XXlmXZN/AFQ7epD6bAWAAAAAAElFTkSuQmCC"
encoded = file_base64.encode('utf-8')
with open(file, 'wb') as file:
decoded_data = base64.decodebytes(encoded)
file.write(decoded_data)
바이너리를 디코딩하는 과정이다.
'보안 > 개인공부' 카테고리의 다른 글
fork 디버깅, PIE 디버깅 (0) | 2022.03.06 |
---|---|
LoadLibrary (0) | 2022.02.16 |
_IO_FILE Arbitrary Address Write (0) | 2022.02.10 |
_IO_FILE Arbitrary Address Read (0) | 2022.02.10 |
__environ (0) | 2022.02.09 |
Comments