2023. 2. 7. 21:48ㆍ카테고리 없음
저는 아래와 같은 c언어를 사용해 작성한 간단한 코드를 x64 dbg를 이용해 분석을 해보려고 합니다.
#include<stdio.h>
int main(void){
printf("hello world");
디버거를 시작하면 CPU 탭의 프로그램 코드 창을 볼 수 있는데, 그 창엔 명령어 포인터, 명령어의 메모리 주소, 명령어 코드(기계어), 어셈블리어 코드를 보여줍니다.
(어셈블리어 코드란? : 명령어 코드를 디스어샘블한 코드입니다.)

화면을 실행 시킨 후 단축어인 ctrl -f8을 누르면 자동으로 프로그램이 시작됩니다.
아래 화면과 같이 디버거가 멈춘 곳이 프로그램의 코드가 시작되는 곳입니다.
디버깅의 진행은 분석이 필요한 코드를 찾고 그 코드의 의미를 파악하는 것입니다.
디버깅 진행에 도움을 주는 [F7], [F8] 키는 두 명령어 코드를 한 줄씩 실행시킵니다.
하지만 함수 호출 부분에 둘의 차이점이 있습니다.
예를 들어 Call 명령어 위에서 [F7]을 사용하면 Call 함수의 내부로 따라 들어가 수행을 하고 되고
[F8] 키를 사용하면 Call 함수를 하나의 명령어처럼 수행하게 됩니다.
또 디버깅에서 문자열 검색을 할 수 있습니다. 결과에서 특정 문자열이 표시된다면 그 문자열을 찾아가는 방법으로 쓰는 것이죠
마우스 우클릭 -> 다음을 찾기(S) -> 현재 모듈 -> 문자열 참조를 누르면
아래와 같이 검색어를 입력할 수 있는 창이 뜹니다.

문자열에 표시되는 내용은 ASCII 코드 기준으로 영어 문자열 위주로 검색됩니다.

따라서 한글 메시지는 검색되지 않습니다. 이럴 때 유용하게 사용할 수 있는 방법이 특정 API를 검색하는 것입니다.
검색하는 방법은
문자열 검색 방법과 동일하게 한 후 마지막에 모듈 간 호출(I)을 선택하면 됩니다.
그러면 이렇게 아래와 같이 API가 사용된 코드가 나타납니다.

API는 특정 동작을 찾는 것이기 때문에 문자열 검색보다 원하는 지점을 더 정확하게 찾아갈 수 있습니다.