이번에는 드림핵 리버싱 베이직 6번 문제를 풀어보자.
이전에 올렸던 rev-basic-5 문제와 동일하게 바이너리를 실행 시키면
input : 이라는 문자열과 함께 문자열을 입력 받고 정답이면 Correct, 아니면 Wrong을 출력한다.
우선 동일하게 x64 디버거를 이용해 어셈블리를 분석해보자.
해당 프로그램 main의 어셈블리는 다음과 같다.
00007FF782681120 | 40:57 | push rdi | rdi:&"ALLUSERSPROFILE=C:\\ProgramData" 00007FF782681122 | 48:81EC 30010000 | sub rsp,130 | 00007FF782681129 | 48:8B05 F81F0000 | mov rax,qword ptr ds:[7FF782683128] | 00007FF782681130 | 48:33C4 | xor rax,rsp | 00007FF782681133 | 48:898424 20010000 | mov qword ptr ss:[rsp+120],rax | 00007FF78268113B | 48:8D4424 20 | lea rax,qword ptr ss:[rsp+20] | 00007FF782681140 | 48:8BF8 | mov rdi,rax | rdi:&"ALLUSERSPROFILE=C:\\ProgramData" 00007FF782681143 | 33C0 | xor eax,eax | 00007FF782681145 | B9 00010000 | mov ecx,100 | 00007FF78268114A | F3:AA | rep stosb | 00007FF78268114C | 48:8D0D BD100000 | lea rcx,qword ptr ds:[7FF782682210] | 00007FF782682210:"Input : " 00007FF782681153 | E8 58000000 | call chall6.7FF7826811B0 | 00007FF782681158 | 48:8D5424 20 | lea rdx,qword ptr ss:[rsp+20] | 00007FF78268115D | 48:8D0D B8100000 | lea rcx,qword ptr ds:[7FF78268221C] | 00007FF78268221C:"%256s" 00007FF782681164 | E8 A7000000 | call chall6.7FF782681210 | 00007FF782681169 | 48:8D4C24 20 | lea rcx,qword ptr ss:[rsp+20] | 00007FF78268116E | E8 8DFEFFFF | call chall6.7FF782681000 | 00007FF782681173 | 85C0 | test eax,eax | 00007FF782681175 | 74 0F | je chall6.7FF782681186 | 00007FF782681177 | 48:8D0D AA100000 | lea rcx,qword ptr ds:[7FF782682228] | 00007FF782682228:"Correct" 00007FF78268117E | FF15 04100000 | call qword ptr ds:[<&puts>] | 00007FF782681184 | EB 0D | jmp chall6.7FF782681193 | 00007FF782681186 | 48:8D0D A3100000 | lea rcx,qword ptr ds:[7FF782682230] | 00007FF782682230:"Wrong" 00007FF78268118D | FF15 F50F0000 | call qword ptr ds:[<&puts>] | 00007FF782681193 | 33C0 | xor eax,eax | 00007FF782681195 | 48:8B8C24 20010000 | mov rcx,qword ptr ss:[rsp+120] | 00007FF78268119D | 48:33CC | xor rcx,rsp | 00007FF7826811A0 | E8 5B010000 | call chall6.7FF782681300 | 00007FF7826811A5 | 48:81C4 30010000 | add rsp,130 | 00007FF7826811AC | 5F | pop rdi | rdi:&"ALLUSERSPROFILE=C:\\ProgramData" 00007FF7826811AD | C3 | ret | 여기서 정답의 로직을 분석하는 부분은 00007FF78268116E이다.
...