본문 바로가기
Wargame/HackCTF

Strncmp

by Anatis 2021. 3. 19.

 

1. 풀이

프로그램을 실행시켜 보면 input을 요구하고 입력을 하니까 Always dig deeper를 출력해주고 종료한다.

 

프로그램을 IDA로 main함수 영역을 살펴보면 입력을 받는 부분이 있고 Good game과 Always dig deeper 문자열이 보인다. 

 

입력을 받고 입력을 받은 v4와 위의 숫자들 즉 v5값을 사용자 정의 함수인 strcmp_ 함수의 인자로 넘겨준다. strcmp_를 살펴보자

 

strcmp_ 함수를 살펴보면 첫 번째 for문 부분은 왜 돌리는지 아직도 잘 모르겠다. 두 번째 for문 부분에서 입력 값과 key 값을 xor연산을 하여 그 값이 a2 값과 일치하면 Good game을 출력한다. key는 check 함수가 있는데 그 쪽 부분에서 한번 살펴 보자.

 

v3에 a2를 넣고 v3 * (v3 - 14) == -49 부분이 참이면 key 값에 v3를 넣고 아니면 key에 0을 넣는다. key에 0이 들어가 우리가 입력 받은 값과 xor연산을 하면 아무 의미가 없으니 v3의 값을 구해야 한다.

 

gdb를 통해 확인해보면 위의 문자열이 v5이다. 우리가 구해야하는 flag의 값은 HackCTF{...} 이니 OfdlDSA가 HackCTF 일 것 이며 이 값을 xor 연산을 통해 key 값을 구해보자.

key의 값을 확인해 보면 7인 것을 알 수 있다. 그렇다면 v5의 문자열을 key 값으로 xor연산을 하면 플래그 값이 나올 것 이다.

 

flag = 'OfdlDSA|3tXb32~X3tX@sX`4tXtz'
key = 7

for i in range(len(flag)):
    print(chr(ord(flag[i]) ^ key), end='')

'Wargame > HackCTF' 카테고리의 다른 글

Look at Me  (0) 2021.03.21
Random Key  (0) 2021.03.21
Poet  (0) 2021.03.19
RTL_Core  (0) 2021.03.19
Handray  (0) 2021.03.18

댓글