본문 바로가기

리버싱(Reversing)9

[악성코드 분석]#4 어셈블리어와 디스어셈블리 - part(3/3) 이 글의 모든 내용은 책 '악성코드 분석 시작하기'를 스스로 공부하며 정리한 내용임을 밝힙니다. 함수 1. 함수의 구성 프로그래밍 언어를 배워본 사람이라면 누구나 알겠지만, 함수는 다음과 같이 구성되어 있다. ● 함수명: 함수의 이름이자 함수 코드의 시작 주소를 나타낸다. ● 매개변수: 함수가 호출될 때, 전달될 수 있는 값을 의미한다. 일반적으로 함수 입장에서는 매개변수, 실제 함수가 호출되어 전달되는 값은 인수라고 한다. ● 지역변수: 함수 내부에서 새로 정의되는 변수이다. 함수명을 제외하고는 매개변수, 지역변수는 모두 스택(Stack)이란 공간에 저장된다. 2. 스택(Stack) 스택은 후입선출 구조로 구성되어 있는 저장공간이다. 현재 스택의 주소를 가리키는 레지스터가 esp. 스택에 저장되어 있는.. 2023. 8. 10.
[악성코드 분석]#4 어셈블리어와 디스어셈블리 - part(2/3) 이 글의 모든 내용은 책 '악성코드 분석 시작하기'를 스스로 공부하며 정리한 내용임을 밝힙니다. CPU 레지스터 어셈블리어를 공부하면 반드시 알아야할 CPU 레지스터는 굉장히 다양하고 여러가지 이름을 가진 레지스터들이 등장해서 처음 어셈블리어를 입문한 사람의 골머리를 썩힌다... 이 기회에 책에 없는 내용이라도 정리해본다. 다음 나열된 것들은 리버싱에 주로 사용되는 레지스터이다. 1. 범용 레지스터 - 데이터와 주소를 모두 저장할 수 있는 레지스터로 제일 많이 사용되고 자주 등장하는 레지스터이다. 레지스터 이름(64bit/32bit) 설명 rax / eax 사칙연산에 사용되는 레지스터로 어떤 계산의 결과값을 주로 저장한다. rbx / ebx 주로 메모리 주소를 저장하는데 사용된다. rcx / ecx 주로.. 2023. 7. 11.
[악성코드 분석]#4 어셈블리어와 디스어셈블리 - part(1/3) 이 글의 모든 내용은 책 '악성코드 분석 시작하기'를 스스로 공부하며 정리한 내용임을 밝힙니다. 컴퓨터 프로그램 기초 1. 데이터 단위 ● 바이트(Byte): 1byte = 8bit → 16 진수 2개(00~FF) ● 워드(Word): 2byte ● 더블워드(Dword): 4byte ● 쿼드워드(Qword): 8byte ※ 워드(Word)는 본래 동작하는 CPU의 최소 연산 단위를 의미한다. 예를 들면, 32bit OS에서의 워드는 32bit, 64bit OS에서의 워드는 64bit가 되어야 한다. 그런데 왜 워드의 단위는 2byte일까? 과거 Intel에서 16bit 운영체제에서 사용하던 워드의 단위는 당연히 16bit였을 것이다. 그런데 기술이 발전하면서 32bit 운영체제의 컴퓨터가 필요에 의해 등.. 2023. 6. 28.
[악성코드 분석]#3 동적 분석 - part(2/2) 이 글의 모든 내용은 책 '악성코드 분석 시작하기'를 스스로 공부하며 정리한 내용임을 밝힙니다. DLL(Dynamic Link Library) DLL은 그 자체로서 실행할 수 없지만, 다른 프로그램(실행 파일 또는 DLL)에서 사용할 수 있는 함수를 담고 있는 모듈이다. 즉, DLL 파일은 여러가지 함수들을 익스포트(Export)하고 있으며, 다른 파일들은 해당 DLL 파일의 익스포트된 함수들을 임포트(Import)하여 사용한다. CFF 익스플로러 도구를 사용하면 임포트한 DLL 파일과 그 DLL 파일이 익스포트하고 있는 함수를 볼 수 있다. Import Directory를 클릭하면 해당 파일이 어떤 DLL을 임포트하고 각 DLL이 익스포트하는 함수의 목록을 확인할 수 있다. [악성코드 분석]#3 동적 .. 2023. 6. 21.