개발도구(visual stdio같은)로 C언어 소스 코드 빌드, 실행파일이 생성.
이 과정에서 사람이 이해하기 쉬운 명령어에서 기계가 이해하기 쉬운 기계어로 바뀜.
디버거(debugger) 유틸리티에 디스어셈블러(disassembler)를 통해 코드를 보게 됨.
-EP(Entry Point) : CPU에 의해 가장 먼저 실행되는 코드시작위치
코드의 앞쪽에 Stub Code(컴파일러에 의해 생성되는 코드, 전역변수와 같은 것들이 생성)이 존재
-> main() 함수를 찾는 게 중요
Kernel32.GetCommandLineW - Windoww32 API 호출 코드
-BaseCamp를 설치하는 4가지 방법
1) Goto - Ctrl + G (원하는 주소를 바로 입력하여 감)
2) BP(BreakPoint) - F2,F9 (분단점을 설정하여 Run 하여 그 BP까지 실행)
3) 주석 - ; , search for - user defined comment(주석을 입력하여 목록을 통해 이동)
4) 레이블 - : , search for - user defined labels(레이블을 입력하여 목록을 통해 이동)
-원하는 코드 빨리 찾는 4가지 방법
1) 코드 실행 방법 : 하나씩 실행 / 작은 코드에만 적용가능
2) 문자열 검색 방법 : 사전 분석 과정에서 참조되는 문자열과 API 가 목록화 됨. 여기서 'All refered text string'를 통해 찾을 수 있음 / 텍스트 박스에 'Hello World' 가 나와 있는 경우
3) API 검색 방법_호출코드에 BP : 모니터에 출력이 있기 위해선 win32 API 로 OS에 화면출력 요청을 해야함.
OllyDBG의 API 함수목록에서 'All intermodular calls' 를 통해 찾을 수 있음 / API 유추할 수 있는 경우
4) API 검색 방법_API 코드에 직접 BP : 모든 실행파일에서 목록을 추출할 수 있지 않음. (Packer/Protector 같은 경우)
->라이브러리(DLL코드)에 직접 BP, API 는 dll에 구현되어 있음. 'Name in all modules -> 검색'
Packer : 실행 압축 파일 자체도 실행파일
Protector : 보호를 목적으로 설치. 어셈블러로 수정 불가
-문자열 패치
1) 버퍼 직접 수정 - Goto -> Ctrl + E/ 간단,크기를 넘어선 문자 X / 프로세스가 종료되면 사라짐
2) 다른 메모리에 새로운 문자열 생성 - 임의의 메모리 영역에 페치 -> 함수에 주소 파라미터 넘겨줌 = 전혀 다른 문자열 주소
Code 창에서 Assemble 로 코드 수정 -> 파일로는 못 만듦, offset 이 존재하지 않기 때문(PE파일을 통해 알 수 있음)