본문 바로가기
반응형

리버싱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.
반응형