static vs. dynamic analysis
·
reversing
정적 분석: 프로그램을 실행시키지 않고 분석하는 방법 장점- 프로그램의 전체 구조를 파악하기 쉬움. 프로그램이 어떤 함수로 구성됐고 함수들은 서로 어떤 호출 관계를 갖는지, 어떤 API를 사용하고 어떤 문자열을 포함하는지 등을 종합적으로 살펴볼 수 있음.- 분석 제약에서도 비교적 자유로움.- 바이러스와 같은 악성 프로그램으로부터 안전함. 바이러스를 동적 분석할 경우, 바이러스를 실제로 실행해야 하므로 자신의 컴퓨터가 감염될 우려가 있음. 단점- 프로그램이 난독화되면 분석이 어려워짐. 난독화가 적용되면 프로그램의 코드가 심하게 변형돼서 이를 읽고, 실행 흐름을 파악하기가 어려워짐.- 다양한 동적 요소를 고려하기 어려움. 어떤 함수가 특정 시점에 정확히 어떤 인자와 어떤 전역 변수를 가지고 실행될지는 정적..
Binary
·
reversing
프로그램: 컴퓨터가 실행해야 할 명령어의 집합, 바이너리라고도 불림전처리: 소스코드가 컴파일에 필요한 형식으로 가공되는 과정컴파일: 소스코드를 어셈블리어로 번역하는 과정어셈블: 어셈블리 코드를 기계어로 번역하고 실행 가능한 형식으로 변형하는 과정링크: 여러 개의 목적 파일을 하나로 묶고 필요한 라이브러리와 연결해주는 과정디스어셈블: 바이너리를 어셈블리어로 번역하는 과정디컴파일: 바이너리를 고급 언어로 번역하는 과정
범용 레지스터, 플래그 레지스터, 스택 프레임
·
reversing
general register 범용 레지스터reg size: 4 byte종류: EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP, EIPEAX, EBX, ECX, EDX → 산술 명령어에서 상수나 변수값이 저장되는 용도EAX는 결과값을 저장하거나 오퍼랜드(피연산자)를 축적ECX는 while, for 반복문을 사용할 때 ECX loop count -1 감소ESI, EDI, EBP, ESP은 메모리 주소를 저장하는 포인터로 사용EBP는 ESP 값을 저장ESP는 스택 메모리 주소를 저장EIP는 CPU가 처리할 명령어 주소EAX: 4byteAX: 2byteAH(high): 1byteAL(low): 1byteflag register 플래그 레지스터명령어의 실행 여부를 결정함명령 수행에 따라 t..
리버싱 개념, 크랙과 패치, 바이트 오더링
·
reversing
리버싱컴퓨터 용어 X, 역공학Reverse Engineering == Reverse Code Engineering리버싱 분석 방법정적 분석정적 파일의 겉모습을 분석IDA(정적/동적)파일을 실행하지 않고 분석동적 분석동적 파일 깊이 들어가서 분석하고 관찰Cheat Engine, Olly dbg, x64dbg 파일을 실행하고 분석하는 방법코드소스코드ex) printf(”hello world”);Hex codeassembly codeex) moc eax, ebx패치와 크랙패치: 프로세스의 메모리를 변경하는 것크랙: 패치와 비슷하지만 비도덕적인 메모리 변경프로그램 빌드 과정: 전처리 → 컴파일 → 어셈블 → 링크실습) 디버깅의 목표Hello World 실행파일을 디버깅하여 어셈블리 언어로 변환하고 main함수를..