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 
129  virtual NTSTATUS CreateRemoteThreadT( HANDLE& hThread, ptr_t entry, ptr_t arg, CreateThreadFlags flags );
130 
137  virtual NTSTATUS GetThreadContextT( HANDLE hThread, _CONTEXT64& ctx );
138 
145  virtual NTSTATUS GetThreadContextT( HANDLE hThread, _CONTEXT32& ctx );
146 
153  virtual NTSTATUS SetThreadContextT( HANDLE hThread, _CONTEXT64& ctx );
154 
161  virtual NTSTATUS SetThreadContextT( HANDLE hThread, _CONTEXT32& ctx );
162 
168  virtual ptr_t getPEB( _PEB32* ppeb );
169 
175  virtual ptr_t getPEB( _PEB64* ppeb );
176 
182  virtual ptr_t getTEB( HANDLE hThread, _TEB32* pteb );
183 
189  virtual ptr_t getTEB( HANDLE hThread, _TEB64* pteb );
190 
197  BLACKBONE_API size_t EnumRegions( std::list<MEMORY_BASIC_INFORMATION64>& results, bool includeFree = false );
198 
205  BLACKBONE_API size_t EnumModules( listModules& result, eModSeachType search = LdrList, eModType mtype = mt_default );
206 
211  BLACKBONE_API inline ptr_t minAddr() const { return 0x10000; }
212 
217  BLACKBONE_API inline ptr_t maxAddr() const { return 0x7FFFFFFEFFFF; }
218 
223  BLACKBONE_API inline uint32_t pageSize() const { return _pageSize; }
224 private:
225 
231  template<typename T>
232  size_t EnumModulesT( Native::listModules& result );
233 
239  size_t EnumSections( listModules& result );
240 
246  size_t EnumPEHeaders( listModules& result );
247 
248 protected:
249  HANDLE _hProcess; // Process handle
250  Wow64Barrier _wowBarrier; // WOW64 barrier info
251  uint32_t _pageSize;
252 };
253 
254 }
Definition: NativeSubsystem.h:27
Definition: NativeStructures.h:163
BLACKBONE_API ptr_t maxAddr() const
Get highest possible valid address value
Definition: NativeSubsystem.h:217
Definition: NativeStructures.h:71
BLACKBONE_API ptr_t minAddr() const
Get lowest possible valid address value
Definition: NativeSubsystem.h:211
Definition: Types.h:31
Definition: NativeStructures.h:442
Definition: AsmHelper32.cpp:6
Definition: NativeStructures.h:412
BLACKBONE_API uint32_t pageSize() const
Get page size
Definition: NativeSubsystem.h:223