본문 바로가기
보안/악성코드

문자열 패치, 리틀 엔디안

by ByteGuard 2023. 3. 24.

문자열 패치: 리버싱을 통해 프로그램의 일부를 수정하는 것

패치를 하는 이유: 기존 응용 프로그램 버그 수정, 새로운 기능 추가

방법 1: 문자열 버퍼 직접 수정

Ctrl E

원본문자열보다 큰 문자열을 덮어쓸 때에는 그 뒤의 데이터를 훼손하지 않도록 조심

 

방법 2: 다른 메모리 영역에 새로운 문자열을 생성하여 전달: NULL Padding 영역에 문자열 입력

 Ctrl E + Assemble at ~

파일로 만들면 제대로 동작x (대응되는 파일 offset이 존재하지 않음)

 

유니코드: 2바이트

아스키코드: 1바이트

 

Ctrl G: ~로 가기

Ctrl E: 문자역 버퍼를 직접 수정

 

exe 파일로 저장하기

Copy to Excutable File → Save file (원본 파일과 같은 이름으로 저장하지 않도록 주의)


리틀 엔디안 표기법

바이트 오더링: 컴퓨터에서 메모리에 데이터를 저장하는 방식

 

빅 엔디언: 순서대로 표기

리틀 엔디언: 역순으로 저장 → Intel x86 CPU

 

main 찾기를 위한 단축기 복습

F2: BP

F7: step into

F8: step over


레지스터: CPU 내부에 존재하는 다목적 저장 공간

 

 

 

범용 세그먼트 - EAX, EBX, ECX, EDX: 주로 산술연산 명령어에서 상수/변수 값의 저장 용도로 많이 사용 

포인터 레지스터 - EBP, ESP, EIP

EBP, ESI, EDI, ESP - 메모리 주소 저장하는 포인터로 주로 사용

 

범용 레지스터

4byte 전체 사용 시: EAX

2byte 사용시: EAX의 하위 16bit 부분인 AX

 

플래그 레지스터 - ZF, OF, CF, SF

32비트(4바이트)

 


데이터 이동 명령어

mov: 목적지로 값을 저장

lea: 메모리 주소를 목적지에 저장

push/pop: 스택에 데이터를 넣음/꺼냄, EBP 감소/증가

 

 

 

 

실습 결과 사진

BYTE b = 0x12;

 

 

WORD w = 0x1234;

 

 

DWORD dw = 0x12345678;

 

 

char str[] = “abcde”;

 

 

 

'보안 > 악성코드' 카테고리의 다른 글

악성코드 동적 분석  (0) 2023.04.17
6주) 기초 정적 분석  (0) 2023.04.14
안티바이러스 스캐닝, MD5, 패킹/난독화 해제  (0) 2023.04.08
PE파일 분석, crackme  (0) 2023.03.30
리버싱 기초  (0) 2023.03.24