exe 파일을 다운로드해 열었다.
알맞은 flag를 입력해야 뭔가 출력되는 형태로 추정.
notepad++ 사용해서 exe 파일 열었더니 깨져서.. ㅎㅎ
IDA freeware 사용해서 열었다.
main 함수 부분 찾았다.
이 상태로는 해석이 어렵기 때문에, F5 키를 눌러 디컴파일한다.
int __fastcall main(int argc, const char **argv, const char **envp)
{
int i; // [rsp+20h] [rbp-48h]
char Buf2[24]; // [rsp+28h] [rbp-40h] BYREF
char Buf1[24]; // [rsp+40h] [rbp-28h] BYREF
strcpy(Buf2, "?;FJDnv8dw8lRulyRmmt");
memset(Buf1, 0, 0x15uLL);
sub_140001070("%s", aInputFlag);
sub_140001140("%s", Buf1);
for ( i = 0; i < 20; ++i )
{
Buf1[i] ^= 0x11u;
Buf1[i] ^= 0x1Bu;
Buf1[i] -= 3;
}
if ( !memcmp(Buf1, Buf2, 0x14uLL) )
sub_140001070("%s", aGoodThisIsFlag);
else
sub_140001070("%s", aNoThisIsNotFla);
return 0;
}
디컴파일된 함수는 위와 같다.
Buf2에 "?;FJDnv8dw8lRulyRmmt” 문자열을 copy하고 Buf1의 메모리를 0x15만큼 0으로 초기화,
sub_140001070 = IDA 통해 들어가 보니 printf() 함수
sub_140001140 = IDA 통해 들어가 보니 scanf() 함수
i는 반복문에서 사용하는 정수형 변수이고
Buf1은 사용자 입력 저장하고 변환 후 저장될 24바이트 크기의 버퍼
Buf2는 정답 플래그 저장을 위한 24바이트 크기의 버퍼.
Buf1과 Buf2를 처음 20바이트까지 비교하고 변환된 입력값이 정답과 동일한지 판별.
입력값을 변환한 값이 Buf2와 동일하면 성공 메시지를 출력
Buf2에 들어가 있는 이상한 문자열을 해석하기 위한 코드 작성해야 하는 것 같다.
GPT의 도움을 좀 받아 보니, 변환 과정을 역으로 계산해야 한다고 함.
Buf2 = '?;FJDnv8dw8lRulyRmmt'
for i in range(0, 20):
char = ord(Buf2[i])
char += 3
char ^= 0x1B
char ^= 0x11
print(chr(char), end="")
위와 같은 코드 작성해 실행해 봤음.
이렇게 플래그 형태의 문자열 출력됨.
이를 exe 파일에 입력해 보자.
-> 입력해 봤는데 엔터키 누를 때마다 실행파일 꺼짐... 왜이러지
어쨌든 정답은 맞다. 해결 완료
'SWUFORCE > 워게임 풀이' 카테고리의 다른 글
[H4CKING GAME] Season1 : Smuggling (Web) (0) | 2025.01.21 |
---|---|
[H4CKING GAME] Hello,Postman (Cryptography) (0) | 2024.11.26 |
[H4CKING GAME] Season1 : art (Forensics) (0) | 2024.11.19 |
[H4CKING GAME] Season1 : CODE (Forensics) (0) | 2024.11.19 |
[H4CKING GAME] Season1 : cat (Forensics) (2) | 2024.11.10 |