반응형 리버싱4 [Reversing] 윈도우 커널 모드와 사용자 모드 커널 모드와 사용자 모드 윈도우는 두 가지의 프로세서 권한 수준을 이용하는데, 커널 모드와 사용자 모드를 사용한다. 커널 모드에서 동작하는 운영체제와 하드웨어 드라이버를 제외하면 거의 모든 코드는 사용자 모드에서 동작한다. 사용자 모드에서 각 프로세스는 개별 메모리, 보안 권한과 자원을 소유하고 있다. 사용자 모드 프로그램이 유효하지 않은 명령이나 종료를 수행하면 윈도우는 프로그램의 모든 자원을 반환하고 종료시킨다. 사용자 모드에서 하드웨어 조작이나 커널 내의 상태를 변경하려면 윈도우 API를 사용해야 한다. 커널 구조를 변경하는 윈도우 API 함수를 호출할 때 커널로 호출을 하게 된다. 디스어셈블리에서 SYSENTER, SYSCALL, INT 0x2E 명령어가 보이면 커널 호출이 진행 중이라는 .. 2021. 6. 1. [Reversing] 윈도우 리버싱(프로세스, 스레드, 뮤턴트, 서비스) 개요 1. 프로세스 윈도우는 리소스를 관리할 목적으로 컨테이너로 프로세스를 사용하고, 프로그램이 상호 간섭하지 않게 분리한다. 윈도우 시스템은 특정 시점에 적어도 20~30개의 프로세스가 CPU, 파일 시스템, 메모리, 하드웨어를 포함한 동일한 자원을 공유하면서 동작한다. 신규 프로세스 생성 악성코드가 신규 프로세스를 생성할 때 가장 흔히 사용하는 함수는 CreateProcess다. 이 함수의 많은 파라미터를 통해 호출자(caller)는 프로세스 생성에 관한 세부적인 제어가 가능하다. 악성코드는 보통 CreateProcess를 이용해 함수 하나만을 호출하는 간단한 원격 쉘을 생성한다. CreateProcess 함수의 파라미터 중 하나는 STARTUPINFO 구조체인데, 이는 프로세스의 표준 입출력과 표준 에러.. 2021. 5. 21. [Reversing] 리버싱을 위한 윈도우 API 기초 1. 헝가리안 표기법 윈도우는 일반적으로 API 함수 식별자로 헝가리안 표기법(Hungarian Notation)을 사용한다. 이 표기법은 변수 탑입을 식별하기 용이하게 하는 접두사 명명 스키마(prefix naming scheme)를 이용한다. 32비트 unsigned 정수, DWORD를 가진 변수는 dw로 시작한다. 타입과 접두사 설명 WORD (w) 16비트 unsigned 값 DWORD (dw) 더블 WORD, 32비트 unsigned 값 Handles (H) 객체 레퍼런스. 핸들에 저장된 정보는 문서화돼 있지 않으며 윈도우 API에 의해서만 조작될 수 있다. 대표적인 예로 HModule, HInstance, HKey를 들 수 있다. Long Pointer (LP) 다른 유형을 가리키는 포인터. .. 2021. 5. 14. [Reversing] 어셈블리어 기본 명령어 조건 명령어 cmp det, src zf cf dst = src 1 0 dst src 0 0 test 명령어는 and 명령어와 동일하지만, 수반한 오퍼랜드가 명령어에 의해 수정되지 않는다. test 명령어는 플래그만 설정한다. 자신과 테스트하는 행위는 NULL 값을 확인하는데 종종 사용되며 EAX를 0과 비교할 수 있지만 test eax, eax 구문은 좀 더 적은 바이트와 적은 CPU 사이클을 사용한다. 조건 점프 명령어 설명 jz loc ZF = 1이면 특정 위치로 점프 jnz loc ZF = 0이면 특정 위치로 점프 Je loc jz와 동일하지만 주로 cmp 명령어 이후에 사용. 목적지 오퍼랜드와 소스 오퍼랜드가 동일할 때 점프 jne loc jnz와 동일하지만 주로 c.. 2021. 5. 13. 이전 1 다음 반응형