cgy12306
Rooters CTF ch03 Write-up 본문
해당 파일을 IDA로 열어서 분석 해봤다.
인자를 3개를 받는데 첫번째 인자는 정수, 두번째 인자는 문자열, 세번째 인자는 아무값이나 받는다.
첫번째 인자가 1을 넘어야 하고, 두번째 인자의 길이를 재서 sub_1273함수로 보낸다.
sub_1273은 인자를 두개 받는데 문자열과, 문자열의 길이를 받는다.
만약 반환값이 0이 되면 올바른 password가 된다.
sub_1273을 분석해보자.
넘겨받은 문자열의 길이만큼 반복을 하게 되는데
off_43E0에 있는 i번째 위치에 있는 값과 문자열의 길이만큼 xor 연산을 하고 문자열의 i번째에 있는 값을 다시 xor 연산한 후 해당 결과값을 or 연산해서 v3 변수에 넣는다.
v3 변수를 반환하게 되는데 그 값이 0이어야 된다.
or은 두개의 바이너리 값 중 하나가 1이 있으면 1을 반환하는 연산이다. 반복문 돌 때마다 v3의 값이 0이 되어야 하므로 모든 연산이 0이 되어야 한다.
우선 off_43E0 위치의 값을 보자.
이 값을 긁어와서 연산을 해보자.
다음은 플래그를 얻는 코드이다.
open으로 파일을 바이너리 형태로 읽어오는데 0x2008지점부터 38만큼만 가져온다.
그리고 반복문을 진행하게 되는데 해당 문자열을 모르기 때문에 아스키 값으로 48부터 127까지 반복을 하는데 연산 결과값이 0일 경우 해당 값을 flag 변수에 넣어서 변수에 들어갈때마다 출력을 해준다.
코드를 실행해보자.
플래그를 획득했다.
'CTF Write-up' 카테고리의 다른 글
WITHCON 2016 malloc (0) | 2020.04.18 |
---|---|
Codegate 2016 floppy (0) | 2020.04.18 |
Codegate 2017 Angrybird (0) | 2020.03.02 |
Holyshield CTF jmper Write-up (0) | 2019.10.31 |
Rooters CTF vuln Write-up (0) | 2019.10.31 |
Comments