https://dreamhack.io/wargame/challenges/18/
앞선 문제들과 동일한 부분에 대한 설명은 생략하겠다.
빠르게 sub_140001000
함수를 살펴 보겠다.
(16 * str[i]) || (str[i] >> 4) 의 결과가 byte_140003000[i]의 값과 대응되어야 한다.
- 16진수에 16을 곱하는 것은 << 4 연산과 결과가 같다.
따라서 해당 식은 (str[i] << 4) || (str[i] >> 4) == byte_140003000[i]와 같다.
입력이 0xA로 들어왔다고 가정해 보자.
0xA를 2진수로 표현하면 0000 1010이다.
0xA << 4 = 1010 0000
0xA >> 4 = 0000 0000
1010 0000 || 0000 0000 = 1010 0000
즉, 이 식은 처음 입력했던 문자열에 2진수에서 4비트끼리 앞뒤로 뒤집은 것이다!
따라서 이를 반대로 적용해서 풀어 주면 된다.
byte_140003000에는 다음과 같이 저장되어 있다.
연산의 결과는 다음과 같이 나오며, 이를 입력하면 Correct가 출력되는 것을 볼 수 있다.
'드림핵 워게임' 카테고리의 다른 글
[드림핵/워게임] rev-basic-3 (0) | 2023.09.09 |
---|---|
[드림핵/워게임] rev-basic-2 (0) | 2023.09.09 |
[드림핵/워게임] rev-basic-1 (0) | 2023.09.09 |
[드림핵/워게임] rev-basic-0 (0) | 2023.09.04 |
[드림핵/워게임] basic_exploitation_002 (0) | 2023.08.17 |