본문 바로가기
책/리버싱핵심원리

리버싱 핵심 원리_1

by 맑은청이 2020. 4. 18.
728x90
반응형

개발도구(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파일을 통해 알 수 있음)

728x90
반응형

' > 리버싱핵심원리' 카테고리의 다른 글

리버싱핵심원리_2  (0) 2020.04.18