Common API used in Malware
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
원시 소켓 | WinAPI 소켓 |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
레지스트리 | 파일 | 서비스 |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
이름 |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
함수 이름 | 어셈블리 명령어 |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [프로세스가 실행 중인지 확인] | |
CreateFileW/A [파일 존재 여부 확인] |
이름 | |
---|---|
VirtualAlloc | 메모리 할당 (패커) |
VirtualProtect | 메모리 권한 변경 (패커가 섹션에 실행 권한 부여) |
ReadProcessMemory | 외부 프로세스에 주입 |
WriteProcessMemoryA/W | 외부 프로세스에 주입 |
NtWriteVirtualMemory | |
CreateRemoteThread | DLL/프로세스 주입... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
함수 이름 |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
GetAsyncKeyState() -- 키 로깅
SetWindowsHookEx -- 키 로깅
GetForeGroundWindow -- 실행 중인 창 이름 가져오기 (또는 브라우저에서 웹사이트)
LoadLibrary() -- 라이브러리 가져오기
GetProcAddress() -- 라이브러리 가져오기
CreateToolhelp32Snapshot() -- 실행 중인 프로세스 목록
GetDC() -- 스크린샷
BitBlt() -- 스크린샷
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- 인터넷 접근
FindResource(), LoadResource(), LockResource() -- 실행 파일의 리소스 접근
다른 프로세스 내에서 임의의 DLL 실행
악성 DLL을 주입할 프로세스 찾기: CreateToolhelp32Snapshot, Process32First, Process32Next
프로세스 열기: GetModuleHandle, GetProcAddress, OpenProcess
프로세스 내에 DLL 경로 쓰기: VirtualAllocEx, WriteProcessMemory
악성 DLL을 로드할 프로세스 내에서 스레드 생성: CreateRemoteThread, LoadLibrary
사용할 다른 함수: NTCreateThreadEx, RtlCreateUserThread
정상 Windows API 호출 없이 악성 DLL 로드. DLL은 프로세스 내에 매핑되며, 가져오기 주소를 해결하고, 재배치를 수정하고, DllMain 함수를 호출합니다.
프로세스에서 스레드를 찾아 악성 DLL을 로드하게 만듭니다.
대상 스레드 찾기: CreateToolhelp32Snapshot, Thread32First, Thread32Next
스레드 열기: OpenThread
스레드 일시 중지: SuspendThread
피해자 프로세스 내에 악성 DLL 경로 쓰기: VirtualAllocEx, WriteProcessMemory
라이브러리를 로드하는 스레드 재개: ResumeThread
휴대용 실행 주입: 실행 파일이 피해자 프로세스의 메모리에 기록되고 거기서 실행됩니다.
악성코드는 프로세스의 메모리에서 합법적인 코드를 언맵하고 악성 바이너리를 로드합니다.
새 프로세스 생성: CreateProcess
메모리 언맵: ZwUnmapViewOfSection, NtUnmapViewOfSection
프로세스 메모리에 악성 바이너리 쓰기: VirtualAllocEc, WriteProcessMemory
진입점을 설정하고 실행: SetThreadContext, ResumeThread
SSDT (시스템 서비스 설명자 테이블)은 커널 함수(ntoskrnl.exe) 또는 GUI 드라이버(win32k.sys)를 가리켜 사용자 프로세스가 이러한 함수를 호출할 수 있도록 합니다.
루트킷은 이러한 포인터를 자신이 제어하는 주소로 수정할 수 있습니다.
IRP (I/O 요청 패킷)은 한 구성 요소에서 다른 구성 요소로 데이터 조각을 전송합니다. 커널의 거의 모든 것이 IRP를 사용하며 각 장치 객체는 후킹할 수 있는 자체 함수 테이블을 가지고 있습니다: DKOM (직접 커널 객체 조작)
IAT (가져오기 주소 테이블)은 종속성을 해결하는 데 유용합니다. 이 테이블을 후킹하여 호출될 코드를 하이재킹할 수 있습니다.
EAT (내보내기 주소 테이블) 후킹. 이 후킹은 유저랜드에서 수행될 수 있습니다. 목표는 DLL에 의해 내보내진 함수를 후킹하는 것입니다.
인라인 후킹: 이 유형은 달성하기 어렵습니다. 이는 함수 자체의 코드를 수정하는 것을 포함합니다. 아마도 이의 시작 부분에 점프를 넣는 방식으로.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)