<문제>
<풀이>
먼저 동적 분석을 해본다.
Windows PowerShell을 열어 다운로드한 chall3.exe 파일을 드래그앤드롭했다.
엔터를 눌러 실행한다.
Input : 이라고 뜨며 입력을 대기한다.
임의로 apple을 입력했다.
엔터를 누르면 Wrong이라는 메시지가 뜨고 프로그램이 종료된다.
이제 정적분석을 해본다.
IDA를 이용했다.
열 파일에 대한 정보가 나온다.
변경사항없이 OK를 클릭한다.
적용할 심볼파일이 없으므로 No를 클릭한다.
Shift+F12 단축키를 눌러 문자열 목록을 본다.
Correct 문자열을 찾을 수 있다.
해당 문자열의 상호참조를 찾아가보면
입력값과 올바른 input 값을 비교하는 명령문이 있는 함수를 찾을 수 있을 것이다.
Correct 문자열을 더블클릭한다.
Buffer 변수를 선택한 후 상호참조를 찾기 위해 단축키 x를 누른다.
main함수를 찾을 수 있다.
해당 줄을 더블클릭하여 어셈블리 상에서의 main 함수를 찾는다.
main함수를 찾았다.
F5를 눌러 디컴파일한다.
sub_140001000함수의 반환값에 따라 성공/오류 메시지가 결정된다.
해당 함수를 더블클릭한다.
입력값을 가공한 값과 byte_140003000에 있는 데이터를 비교한다.
byte_140003000을 클릭하여 데이터를 확인한다.
데이터를 찾았다.
앞서 살펴본 sub_140001000함수에서
입력값에 XOR한 값에 2*i를 더한 값을 byte_140003000[i]와 비교했다.
byte_140003000[i]에서 2*i를 뺀 값에 XOR의 역연산인 XOR을 취하면 올바른 입력값을 찾을 수 있을 것이다.
flag = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0x0A5, 0x9D, 0x45, 0x00]
for i in range(0,len(flag)-1):
print(chr((flag[i] - 2*i)^i), end="")
byte_140003000의 데이터를 flag배열에 담고
한 문자씩 역연산을 취하여 대응되는 ascii 문자를 chr()함수로 찾아 출력하는 파이썬 코드이다.
위와 같이 찾고자 하는 입력값을 구할 수 있다.
'드림핵' 카테고리의 다른 글
[드림핵 로드맵] System Hacking - Quiz: x86 Assembly 3 (0) | 2024.03.14 |
---|---|
[드림핵 로드맵] System Hacking - Quiz: x86 Assembly 2 (0) | 2024.03.14 |
[드림핵 워게임] patch (2) | 2023.11.24 |
[드림핵 워게임] rev-basic-1 (0) | 2023.11.21 |
[드림핵 워게임] rev-basic-0 (1) | 2023.11.21 |