일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TCP Server/Client
- TCP Socket
- 최순실 악성코드
- FTP Server/Client
- Python Win32 API
- c# 프로그램 종료
- PowerShell
- hex2bin
- anti vm
- c# 디렉토리 파일 조회
- 파이썬 외부프로그램 실행
- 악성코드
- 한글 악성코드
- Python LoadLibrary
- PPT Malware
- pdf 악성코드
- vbscript
- 파이썬
- Mouse Over
- VMware
- c# xml 파싱
- c# 파일명 변경
- UDP Server/Client
- 파워쉘
- Python GetProcAddress
- c# 외부 프로그램 실행
- c# 파일 IO
- Hover Action
- c# 파일 읽기쓰기
- Universal ShellCode
- Today
- Total
목록분류 전체보기 (50)
그냥저냥
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에..
DKOM (Direct Kernel Object Manipulation) 윈도우 OS는 프로세스 관리를 위해 EPROCESS 구조체를 이용한 이중 연결리스트를 사용한다.각 프로세스에 대한 정보는 EPROCESS 라는 구조체로 관리되며, 중요하게 봐야할 필드는 아래와 같다. (Windows XP 기준) - 0x084 (UniqueProcessId) : 각 프로세스 별로 부여된 PID - 0x088 (ActiveProcessLinks) : 프로세스 링크에 대한 이중연결리스트 - 0x174 (ImageFileName) : 프로세스 이름 Flink : 다음 프로세스에 대한 EPROCESS 구조체를 가리킴Blink : 이전 프로세스의 EPROCESS 구조체를 가리킴 Flink와 Blink의 값을 적절히 바꾸면 아..
예전에 RootKit 관련 교육자료를 만들면서 그렸던 BootKit 동작 과정 그림 좀더 자세한건 나중에;;
인텔 CPU에서 Ring 이라는 용어를 이용하여 메모리에 접근할 수 있는 특권을 구분함CPU는 SW코드와 메모리 각각에 어떤 Ring이 할당되는지 끊임없이 관리하며, Ring간 접근 제한을 수행한다.모든 프로그램은 Ring 번호를 할당받으며, 자신이 할당받은 Ring 보다 낮은 번호의 Ring 영역에 접근할 수 없다. (대부분 OS에 의해 차단됨) Ring3 프로그램이 Ring0 영역에 접근하기 위해서는 권한 이행이 필요하며, Native API를 이용하면 Ring0 영역에 접근이 가능하다. ex> OpenProcess 함수 사용시 Native API인 NtOpenProcess 접근 과정 (타 사이트를 참고하여 그림 작성)
* 전체 동작과정 요약 (**오타 : -k ==> -i) ● -n 파라미터 동작 (배경화면 변조)-n 파라미터가 입력된 경우 분기문을 통해 Thread를 생성한다. 해당 Thread는 Sleep함수에 의해 5분 뒤에 실행된다. Thread의 Main 함수는 프로세스 메모리 영역에 존재하는 암호화된 데이터를 복호화 시켜서 파일로 저장한다.파일 저장경로는 %WINDOWS%\walls.bmp 이며, 복호화된 파일 헤더 확인시 그림파일인 것을 알 수 있다. ▶ 그림파일 복호화 이후 SystemParametersInfo 함수의 ACTION 파라미터에 SPI_SETDESKWALLPAPER 옵션으로 배경화면의 그림을 변경한다. ● -d 파라미터 동작 (로컬 호스트 파일 삭제)-d 파라미터 입력시 로컬 호스트 파일 삭..
● 동작 요약 ● 중복실행 방지를 위해 CreateFileMapping/OpenFileMapping API 이용 - 특정 식별자 "JO840112-CRAS8468-11150923-PCI8273V" 를 가진 파일의 존재 여부를 통해 중복 실행 체크 ● 백신 솔루션 존재 여부 확인 - 아래 경로에 특정 파일이 존재하는지 체크하여 백신 솔루션의 설치 여부 확인 - 경로 : C:\Windows\Temp\~v3.log ● 백신 프로세스 강제 종료 - 명령어 #1 : taskkill /F /IM pasvc.exe - 명령어 #2 : taskkill /F /IM clisvc.exe * /F 옵션 : 명시된 프로세스 강제 종료 * /IM 옵션 : 종료할 프로세스의 이미지 이름 명시 ● 운영체제 정보 조회 ● MBR 로..
from socket import * s = socket(AF_INET, SOCK_STREAM) s.bind(("127.0.0.1", 9000)) s.listen(1) conn, addr = s.accept() recv_data = conn.recv(1024) print 'Received Data : ' , recv_data s.close() from socket import * s = socket(AF_INET, SOCK_STREAM) s.connect(('127.0.0.1', 9000)) s.send('Send Data\n') s.close()
import hashlib import sys md5Str = hashlib.md5(sys.argv[1].encode("UTF-8")) data = (md5Str.hexdigest()) print 'File Name',sys.argv[1] print '[Result] : ',data