WARGAME/reversing

[dreamhack] rev-basic-3

lucykorea414 2023. 9. 22. 17:03
728x90

 

 

파일 실행

실행을 해봅쉬다

문자열을 찾으면 메인함수를 쉽게 찾을 수 있을 것 같습니다!!

그럼 정적분석을 먼저 해봅시다~

 

 

정적분석

8행의 sub_140001000 함수가 문자열을 검증하는 함수인가 봅니다.

이 함수 이름을 "check_input" 이라고 바꾸겠습니다

 

check_input의 함수를 한번 살펴봅시다

반복문에서 i가 18(hex, dec=24)까지 증가하며 byte_140003000 배열의 각 값이 i ^ *(unsigned __int8 *)(a1 + i)) + 2 * i 의 계산 결과와 같아야지만 Correct를 출력하는 것 같습니다. (이때 a1은 우리가 입력한 문자열)

 

여기서 알아야 할 것은 저 중간의 XOR(^) 연산인데, XOR 연산의 가장 대표적인 특징이 다음과 같습니다.

 

if     A ^ B = C ,
then     C ^ B = A

저 식을 참고해보면 

byte_14003000[i] != (i ^ (a1+i) + 2*i) 이라는 식은 다음과 같이 변형 가능합니다.

(byte_14003000[i] - 2*i) XOR i != (a1+i)

 

그러면 byte_14003000 에는 도대체 무엇이 들어있을까?

더블 클릭을 해보면 이런 데이터가 나옵니다.

그럼 이 값을 이용해서 역 계산을 해봅시다! ^^

역계산을 하는 파이썬 코드는 다음과 같습니다.

 

byte_array = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78,
         0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D, 0x45, 0x00]

result = ""

for i in range(24):
    char = chr((byte_array[i] - (2 * i)) ^ i)
    result += char

print(result)

그럼 결과는 다음과 같이 나옵니다!

이 문구를 그럼 다시 실행파일에 넣어봅시다

 

 

굳 ^_^

728x90

'WARGAME > reversing' 카테고리의 다른 글

[코드엔진/CodeEngn] Basic RCE L13  (0) 2023.11.13
[코드엔진/CodeEngn] Basic RCE L19  (1) 2023.11.13
[dreamhack] patch  (0) 2023.09.22
[dreamhack] rev-basic-1  (0) 2023.09.15
[dreamhack] rev-basic-0  (0) 2023.09.15