-
rev-basic-3리버싱 엔지니어링/드림핵 2022. 4. 5. 01:55
rev-basic-3 : https://dreamhack.io/wargame/challenges/17/
rev-basic-3
Reversing Basic Challenge #3 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출
dreamhack.io
rev2와 동일하게 반복문 형태, 따라서 문자열 길이는 23으로 추측가능하다.
다음 코드를 보면,
movsxd rax, [rsp+18h+var_18]
lea rcx, byte_7FF7C1263000
movzx eax, byte ptr [rcx+rax]unk_7FF7B3203000에서 값을 현재 순서에 맞게 가져오는데 hex view에서 확인하면 아래와 같다.
movsxd rcx, [rsp+18h+var_18]
mov rdx, [rsp+18h+arg_0]
movzx ecx, byte ptr [rdx+rcx]는, 내가 입력한 문자열 중 순서에 맞는 하나의 문자를 가져오는 코드이고
xor ecx, [rsp+18h+var_18]
mov edx, [rsp+18h+var_18]
lea ecx, [rcx+rdx*2]위와 같이 연산 후 값을 비교한다.
([rsp+18h+var_18]는 rax값으로 생각하면 됨)
따라서, 연산의 반대로 적용해 풀어주면 되는데, 코드를 짜서 푸는 것이 좋을 것 같아 아래와 같이 코드를 작성해 풀었다.
#include <iostream> using namespace std; int main() { for (int rax = 0; rax < 24; rax++) { int rcx; cin >> hex >> rcx; // 16진수로 입력받음 rcx -= rax * 2; rcx ^= rax; cout << char(rcx); // 아스키코드로 변환 } return 0;
코드를 실행해 정답을 확인하면,
더보기답 : I_am_X0_xo_Xor_eXcit1ng
'리버싱 엔지니어링 > 드림핵' 카테고리의 다른 글
rev-baic-7,8 (0) 2022.04.19 rev-basic-5,6 (0) 2022.04.09 rev-basic-4 (0) 2022.04.05 rev-basic-1,2 (0) 2022.04.02 rev-basic-0 (0) 2022.03.31