reversing

layer7 리버싱 6차시 과제(2) - x64dbg 명령어 써보기

leesu0605 2022. 8. 3. 20:51

목차

1. x64dbg명령어 쓰기


1. x64dbg명령어 쓰기


수업 중 x64dbg사용법에 대해 배웠다.
오늘은 사용법을 익히기 위해 간단한 드림핵 rev-basic-0 프로그램을 분석해보며 모든 명령어를 한 번씩 써볼 것이다.

써볼 명령어는 이와 같다.

하나씩 써보자.
일단 프로그램을 열어보았다.

그럼 F2부터 써보겠다.
F2명령어는 코드에 브레이크 포인트를 설정하는 명령인데,
이를 설정하면 프로그램을 continue로 실행시켜도 그 부분에서 반드시 멈추게 된다.
즉, 프로그램을 디버깅할 때마다 원하는 곳으로 이동시켜야하는 수고를 하지 않아도 된다.

일단 shift + f12를 사용해 문자열 탐색을 한 후, 가장 수상해보이는 문자열을 클릭해 그 부분을 따라갔다.

문자열 참조를 클릭하면 이런 식으로 모든 문자열이 하나씩 보여진다.
가장 수상해보이는 "Input : "을 따라가보자.

따라가보니 %256s 등등 뭔가 입력을 받을 때 쓰는 문자열들이 보였다.
그럼 이 함수가 main일 테니 한 번 함수의 최상단에 bp를 걸고 하나씩 실행시켜보자.

일단 main함수까지 F9를 눌러 한번에 쭉 실행시켰다.
F9를 누르면 bp를 만날 때까지 실행하기 때문에 디버깅할 때 eip를 원하는 곳으로 갖다놓기 편해진다.

 

그렇게 실행시키다보니 중간에 [rsp+8]에 문자열 "%256"의 주소가 들어간다는 사실을 알 수 있었고, 정말로 거기에 문자열의 주소가 들어가는지 확인해보기 위해 Ctrl + g를 눌러 스택에서 주소를 따라가봤다.

있었다.

어쨌든 그 후, F8을 눌러 하나씩 실행시켜보니, 중간에 어떤 함수를 호출하자마자 더이상 F8이나 F7이 안 눌리고 뭔가 입력을 받으려하는 걸 볼 수 있었다.

입력을 하고 엔터를 눌렀다.
그랬더니 eip가 한 칸 증가하고, F8이나 F7이 다시 눌렸다.

그 다음으로 호출하는 함수는 왠일인지 이름이 적혀있지 않았고, 수상해보여 F7을 눌러 따라 들어가보았다.

이렇게 다른 함수 내부로 들어올 수 있었다.

중간에 je문을 만났는데, 점프를 하지 않았다.
아마 내 입력이랑 C랑 같은지 검사해서 같으면 점프시키고 안 같으면 점프 안 시키는 것 같은데,
한 번 점프했을 때 eip가 어디로 이동하는지 확인해보자.

이런 식으로 분기문에서 점프를 했을 때 3줄 아래로 내려온다는 사실을 알 수 있었다.

그럼 이 어셈블리 코드 수정 단축키를 써볼 공간을 찾아보자.
일단 눈에 띄는 곳은 main함수에서 Wrong!을 출력하기 전 점프를 뛰는 공간이다.

이를 Correct!를 출력하도록 점프문을 nop으로 바꿔보겠다.

점프문이 nop으로 바뀐 것을 볼 수 있다.
이 상태에서 계속 실행시키면 Correct가 출력될 것이다.
라는 걸 기대했지만, 예외가 발생해 오류가 나버렸다...

어쨌든 이렇게 저 위의 x64dbg명령어들을 각각의 용도에 맞게 한 번 이용해 봤다.
한 번 실습해봤으니 문제를 풀 때에도 상황에 맞게 잘 이용할 수 있을 거라 기대하고 있다.