두번째로 풀어볼 문제는 드림핵 rev basic #2 이다.
문제 풀어보는 방식은 https://beru-123.tistory.com/10 와 동일한 방식으로 풀어보도록 하자.
문제도 어느 값을 입력하면 출력으로 "Correct"를 나오게 하면 된다.
; __unwind { // __GSHandlerCheck
해당 코드에 F5로 클릭해보면 다음 코드로 이동한다.
int __cdecl main(int argc, const char **argv, const char **envp)
{
char v4[256]; // [rsp+20h] [rbp-118h] BYREF
memset(v4, 0, sizeof(v4));
sub_1400011B0("Input : ", argv, envp);
sub_140001210("%256s", v4);
if ( (unsigned int)sub_140001000(v4) )
puts("Correct");
else
puts("Wrong");
return 0;
}
해당 코드를 보고 puts로 들어가보면 아무 반응도 안일어난다.
리버싱을 하다보면 자주 보이는 sub_140001000 함수는 중요한 역할을 하니 기억해두면 좋다
sub_140001000함수는 다음 코드로 들어갈 수 있다고 뜨고 있다.
__int64 __fastcall sub_140001000(__int64 a1)
{
int i; // [rsp+0h] [rbp-18h]
for ( i = 0; (unsigned __int64)i < 0x12; ++i )
{
if ( *(_DWORD *)&aC[4 * i] != *(unsigned __int8 *)(a1 + i) )
return 0i64;
}
return 1i64;
}
현재 코드에선 if ( *(_DWORD *)&aC[4 * i] != *(unsigned __int8 *)(a1 + i) ) 만 유일하게 반응한 코드이기에 더 들어가보면
data:0000000140003000 aC db 'C',0 ; DATA XREF: sub_140001000+28↑o
.data:0000000140003002 align 4
.data:0000000140003004 aO db 'o',0
.data:0000000140003006 align 8
.data:0000000140003008 aM db 'm',0
.data:000000014000300A align 4
.data:000000014000300C aP db 'p',0
.data:000000014000300E align 10h
.data:0000000140003010 a4 db '4',0
.data:0000000140003012 align 4
.data:0000000140003014 aR db 'r',0
.data:0000000140003016 align 8
.data:0000000140003018 aE db 'e',0
.data:000000014000301A align 4
.data:000000014000301C db '_',0
.data:000000014000301E align 20h
.data:0000000140003020 aT db 't',0
.data:0000000140003022 align 4
.data:0000000140003024 db 'h',0
.data:0000000140003026 align 8
.data:0000000140003028 aE_0 db 'e',0
.data:000000014000302A align 4
.data:000000014000302C db '_',0
.data:000000014000302E align 10h
.data:0000000140003030 aA db 'a',0
.data:0000000140003032 align 4
.data:0000000140003034 aR_0 db 'r',0
.data:0000000140003036 align 8
.data:0000000140003038 aR_1 db 'r',0
.data:000000014000303A align 4
.data:000000014000303C a4_0 db '4',0
.data:000000014000303E align 20h
.data:0000000140003040 aY db 'y',0
.data:0000000140003042 align 10h
세로로 익숙한 영단어와 숫자가 존재한다. 모두 종합해서 쓰자면 "Comp4re_the_arr4y"로 나온다.
CMD에 답을 입력해보자
정답이라 나왔다.

'Security > Reverse Engineering' 카테고리의 다른 글
리버스 엔지니어링, 밑 바닥부터 시작하기 (5) (0) | 2024.04.13 |
---|---|
리버스 엔지니어링, 밑 바닥부터 시작하기 (4) (2) | 2023.11.01 |
리버스 엔지니어링, 밑 바닥부터 시작하기 (3) (2) | 2023.10.28 |
리버스 엔지니어링, 밑 바닥부터 시작하기 (1) (1) | 2023.10.27 |
리버스 엔지니어링, 밑 바닥부터 시작하기 (2) | 2023.10.25 |