LEVEL 1

rev-basic-3

reversing
  • 문제 정보
  • 풀이 159
  • 난이도 투표 49
  • 질문 7
  • 최근 풀이자 3569
  • 댓글 156

문제 설명

Reversing Basic Challenge #3

이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.

해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!

획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요.

예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}

Reference

Reverse Engineering Fundamental Roadmap

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

avatar
realsung
Open Beta Top 10
출제된 지 17시간 만에 풀이 완료!

난이도 투표 49

질문 7

문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
도저히 모르겠습니다.
우선 전의 문제들과 같이 chall3.00007FF7E4EB1024 이 부분에서 rsp를 1씩 늘려가면서 제가 넣은 문자열과 [7FF7E4EB3000]의 문자열을 비교하는 내용인 것 같습니다. movsxd rax, dword ptr ss:[rsp] lea rcx, qword ptr ds: [7FF7E4EB3000] movsxd rcx, dword ptr ss:[rsp] 을 통해 비교해야 될([7FF7E4EB3000]) 문자들을 루프할 때마다 rsp를 1씩 늘려가면서 하나씩 가져오는것 같고 movsxd rcx,dword ptr ss:[rsp] mov rdx, qword ptr ss:[rsp+20] movzx ecx, byte ptr ds:[rdx+rcx] 을 통해 제가 입력하게 될 문자들을 루프할 때마다 rsp를 1씩 늘려가면서 하나씩 ecx에 넣는것 같습니다. ㅡㅡㅡㅡㅡ 그런데 여기서부터 너무 햇갈리기 시작합니다. 제가 abcd를 넣었다고 가정하면 xor ecx, dword ptr ss:[rsp] mov edx, dword ptr ss:[rsp] lea ecx, qword ptr ds:[rcx+rdx*2] 이 부분에서 ecx = a xor 0 ecx = b xor 1 ecx = c xor 2 ecx = d xor 3 입력한 문자가 맞다면 이런식으로 xor을 해 나갈텐데 lea는 분명히 오른쪽에 주소가 와야된다고 알고있는데 rcx+rdx * 2가 주소가 맞는지조차 모르겠고 아니면 rcx+rdx*2 의 연산 결과값을 주소로 쓰는건지 잘 모르겠습니다. a xor 0 은 a이니까 a(0x61) + 0 * 2 면 0xC2 인데 너무 짧아서 이걸로 주소를 찾을수 있는지도 모르겠고 잠시 넘어가서 cmp eax, ecx 는 비교하고 맞게 입력했으면 루프를 반복하고 잘못 입력했으면 0을 리턴해서 wrong이 나오게 되는것 같습니다. 그러니까 어쨌든간에 lea를 사용했으니까 결과적으로 cmp eax, ecx를 할 때 eax의 [7FF7E4EB3000] 의 0번째 바이트와 ecx 주소의 0번째 녀석 혹은 ecx 주소의 값과 비교하는걸텐데 0번째 녀석이면 rdx는 인덱스의 역할을 하는걸테고 근데 qword로 되어있으니까 8바이트를 가져오는걸텐데 그럼 *2는 무슨뜻인지 모르겠고 ecx의 주소의 값과 비교한다고 해도 ? xor 0 -> + 0 * 2 -> 49 ? xor 1 -> + 1 * 2 -> 60 ? xor 2 -> + 2 * 2 -> 67 ? xor 3 -> + 3 * 2 -> 74 ? xor 4 -> + 4 * 2 -> 63 ? xor 5 -> + 5 * 2 -> 67 ? xor 6 -> + 6 * 2 -> 42 이렇게 되어야 될 것 같은데 여기서 역연산을 하게되면 컴퓨터는 연산은 사칙연산 규칙을 따르지 않고 무조건 앞에서부터 연산하는 방식이라고 이라고 읽었습니다. 그러면 49 / 2 - 0 ^ 0 을 순서대로하면 될거같지만 49/2부터 이미 뭔가 이상해진거같고 어디서부터 잘못된지 모르겠습니다. 특히 저를 너무 혼란스럽게 만드는 lea ecx, qword ptr ds:[rcx+rdx*2] 이부분만 보면 오른쪽에 주소가 와야될거같은데 아니면 mov가 와야되는게 아닌지부터 시작해서 처음보는 형태라 생각이 너무 혼란스럽게 됩니다 ㅠㅠ 제대로 모르다보니 질문조차도 너무 복잡한거같은데 머릿속이 너무 혼란스러워서 잘못 말씀드릴까봐 최대한 횡설수설하지 않으려고 노력했습니다ㅜㅜ 죄송합니다... 감도 안 잡힌다는게 제 상태와 맞는 말인 것 같습니다...ㅜㅜ
쭈꾸미

최근 풀이자 3569

avatar
minxxcozy
주니어
스텝백석점
대표 업적 없음
avatar
Isidoro4
대표 업적 없음
oscar
대표 업적 없음
yrighting
대표 업적 없음
Codename 001
대표 업적 없음
양말이집사
강의 수강: 1
yth
대표 업적 없음
eastshy
워게임: 1
함동현
대표 업적 없음

댓글 156

C언어로 간단하게 코드 짜서 돌리면 됨
avatar
kjc
조사관
이걸 풀고 C언어 다시 시작하려합니다.
고민만7시간째
대표 업적 없음
포인터가 뭔지 몰라서 일주일걸림
Lee_
워게임: 20
와,,,미춌다
O_F
대표 업적 없음
역연산
avatar
Pwner7
대표 업적 없음
역연산 열심히 공부해야겠네요
Code-SHD
대표 업적 없음
계산기보단 코드를 짜는게 좋을듯
l000wk3y
공부벌레
디컴파일하지 말고 어셈블리만 보고 푸는 것도 연습해봐야 함
avatar
ckdenjawx
대표 업적 없음
풀다가 머리 아야할뻔 했어요~🤠
whoamiii
대표 업적 없음
코딩질하면 10분컷. 배움의 자세로 한땀한땀 계산기로 계산. 눈이 침침해서 그런가 중간중간 틀림. 열불남...ㅋ