본문 바로가기

SWUFORCE 워게임👊🏻

[CryptoHack] Hex ; crypto

<워게임_CryptoHack_Hex>

 

<문제>

 

우리가 무언가를 암호화할 때 결과 암호문에는 일반적으로 인쇄할 수 없는 ASCII 문자가 포함되어 있습니다. 암호화된 데이터를 공유하려면 여러 시스템에서 사용자 친화적이고 휴대하기 쉬운 것으로 인코딩하는 것이 일반적입니다.

16진수는 ASCII 문자열을 나타내는 방식으로 사용할 수 있습니다. 먼저 각 문자는 이전 챌린지에서와 같이 ASCII 표에 따라 순서 번호로 변환됩니다. 그런 다음 소수점 숫자는 16진수로 변환되며, 이를 16진수라고도 합니다. 숫자를 하나의 긴 16진수 문자열로 함께 결합할 수 있습니다.

아래에는 육각 문자열로 인코딩된 플래그가 포함되어 있습니다. 이를 다시 바이트로 디코딩하여 플래그를 가져옵니다.

63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d

 

hint! 파이썬에서 바이트.fromhex() 함수를 사용하여 헥스를 바이트로 변환할 수 있습니다. .hex() 인스턴스 메서드는 바이트 문자열에서 호출하여 헥스 표현을 얻을 수 있습니다.

 

<풀이>

 

1. 주어진 헥스값(16진수 문자열)

'63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d' 을 파이썬의 bytes.fromhex() 메서드를 사용해 바이트로 변환한다.

hex_string = "63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d"

#fromhex() 함수를 사용해 헥스값(16진수)를 바이트(8진수)로 변환
byte_data = bytes.fromhex(hex_string)
print("바이트 데이터:", byte_data)

 

2. 바이트를 문자열로 디코딩한다.

#바이트 데이터를 UTF-8 문자열로 디코딩하여 플래그 얻기
flag = byte_data.decode('utf-8')
print("플래그:", flag)

 

3. 코드 실행 결과

 

이때!!  print("바이트 데이터:", byte_data)와 print("플래그:", flag)가 같은 값을 출력하는 이유는,

print(byte_data)에서 바이트 데이터를 출력할 때도, 내부적으로 ASCII/UTF-8 형식으로 출력하기 때문에 사람이 읽을 수 있는 문자로 나타나기 때문. 그리고 decode('utf-8')를 통해 얻은 flag는 이미 그 바이트 데이터를 완전히 문자열로 변환한 값이므로 동일한 출력을 얻게 되는 것이다.

 

해결 완!👊🏻

'SWUFORCE 워게임👊🏻' 카테고리의 다른 글

[CryptoHack] Base64 ; crypto  (0) 2024.11.12
[Suninatas] 05 ; web  (2) 2024.11.12
[CryptoHack] ASCII ; crypto  (0) 2024.11.05
[Webhacking] old-17 ; web  (2) 2024.10.08
[Webhacking] old-16 ; web  (0) 2024.10.08