반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- vcruntime140.dll
- hacking
- apphelp.dll
- windows kernel debugging
- 시스템해킹
- 바이트 오더
- Msvcrt.dll
- Windows Kernel Driver
- Windows Kernel
- 윈도우 커널 드라이버
- vcruntime.dll
- 개발 환경 준비
- C언어 패킷캡쳐
- IAT Hooking
- 윈도우 커널
- arudino
- pwnable
- 네트워크 바이트 오더
- Network Byte Order
- HackCTF
- ucrtbase.dll
- pcap packet
- 윈도우 커널 디버깅
- pcap packet capture
- Windows Kernel Debug
- packet capture
- Windows
- 포너블
- 해킹
- 개발하기
Archives
- Today
- Total
미친해커
[C] Rlibloaderapi.h - GetRemotePeb 본문
반응형
RtlGetCurrentPeb
RtlGetCurrentPeb 함수는 ntdll.dll의 함수이다. 해당 함수는 현재 프로세스의 PEB 구조체의 주소를 반환해준다. 해당 함수 또한 현재 프로세스의 PEB 주소만 구할 수 있고 다른 프로세스의 PEB 구조체의 주소를 구하기 위해서는 NtQueryInformationProcess 라고 하는 커널 함수를 사용해야한다. (물론 해당 커널 함수를 사용해 PEB 구조체의 주소를 구해주는 다른 WINAPI도 존재한다. 하지만 내부적으로는 대부분 해당 커널 함수를 사용한다.)
물론 여기까지 윈도우 시스템에 대해서 공부한 사람이랑 그냥 커널 함수를 쓰고 말겠지만 해당 커널 함수를 사용하면 다른 정보도 같이 구해지기 때문에 불필요한 공간을 사용하게 된다. 그렇기에 해당 함수를 사용하여 정확하게 PEB 구조체의 주소만 구해주는 함수를 제작하였다.
GetRemotePeb
PVOID GetRemotePeb(HANDLE ProcessHandle)
{
PROCESS_BASIC_INFORMATION pbi = { 0, };
NtQueryInformationProcess(ProcessHandle, ProcessBasicInformation, &pbi, sizeof(PROCESS_BASIC_INFORMATION), NULL);
#ifdef _WIN64
BOOL bWow64Process;
IsWow64Process(ProcessHandle, &bWow64Process);
return bWow64Process ? (ULONG_PTR)pbi.PebBaseAddress + 0x1000 : pbi.PebBaseAddress;
// WOW64로 돌아가는 32bit 프로세스의 PEB 구조체의 주소는 0x1000을 더해줘야 한다. 원인은 모르겠다.
#else
return pbi.PebBaseAddress;
#endif
}
사용예시
#include <stdio.h>
#include "Rlibloaderapi.h"
int main()
{
DWORD PID;
printf("PID : ");
scanf("%d", &PID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
if (hProcess == NULL)
{
printf("OpenProcess Failed\n");
printf("GetLastError : %d\n", GetLastError());
return -1;
}
printf("PEB : 0x%p", GetRemotePeb(hProcess));
return 0;
}
반응형
'C > Remote libloaderapi.h' 카테고리의 다른 글
[C] Rlibloaderapi.h - GetRemoteModuleFileName (0) | 2022.02.17 |
---|---|
[C] Rlibloaderapi.h - GetRemoteProcAddress (0) | 2022.02.17 |
[C] Rlibloaderapi.h - GetModuleHandle (0) | 2022.02.17 |
[C] Remote libloaderapi.h 는 무엇인가... (0) | 2022.02.17 |
Comments