| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Windows Kernel Debug
- hacking
- 바이트 오더
- ucrtbase.dll
- 윈도우 커널
- arudino
- 해킹
- packet capture
- windows kernel debugging
- pcap packet
- Windows Kernel
- pwnable
- 개발 환경 준비
- IAT Hooking
- HackCTF
- apphelp.dll
- vcruntime.dll
- C언어 패킷캡쳐
- pcap packet capture
- 포너블
- vcruntime140.dll
- Windows Kernel Driver
- Windows
- Network Byte Order
- 윈도우 커널 드라이버
- 개발하기
- 윈도우 커널 디버깅
- 시스템해킹
- Msvcrt.dll
- 네트워크 바이트 오더
- Today
- Total
목록전체 글 (119)
미친해커
Code Injection 기법은 사실상 ShellCode Injection 이라고 불러도 될 만큼 동작 방식이 매우 비슷하다. 하지만 우리는 주입할 코드를 ShellCode가 아닌 C언어 함수로 작성해 주입할 것이다. 1. 주입할 함수 작성 /* 주입되는 코드는 CreateRemoteThread API를 통해 실행되기 때문에 아래와 같은 형식을 반드시 지켜줘야 한다. (함수명은 관계 없음) */ DWORD WINAPI ThreadProc(LPVOID lpParameter) { // 계산기를 실행 WinExec("calc.exe", SW_SHOW); } 2. 코드 인젝션 함수 작성 BOOL CodeInjection(DWORD PID) { // 타겟 프로세스의 핸들 획득 HANDLE hProcess = O..
코드 인젝션 (Code Injection) 정의 Code Injection이란 실행 가능한 코드를 대상 메모리 영역으로 삽입하여 실행하는 것을 말한다. 코드 인젝션 활용 영역 프로그램의 기능 개선 및 버그 패치 API 후킹 일반 응용 프로그램에 특별한 목적의 코드를 추가 악성코드에서의 활용 코드 인젝션 주요 동작 흐름 Windows API / Kernel Function 프로세스 권한 획득 : OpenProcess() / NtOpenProcess() 메모리 공간 할당 : VirtualAllocEx() / NtAllocateVirtualMemory() 코드 삽입 : WriteProcessMemory() / NtWriteVirtualMemory() 코드 실행 : CreateRemoteThread() / Nt..
GetModuleFileName GetModuleFileName 함수는 인자로 들어온 HMODULE의 전체 경로를 반환해주는 함수이다. 즉 HMODULE(ImageBase)는 가지고 있지만 해당 HMODULE이 어떤 DLL인지 모를때 사용하면 유용한 함수이다. GetRemoteModuleFileName DWORD GetRemoteModuleFileNameA(HANDLE ProcessHandle, HMODULE hModule, LPSTR lpFilename, DWORD nSize) { ZeroMemory(lpFilename, nSize); wchar_t Filename[MAX_PATH]; DWORD Size = GetRemoteModuleFileNameW(ProcessHandle, hModule, File..
GetProcAddress GetProcAddress 함수는 kernel32.dll에 정의되어 있는 함수이다. 인자로 HMODULE과 함수의 이름을 주고 호출하게되면 해당 DLL에서 Export 하는 함수들 중 인자로 넣은 함수의 이름과 같은 이름의 함수의 주소를 반환해준다. 이 함수도 마찬가지로 현재 프로세스를 기준으로 하게된다. 하지만 굳이 이 함수까지 구현한 이유는 DLL Injection과 같은 기술을 사용할 때 혹시라도 kernel32.dll의 ImageBase가 다르거나 특정 함수의 주소를 알아야할 때가 있을 것같아 해당 함수도 Remote 버전을 구현하게 되었다. GetRemoteProcAddress FARPROC GetRemoteProcAddress(HANDLE ProcessHandle, ..
GetModuleHandle GetModuleHandle 함수는 kernel32.dll와 kernelbase.dll에 정의되어있는 함수이다. 해당 함수는 현재 프로세스에 로드된 DLL 중 인자로 넣은 DLL 이름의 HMODULE을 반환하는 함수이다. HMODULE은 과거 윈도우에서 다른 용도로 만들어졌지만 현재 윈도우에서는 DLL의 ImageBase를 담는 자료형이 되었다. 실제로 GetModuleHandle 함수를 이용해 특정 DLL의 HMODULE을 반환 받으면 해당 값은 해당 DLL의 ImageBase 인 것을 확인할 수 있다. 이 또한 현재 프로세스가 아닌 다른 프로세스에 로드된 DLL의 ImageBase를 구하기 위해 Remote 버전을 구현하게 되었다. GetRemoteModuleHandle ..
RtlGetCurrentPeb RtlGetCurrentPeb 함수는 ntdll.dll의 함수이다. 해당 함수는 현재 프로세스의 PEB 구조체의 주소를 반환해준다. 해당 함수 또한 현재 프로세스의 PEB 주소만 구할 수 있고 다른 프로세스의 PEB 구조체의 주소를 구하기 위해서는 NtQueryInformationProcess 라고 하는 커널 함수를 사용해야한다. (물론 해당 커널 함수를 사용해 PEB 구조체의 주소를 구해주는 다른 WINAPI도 존재한다. 하지만 내부적으로는 대부분 해당 커널 함수를 사용한다.) 물론 여기까지 윈도우 시스템에 대해서 공부한 사람이랑 그냥 커널 함수를 쓰고 말겠지만 해당 커널 함수를 사용하면 다른 정보도 같이 구해지기 때문에 불필요한 공간을 사용하게 된다. 그렇기에 해당 함수..