본문 바로가기

dreaMhack

(12)
[드림핵] rev_basic_1 풀이/어셈블리어 해석 문제 파일을 다운로드받고 압축을 풀어준다 1. x64bug 해석 본 함수의 코드들인데 여기에서 주목해야 할 점은 correct와 wrong을 출력해주는 부분이다 이 이전에 있는 함수에서 해당 문자열을 고를 반환값을 줬을 가능성이 높기 때문이다 call challo.7ff6c9fb1000 따라서 위의 코드 속 함수 주소를 더블 클릭 해주면 우리가 해석해야하는 함수의 코드들이 나오게 된다 이번 문제는 0번 문제와 비슷하게 오른쪽에 답이 다 나오지만 어셈블리어 학습을 위해 굳이 어셈블리어를 해석해보자 이 함수에서 쓰이는 어셈블리어 함수 종류 mov 두 번째에서 첫 번째로 데이터 이동 movzx 인자의 길이가 일치하지 않아도 이동 jmp 무조건 분기 cmp 두 인자 내용 비교(같으면 0) call 프로시저 호출..
[드림핵] rev_basic_0 풀이/어셈블리어 해석 드림핵 리버싱 강의를 듣고 나면 마지막 트랙에서 드림핵이 제공하는 리버싱 베이직 문제들을 풀어볼 수 있게 된다 rev_basic_0 문제 이전에 있는 patch 문제는 단순히 한 함수를 무시하게 조작해주면 끝나는 것이기 때문에 자세히 어셈블리어를 다루지 않아도 된다고 생각해 0부터 시작합니다 블로그 작성자 본인도 어셈블리어를 해석해본 경험이 적어 많이 부족하겠지만 할 수 있는 선까지의 해석해보겠습니다 1. x64bug 해석 본 함수의 코드들인데 여기에서 주목해야 할 점은 correct와 wrong을 출력해주는 부분이다 이 이전에 있는 함수에서 해당 문자열을 고를 반환값을 줬을 가능성이 높기 때문이다 call challo.7ff796861000 따라서 위의 코드 속 함수 주소를 더블 클릭 해주면 우리가 해..
[드림핵] 리버싱 레지스터 용도 정리 범용 레지스터: General Register 이름 주용도 하위 32비트 하위 16 상위 8 하위 8 rax(accumulator register) 함수의 반환 값 EAX AX AH AL rbx(base register) x64에서는 주된 용도 없음 EBX BX BH BL rcx(counter register) 반복문의 반복 횟수, 각종 연산의 시행 횟수 ECX CX CH CL rdx(data register) x64에서는 주된 용도 없음 EDX DX DH DL rsi(source index) 데이터 옮길 때 원본을 가리키는 포인터 ESI SI rdi(destination index) 데이터 옮길 때 목적지를 가리키는 포인터 EDI DI rsp(stack pointer) 사용 중인 스택의 위치를 가리키는..
[드림핵] Reverse Engineering Introduction(리버스 엔지니어링 소개) 정보보안 분야에 관심을 가지고 있는 사람이라면 드림핵이라는 곳을 전부 다 알고 있을 텐데요 간단히 살펴본 결과 제가 앞으로 블로그에 글을 올릴 리버싱 과목은 간단하게 시작할 때 보기 좋은 난이도로 혹시라도 정보보안에 관심은 있지만 시작할 엄두를 못내고 계시는 분이 계시다면 드림핵 강의를 들어보시는 것도 큰 도움이 될 것 같습니다 ^^ 리버스 엔지니어링이란 'Reverse(리버스)'가 반대의 행위를 의미하듯, 'Engineering(엔지니어링)'의 과정을 거꾸로 하는 행위를 말한다. 책에 따라 이를 '역공학'이라 지칭하기도 하지만 '리버스 엔지니어링', '리버싱'이라는 단어가 보다 널리 사용된다. 드림핵에서는 여러 공학 분야에 존재하는 '리버싱' 기술 중 소프트웨어를 대상으로 한 리버싱을 다룬다. 리버싱은..