일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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# xml 파싱
- Hover Action
- Python GetProcAddress
- 악성코드
- 파이썬
- c# 파일명 변경
- c# 프로그램 종료
- VMware
- c# 파일 읽기쓰기
- PPT Malware
- 파이썬 외부프로그램 실행
- 한글 악성코드
- 파워쉘
- TCP Socket
- PowerShell
- vbscript
- c# 파일 IO
- anti vm
- 최순실 악성코드
- hex2bin
- FTP Server/Client
- UDP Server/Client
- Mouse Over
- c# 디렉토리 파일 조회
- TCP Server/Client
- Universal ShellCode
- pdf 악성코드
- Python Win32 API
- Python LoadLibrary
- c# 외부 프로그램 실행
- Today
- Total
목록VMware (6)
그냥저냥
1. %SYSTEMROOT%\drivers 에 파일 존재 유무 체크 (FindFirstFile / FindNextFile) => hsfs.sys vmhgfs.sys prleth.sys prlfs.sys prlmouse.sys prlvideo.sys prl_pv32.sys vpc-s3.sys vmsrvc.sys vmx86.sys vmnet.sys 2. GetModuleHandle 함수로 프로세스에 아래 DLL이 로드되었는지 확인 => dbghelp SbieDll api_log dir_watch pstorec 3-1. 레지스트리 값 체크 (서비스) 경로 : HKLN \ SYSTEM \ ControlSet001 \ Services [VMware] => vmicheartbeat vmicvss vmicshutdo..
- Host OS 환경의 CPU 속도와 Guest OS 환경의 CPU 속도가 100% 동일하지는 않을 것이라는 생각에서 시작 - RDTSC 명령을 이용하여 프로세스 실행 순간부터 2개의 RDTSC 명령을 만나는 순간까지 CPU 사이클의 차이를 확인 - Host OS 512 int main(){ unsigned long a,b,c; __asm{ push eax push ebx rdtsc // 첫 번째 CPU 사이클 계산 -> eax 에 저장 mov b, eax mov ebx, eax rdtsc // 두 번째 CPU 사이클 계산 mov c, eax sub eax, ebx mov a, eax pop eax pop ebx } printf(“첫번째 RDTSC CPU 사이클 : %..
- I/O 포트는 Host OS와 Guest OS간 데이터를 주고 받을 수 있는 일종의 통신 채널- I/O 를 위한 명령어로는 IN / OUT 명령이 존재함 - I/O 명령은 EFLAGS 레지스터를 이용하여 실행 --> EFLAGS 레지스터는 커널 레벨에서만 동작 (사용자 레벨에서 사용시 익셉션 발생) - Guest OS 에서는 IN 명령어 사용시 익셉션이 발생되지않음 + EBX 레지스터에 "VMXh" 라는 고유한 값이 저장됨 (VMXh = 가상 환경에서 IN 명령어의 특별한 기능으로 인해 생성되는 Guest/Host 간의 고유한 통신채널) - eax = VMXh , ecx = Command , dx = VX 설정 후 in eax, dx 명령 실행 시 EBX 로 "VMXh" 저장됨
- CPU 레지스터의 Trap Flag bit = On 상태에서 명령어 실행 ==> Trap Flag bit = Off됨 - 특정 VM에서는 Trap Flag bit 상태가 계속 On 으로 되어있음 --> 구별 - 탐지방법으로는 부적절
CPUID 명령은 CPU를 식별하기 위한 명령이며, CPUID 명령 실행 후 ECX 레지스터 값을 Shift 함으로써 가상환경 여부를 탐지한다. Intel IA32 Manual에 따르면 EAX가 1일때 CPUID 명령 실행 시 ECX 의 31번째 Bit는 항상 0 이어야만 한다 nop xor ecx, ecx xor eax, eax inc eax push ebx cpuid pop ebx sar ecx, 1Fh test cl,1 CPUID 기반 탐지의 단점 - Guest OS의 CPU가 하이퍼 스레드를 사용하는 경우 탐지방법으로는 부적절하게 된다. - CPU가 하이퍼 스레드를 지원하면서 Guest OS 의 CPU 갯수를 늘리면, Guest OS의 CPU는 하이퍼 스레드를 사용하도록 자동으로 설정된다.
IDT (Interrupt Descriptor Table) 인터럽트 처리에 관련된 Descriptor 들을 모아둔 내부 데이터 구조체프로세스당 하나의 IDTR 레지스터가 존재하며, 2개의 OS (Host/Guest) 가 구동중일 경우 Guest OS의 IDT는 재배치된다IDTR의 내용을 확인하면 IDT의 메모리상 위치를 알 수 있으며, SIDT (Store Interrupt Descriptor Table) 명령으로 IDTR의 내용을 가져올 수 있다 void main(){ unsigned char idtr[6]; int i; __asm{ sidt idtr } printf("IDT : 0x"); for(i=5; i>1; i--) printf("%2.2x", idtr[i]); } 코드 실행 시 Host OS에..