본문 바로가기

카테고리 없음

2024.8.6 리버싱 공부(나뭇잎 책)

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, 처리할 명령어 주소 나타내는 레지스터