일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c언어
- 소프트맥스함수
- 백준
- 스트림암호
- 파이썬신경망
- 달고나bof
- BOJ
- 8086CPU레지스터
- 밑바닥부터시작하는딥러닝
- 버퍼오버플로우
- 활성화함수파이썬
- 신경망파이썬
- 알고리즘
- 파이썬
- BOF
- 신경망
- 백준알고리즘
- C언어알고리즘
- 정보보안
- 항등함수
- 보안
- 신경망 학습
- C알고리즘
- 딥러닝
- C언어 알고리즘
- 머신러닝
- FTZlevel10
- 인공지능
- 신경망구현
- 딥러닝파이썬
- Today
- Total
HeeJ's
[02] 악성코드 분석_3주차 본문
리버싱(reverse engineering) : 역공학
프로그램을 소스코드 단계로 되돌려서 분석하는 것
(악성코드도 완성된 프로그램이기 때문에 분석하려면 리버싱이 필요)
C(소스코드) -> 01011(기계어)
: 컴파일
01011(기계어) -> 어셈블리 코드
: 디스 어셈블
어셈블리 코드는 주로 IA-32(Manual)를 사용함(Intel 32bit)
기본 형태 : 명령어(opcode) + 인자(operand 1~2)
CPU가 사용하는 변수(32bit)
레지스터 | 역할 | 레지스터 | 역할 |
EAX(Accumulator) | 각종 연산에 사용 가장 많이 쓰이는 변수 주로 리턴 값을 저장 |
ESI, EDI (source Index, destinationIndex) |
문자열이나 각종 반복 데이터를 처리 메모리를 옮기는데 사용 |
EDX(data) | 각종 연산에 사용 | ESP | 스택 포인터 |
ECX(Count) | for문의 i 역할 미리 값을 정해놓고 0이 될 때까지 진행 변수로 사용 가능 |
EBP | 베이스 포인터 |
EBX | 목적이 없는 레지스터 공간이 필요할 때 덤으로 사용 (ex. temp) |
EIP | 인스트럭션 포인터 |
ex.
C : return 0;
=
ASM : MOV EAX, 0
RETN
레지스트리 단위
32bit | 16bit | 상위 8bit | 하위 8bit |
EAX | AX | AH | AL |
EDX | DX | DH | DL |
ECX | CX | CH | CL |
EBX | BX | BH | BL |
main 함수를 실행하다가 다른 함수를 실행할 때 : CALL
call이 끝난 후, main으로 돌아오는데, 돌아올 주소를 return에 저장해 둠
함수 호출 규약
1. cdecl
- 항상 call 문의 다음 줄을 살펴 스택을 정리하는 곳을 체크
- call 이후 add esp, 8 과 같이 스택을 보정
- add esp, 8 그리고 push 문에 2개
-> 4byte 파라미터가 두 개임을 추측할 수 있다.
2. stdcall
- main 함수 내부에서 스택을 처리하지 않음
- retn 8을 사용하여 스택 처리
- Win32 API는 stdcall 방식을 사용
3. fastcall
- 파라미터가 2개 이하일 경우, 인자를 push로 넣지 않고 ecx와 edx 레지스터 이용
- 레지스터(mov)를 이용하기에 메모리를 이용하는 것 보다 훨씬 빠름
- 함수 호출 전, edx와 ecx 레지스터에 값을 넣는 것을 보면 fastcall 규약 함수임을 짐작할 수 있음
- 주로 C++의 클래스에서 this 포인터로 이용
- 현재 객체의 포인터에 ecx에 전달하는 특징을 가짐
- 다음과 같이 ecx 포인터에 오프셋 번지를 더함
올리디버거 실습
실습 환경 : WinXP 32bit
올리디버거(ollydbg)
- Olly Yuschuk이 개발한 x86 디버거
- 무료, 편리함, 기능 확장을 위한 플러그 인
'<Information Security> > <Malware>' 카테고리의 다른 글
[06]악성코드분석_7주차 (0) | 2021.11.16 |
---|---|
[05]악성코드분석_6주차 (0) | 2021.11.10 |
[04]악성코드분석_5주차 (0) | 2021.11.03 |
[03]악성코드분석_4주차 (0) | 2021.10.06 |
[01] 악성코드 분석_2주차 (0) | 2021.09.21 |