x64dbg
단축키
F2 - break point set/reset
; - 주석
: - label 추가
Ctrl + F2 - Restart
F7 - step into
F8 - Step Over
F9 - 실행
Ctrl + F9 - 함수 ret까지 실행
Ctrl + G - 원하는 주소로 이동
코드 찾는 방법
분석하고 싶은 변화 있을때까지 F8로 실행
어떤 줄에서 변화 생겼으면 break point 만들고 Ctrl + F2
그 부분 F7로 들어가서 또 F8로 변화 생길때까지 반복해서 찾아내서 분석
사용하는 string 있으면
마우스 우클릭 -> 다음을 찾기 -> 모든 모듈 -> 참조 문자열
거기서 string 검색하면 그 string이 사용되는 코드 위치와 문자열의 위치가 나옴
그 위치들을 Ctrl + G 로 찾아가서
그 문자열을 수정하거나, 어느 위치에서 사용되는지 찾아가서 분석
알고있는 API 이름이 있으면
마우스 우클릭 -> 다음을 찾기 -> 모든 모듈 -> 모듈간 호출
거기서 api 이름 검색하면 api가 사용되는 코드 위치가 나옴
그 위치들을 Ctrl + G 로 찾아가서 분석
실행파일을 보호해서 파일의 구조가 변경되어 API 호출 목록을 추출할 수 없을 경우
기호 탭에서 dll들 중에 선택해서 api 이름을 검색해서 그 api 구현 부분에 bp를 걸고
그 함수를 호출한 함수로 거슬러 올라가서 분석한다
문자열 수정 방법
메모리 덤프에서 문자열을 수정하거나
새로운 문자열을 빈 공간에 작성
덤프 부분 수정 하는 방법
수정할 부분을 드래그 한 뒤 Ctrl + E를 눌러서 수정
어셈블리 수정 방법
코드 부분에서 수정하고싶은 부분 우클릭 -> 어셈블 -> 수정
수정한 코드 패치해서 저장하는 방법
파일 -> 파일패치 -> 파일패치 -> 저장
엔디안
바이트 자체는 정상적인 순서
2바이트 이상의 자료형에서는 바이트가 역순으로 저장됨
[12]
빅엔디안 [12]
리틀엔디안 [12]
[12][34]
빅엔디안 [12][34]
리틀엔디안 [34][12]
네트워크에서 송수신할때 2바이트 이상의 자료형에 대해 엔디언 타입에 신경써야함.
cpu 레지스터
-cpu 안에 있는 아주 작은 저장 공간
- cpu가 쓰는 수저 및 밥그릇
밥그릇, 숟가락, 젓가락, 국그릇, 반찬 1,2,3,4, 물컵 등등 역할이 있듯
레지스터들 General - Purpose Register, segment register, program status and control register, instruction pointer 등 쓰이는 역할이 있고 cpu가 역할게 맞게 씀.
컴퓨터 비트에 맞게 32비트면 레지스터 크기 4바이트, 64bit 컴퓨터면 레지스터 사이즈가 8바이트
범용 레지스터
EAX - 일반적으로 함수 리턴값을 넣음
ECX - loop에서 카운터역할
ESP - 스택 주소
EBP - ESP 저장하다가 함수 리턴하면 ESP 돌려줌
세그먼트 레지스터
세그먼트 - 메모리 관리할때 코드부분, 스택부분, 데이터부분으로 나누어 진 것
CS - 코드 세그먼트
SS - 스택 세그먼트
DS - 데이터 세그먼트
FS,ES,GS - 데이터 세그먼트
디버깅중인지 확인하려고 FS로 PEB 계산해서 썼었음
Flag
ZF - 연산 결과가 0이면 1
OF - signed 오버플로우 발생하면 1, 최상위 비트 바뀌면 1
CF - unsigned 오버플로우 발생하면 1
EIP - instruction pointer, 처리할 명령어 주소 나타내는 레지스터