목차
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명령어들을 각각의 용도에 맞게 한 번 이용해 봤다.
한 번 실습해봤으니 문제를 풀 때에도 상황에 맞게 잘 이용할 수 있을 거라 기대하고 있다.
'reversing' 카테고리의 다른 글
Layer7 리버싱 7차시 과제 - rev-basic-2 풀이 (0) | 2022.08.08 |
---|---|
Layer7 6차시 과제(3) - 드림핵 rev-basic-0,1 풀이 (0) | 2022.08.03 |
Layer7 리버싱 6차시 과제(1) - ELF, PE 파일 정리 (0) | 2022.08.03 |
Layer7 리버싱 5차시 과제(3) - prob4 분석 (0) | 2022.08.01 |
layer7 리버싱 5차시 과제(2) - prob3 분석 (0) | 2022.08.01 |