상세 컨텐츠

본문 제목

[HackCTF-Reversing#4] Strncmp - 150 points

Reversing/HackCTF

by bing_su 2021. 1. 5. 22:53

본문

반응형
SMALL

HackCTF Reversing 네 번째 문제는 Strncmp이다.

그냥 문제 이름만 봤을 때는 문자열을 비교하는 것과 관련된 문제일까 싶었다.

 

main 함수 부분이다. v4에 사용자가 입력한 문자열을 저장하고 있다.

이후 strcmp_ 함수에 v4가 인자로 전달되고, v5는 문자 'O'이다.

strcmp_(&v4, &v5)의 형식으로 인자를 전달해 비교를 진행하고 있다. 따라서 a1은 우리가 입력한 문자열인 v4에 대한 것이고, a2는 원래 스택에 있던 값인 v5이고, 이는 a2 문자열은 v5부터 v32까지의 문자열이라고 할 수 있다.

 

입력받은 문자열을 key로 xor 한 것과 a2를 strcmp_해서 return 값이 0이면 (두 문자열이 같으면) "Good game"이면 1이면 "Always dig deeper"의 문자열을 출력하는 것을 볼 수 있다.

 

즉, 문자열을 정상적으로 입력하기 위해서는 확실하게 아는 a2 문자열을 key로 xor 한 값을 입력해 줘야 한다.

check 함수의 내용이다. 이 함수에서 key 값을 찾아낼 수 있다.

v3 * (v3 - 14) == -49의 방정식을 풀게 되면 key = v3이므로 key 값은 7 임을 알 수 있다.

 

이제 위의 내용들을 이용해 플래그를 알아내는 코드를 짜 보자.

1
2
3
4
5
6
7
8
#include <stdio.h>
#include <string.h>
 
int main() {
    char* s = "Ofd1DSA|3tXb32~X3tX@sX`4tXtz";
    for (int i = 0; i < strlen(s); i++)
        printf("%c", s[i] ^ 7);
}
 
 

위와 같이 코드를 작성해 Flag 값을 알아낼 수 있었다.

반응형
LIST

관련글 더보기

댓글 영역