BlackBone
Windows memory hacking library
 All Classes Functions
NativeSubsystem.h
1 #pragma once
2 
3 #include "../Include/Winheaders.h"
4 #include "../Include/Types.h"
5 #include "../Include/Macro.h"
6 
7 #include <string>
8 #include <list>
9 #include <vector>
10 #include <unordered_set>
11 #include <cassert>
12 
13 
14 namespace blackbone
15 {
16 
17 enum CreateThreadFlags
18 {
19  NoThreadFlags = 0x0000,
20  CreateSuspended = 0x0001,
21  NoDllCallbacks = 0x0002,
22  HideFromDebug = 0x0004,
23 };
24 
25 ENUM_OPS(CreateThreadFlags)
26 
27 class Native
28 {
29 public:
30  typedef std::list<ModuleData> listModules;
31 
32 public:
33  BLACKBONE_API Native( HANDLE hProcess, bool x86OS = false );
34  BLACKBONE_API ~Native();
35 
36  BLACKBONE_API inline const Wow64Barrier& GetWow64Barrier() const { return _wowBarrier; }
37 
46  virtual NTSTATUS VirualAllocExT( ptr_t& lpAddress, size_t dwSize, DWORD flAllocationType, DWORD flProtect );
47 
55  virtual NTSTATUS VirualFreeExT( ptr_t lpAddress, size_t dwSize, DWORD dwFreeType );
56 
65  virtual NTSTATUS VirtualProtectExT( ptr_t lpAddress, DWORD64 dwSize, DWORD flProtect, DWORD* flOld );
66 
75  virtual NTSTATUS ReadProcessMemoryT( ptr_t lpBaseAddress, LPVOID lpBuffer, size_t nSize, DWORD64 *lpBytes = nullptr );
76 
85  virtual NTSTATUS WriteProcessMemoryT( ptr_t lpBaseAddress, LPCVOID lpBuffer, size_t nSize, DWORD64 *lpBytes = nullptr );
86 
93  virtual NTSTATUS VirtualQueryExT( ptr_t lpAddress, PMEMORY_BASIC_INFORMATION64 lpBuffer );
94 
101  virtual NTSTATUS VirtualQueryExT( ptr_t lpAddress, MEMORY_INFORMATION_CLASS infoClass, LPVOID lpBuffer, size_t bufSize );
102 
110  virtual NTSTATUS QueryProcessInfoT( PROCESSINFOCLASS infoClass, LPVOID lpBuffer, uint32_t bufSize );
111 
119  virtual NTSTATUS SetProcessInfoT( PROCESSINFOCLASS infoClass, LPVOID lpBuffer, uint32_t bufSize );
120 
130  virtual NTSTATUS CreateRemoteThreadT( HANDLE& hThread, ptr_t entry, ptr_t arg, CreateThreadFlags flags, DWORD access = THREAD_ALL_ACCESS );
131 
138  virtual NTSTATUS GetThreadContextT( HANDLE hThread, _CONTEXT64& ctx );
139 
146  virtual NTSTATUS GetThreadContextT( HANDLE hThread, _CONTEXT32& ctx );
147 
154  virtual NTSTATUS SetThreadContextT( HANDLE hThread, _CONTEXT64& ctx );
155 
162  virtual NTSTATUS SetThreadContextT( HANDLE hThread, _CONTEXT32& ctx );
163 
169  virtual ptr_t getPEB( _PEB32* ppeb );
170 
176  virtual ptr_t getPEB( _PEB64* ppeb );
177 
183  virtual ptr_t getTEB( HANDLE hThread, _TEB32* pteb );
184 
190  virtual ptr_t getTEB( HANDLE hThread, _TEB64* pteb );
191 
198  BLACKBONE_API size_t EnumRegions( std::list<MEMORY_BASIC_INFORMATION64>& results, bool includeFree = false );
199 
206  BLACKBONE_API size_t EnumModules( listModules& result, eModSeachType search = LdrList, eModType mtype = mt_default );
207 
212  BLACKBONE_API inline ptr_t minAddr() const { return 0x10000; }
213 
218  BLACKBONE_API inline ptr_t maxAddr() const { return 0x7FFFFFFEFFFF; }
219 
224  BLACKBONE_API inline uint32_t pageSize() const { return _pageSize; }
225 private:
226 
232  template<typename T>
233  size_t EnumModulesT( Native::listModules& result );
234 
240  size_t EnumSections( listModules& result );
241 
247  size_t EnumPEHeaders( listModules& result );
248 
249 protected:
250  HANDLE _hProcess; // Process handle
251  Wow64Barrier _wowBarrier; // WOW64 barrier info
252  uint32_t _pageSize;
253 };
254 
255 }
Definition: NativeSubsystem.h:27
Definition: NativeStructures.h:174
BLACKBONE_API ptr_t maxAddr() const
Get highest possible valid address value
Definition: NativeSubsystem.h:218
Definition: NativeStructures.h:82
BLACKBONE_API ptr_t minAddr() const
Get lowest possible valid address value
Definition: NativeSubsystem.h:212
Definition: Types.h:31
Definition: NativeStructures.h:498
Definition: AsmHelper32.cpp:6
Definition: NativeStructures.h:468
BLACKBONE_API uint32_t pageSize() const
Get page size
Definition: NativeSubsystem.h:224