학회_공부해요/워게임

[H4CKING GAME] Write up - Keygen

yenas0 2025. 1. 28. 18:06
반응형

해킹겜 쉽다길래..

리버싱 풀거임

 

문제파일이 실행파일이다

일단 cmd에서 실행시켜보자

실행시키면 플래그 넣으라는 창이 뜨고 아무거나 입력해보면 플래그 아니라함

 

플래그 맞추면 키를 줄듯?

그래서 디버거에서 열어봄

올리디버거쓸라했는데 32비트 아니어서 안열림 x64dbg씀

 

일단 f8넘기면서 쭉 넘어가다가 input 받는데에서 멈춫는거 확인함

BP 넣어두고

 

 

아무값이나 입력하고 넘어가면 내가 입력한 값 들어가고 비교한느거 같은거 확인할 수 있음

 

분기문이랑 보는거 걍 ida 에서 보는게 나을듯.. 해서 다시 열어봄

 

비교해서 플래그가 맞으면 왼쪽게 실행되나봄

 

위에 메인보면..

이런식

 

?;FJDnv8dw8lRulyRmmt

위에 문자열을 플래그혀ㅇ식으로 바꾼거같은데..

 

저거 이미지 넣고 지피티한테 c언어바꿔달라할랬는데 알고보니 ida에서F5누르면 디컴파일 됨..

제대로 써본적이없어서 몰랐는데 ida 사용법 쳐서 알아냄

 

그래서 main함수를 ida내에서 디컴파일 해봤다. 

 

저기 위에 ?;어쩌구 문자열을 for문에서 연산한거같은데 for문을 보면은

 

0x11이랑 xor연산, 0x1B랑 xor하고 3 뺐음

 

역연산 하는 코드 python으로 짜면

def reverse_buf2_to_buf1():
    # Buf2의 초기값 (주어진 값)
    Buf2 = list(b"?;FJDnv8dw8lRulyRmmt")  # b~~로 byte array로 설정
    original_input = []

    # Buf2의 각 바이트에 대해 역연산 수행
    for i in range(20):
        # 역연산 순서: 원래 연산의 역순으로 진행
        value = Buf2[i]
        value += 3                # Buf1[i] -= 3의 역연산
        value ^= 0x1B             # Buf1[i] ^= 0x1B의 역연산
        value ^= 0x11             # Buf1[i] ^= 0x11의 역연산
        original_input.append(value)

    # 원래 입력값 반환
    return bytes(original_input)

# 결과 출력
if __name__ == "__main__":
    original_flag = reverse_buf2_to_buf1()
    print(f"Original input to match Buf2: {original_flag.decode()}")

 

 

 

 

출력하면 flag형식이 나옵니다~

반응형