일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 debugging
- pwnable
- apphelp.dll
- pcap packet
- packet capture
- Network Byte Order
- arudino
- C언어 패킷캡쳐
- pcap packet capture
- 바이트 오더
- ucrtbase.dll
- vcruntime140.dll
- Msvcrt.dll
- Windows Kernel Driver
- 네트워크 바이트 오더
- 개발 환경 준비
- Windows
- 시스템해킹
- 윈도우 커널 디버깅
- vcruntime.dll
- 윈도우 커널
- IAT Hooking
- 윈도우 커널 드라이버
- 개발하기
- HackCTF
- Windows Kernel
- Windows Kernel Debug
- 포너블
- hacking
- 해킹
- Today
- Total
목록C (17)
미친해커
이더넷 프로토콜이란? 이더넷은 전세계적으로 사용되는 기술 규격이다. OSI 모델 데이터 링크 계층에서 MAC 패킷과 프로토콜을 정의한다. 또한 네트워크에서 각 기기가 48비트 길이의 고유 MAC 주소를 이용하여 데이터를 주고 받을 수 있도록 만들어졌다. 이더넷 헤더 이더넷 헤더의 사이즈는 총 14바이트으로 이루어져 있으며, 6바이트의 도착지(Destination) 그리고 출발지(Source) MAC 주소, 2바이트의 Ethernet Type이 존재한다. Ethernet Type에는 다음 계층의 프로토콜이 무엇인지 기록된다. 구조체 C언어를 기준으로 구조체는 아래와 같이 정의할 수 있으며 필요한 경우 구조체 바이트 정렬이 필요하다. typedef struct _NETWORK_ETHERNET_HEADER {..
pcap이란?pcap(packet capture)는 네트워크 프로그래밍을 위한 라이브러리다. 유닉스 계열의 운영 체제들은 libpcap 라이브러리에 pcap이 포함되어 있어 libpcap을 이용해 네트워크 프로그래밍을 할 수 있다. 윈도우는 WinPcap이라고 하는 libpcap의 포팅된 버전을 사용한다. 네트워크의 패킷들을 잡을 수 있으며 일반적으로는 볼수 없는 헤더들의 데이터도 모두 캡처하여 볼 수 있다. pcap API는 C언어로 작성되어 있어 여러 언어에서 사용할 수 있다는 장점이 있다. (해당 블로그에서는 Unix 계열의 운영 체제들을 기준으로 실습한다)libpcap 설치하기블로그에서는 Ubuntu와 Kali Linux에서 프로그래밍 실습을 진행한다. 해당 운영 체제에는 기본적으로 libpc..
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도 존재한다. 하지만 내부적으로는 대부분 해당 커널 함수를 사용한다.) 물론 여기까지 윈도우 시스템에 대해서 공부한 사람이랑 그냥 커널 함수를 쓰고 말겠지만 해당 커널 함수를 사용하면 다른 정보도 같이 구해지기 때문에 불필요한 공간을 사용하게 된다. 그렇기에 해당 함수..