forked from MagnetForensics/Hibr2Bin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHiber.h
192 lines (157 loc) · 4.78 KB
/
Hiber.h
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/*++
Copyright (c) 2007 - 2017, Matthieu Suiche
Copyright (c) 2012 - 2014, MoonSols Limited
Copyright (c) 2015 - 2017, Comae Technologies FZE
Module Name:
Hiber.h
Abstract:
This module contains the internal structure definitions and APIs used by
the Hibr2Bin.
Author:
Matthieu Suiche (m) 1-April-2016
Revision History:
--*/
#ifndef __HIBER_DEF_H__
#define __HIBER_DEF_H__
#define HIBR_IMAGE_SIGNATURE 'RBIH'
#define HIBR_IMAGE_SIGNATURE_RESTORE 'RTSR'
#define HIBR_IMAGE_SIGNATURE_WAKE 'EKAW'
#define HIBR_IMAGE_SIGNATURE_BREAK 'PKRB'
#define HIBR_IMAGE_SIGNATURE_HORM 'MROH'
#define MAX_HIBER_PAGES (16)
#define PAGE_SIZE 0x1000
#define MAX_COMPRESSED_BLOCK (MAX_HIBER_PAGES * PAGE_SIZE)
//
// NT 5.0, NT 5.1, NT 6.0 x86
//
typedef struct _PO_MEMORY_RANGE_ARRAY_LINK32
{
ULONG Next;
ULONG NextTable;
ULONG CheckSum;
ULONG EntryCount;
} PO_MEMORY_RANGE_ARRAY_LINK32, *PPO_MEMORY_RANGE_ARRAY_LINK32;
typedef struct _PO_MEMORY_RANGE_ARRAY_RANGE32
{
ULONG PageNo;
ULONG StartPage;
ULONG EndPage;
ULONG CheckSum;
} PO_MEMORY_RANGE_ARRAY_RANGE32, *PPO_MEMORY_RANGE_ARRAY_RANGE32;
typedef struct _MEMORY_RANGE_ARRAY
{
PO_MEMORY_RANGE_ARRAY_LINK32 Link;
PO_MEMORY_RANGE_ARRAY_RANGE32 Range[ANYSIZE_ARRAY];
} PO_MEMORY_RANGE_ARRAY32, *PPO_MEMORY_RANGE_ARRAY32;
//
// NT 5.2 x64
//
typedef struct _PO_MEMORY_RANGE_ARRAY_LINK64_NT52
{
ULONGLONG Next;
ULONGLONG NextTable;
ULONG Checksum;
ULONG EntryCount;
ULONGLONG Reserved;
} PO_MEMORY_RANGE_ARRAY_LINK64_NT52, *PPO_MEMORY_RANGE_ARRAY_LINK64_NT52;
typedef struct _PO_MEMORY_RANGE_ARRAY_RANGE64_NT52
{
ULONGLONG PageNo;
ULONGLONG StartPage;
ULONGLONG EndPage;
ULONGLONG CheckSum;
} PO_MEMORY_RANGE_ARRAY_RANGE64_NT52, *PPO_MEMORY_RANGE_ARRAY_RANGE64_NT52;
typedef struct _MEMORY_RANGE_ARRAY64_NT52
{
PO_MEMORY_RANGE_ARRAY_LINK64_NT52 Link;
PO_MEMORY_RANGE_ARRAY_RANGE64_NT52 Range[ANYSIZE_ARRAY];
} PO_MEMORY_RANGE_ARRAY64_NT52, *PPO_MEMORY_RANGE_ARRAY64_NT52;
//
// NT 6.0 x64
//
typedef struct _PO_MEMORY_RANGE_ARRAY_LINK64
{
ULONGLONG Next;
ULONGLONG NextTable;
ULONG EntryCount;
ULONG Padding;
} PO_MEMORY_RANGE_ARRAY_LINK64, *PPO_MEMORY_RANGE_ARRAY_LINK64;
typedef struct _PO_MEMORY_RANGE_ARRAY_RANGE64
{
ULONGLONG StartPage;
ULONGLONG EndPage;
} PO_MEMORY_RANGE_ARRAY_RANGE64, *PPO_MEMORY_RANGE_ARRAY_RANGE64;
typedef struct _MEMORY_RANGE_ARRAY64
{
PO_MEMORY_RANGE_ARRAY_LINK64 Link;
PO_MEMORY_RANGE_ARRAY_RANGE64 Range[ANYSIZE_ARRAY];
} PO_MEMORY_RANGE_ARRAY64, *PPO_MEMORY_RANGE_ARRAY64;
//
// NT 6.1 x86
//
typedef struct _PO_MEMORY_RANGE_ARRAY_RANGE32_NT61 {
ULONG StartPage;
ULONG EndPage;
} PO_MEMORY_RANGE_ARRAY_RANGE32_NT61, *PPO_MEMORY_RANGE_ARRAY_RANGE32_NT61;
typedef struct _PO_MEMORY_RANGE_ARRAY_LINK32_NT61 {
ULONG NextTable;
ULONG EntryCount;
} PO_MEMORY_RANGE_ARRAY_LINK32_NT61, *PPO_MEMORY_RANGE_ARRAY_LINK32_NT61;
typedef struct _PO_MEMORY_RANGE_ARRAY32_NT61 {
PO_MEMORY_RANGE_ARRAY_LINK32_NT61 Link;
PO_MEMORY_RANGE_ARRAY_RANGE32_NT61 Range[ANYSIZE_ARRAY];
} PO_MEMORY_RANGE_ARRAY32_NT61, *PPO_MEMORY_RANGE_ARRAY32_NT61;
//
// NT 6.1 x64
//
typedef struct _PO_MEMORY_RANGE_ARRAY_RANGE64_NT61 {
ULONGLONG StartPage;
ULONGLONG EndPage;
} PO_MEMORY_RANGE_ARRAY_RANGE64_NT61, *PPO_MEMORY_RANGE_ARRAY_RANGE64_NT61;
typedef struct _PO_MEMORY_RANGE_ARRAY_LINK64_NT61 {
ULONGLONG NextTable;
ULONG EntryCount;
ULONG Padding;
} PO_MEMORY_RANGE_ARRAY_LINK64_NT61, *PPO_MEMORY_RANGE_ARRAY_LINK64_NT61;
typedef struct _PO_MEMORY_RANGE_ARRAY64_NT61 {
PO_MEMORY_RANGE_ARRAY_LINK64_NT61 Link;
PO_MEMORY_RANGE_ARRAY_RANGE64_NT61 Range[ANYSIZE_ARRAY];
} PO_MEMORY_RANGE_ARRAY64_NT61, *PPO_MEMORY_RANGE_ARRAY64_NT61;
//
// Windows 8 32bits
//
typedef enum _HIBER_COMPRESS_METHOD
{
XpressFast = 0,
XpressMax = 1,
XpressHuffFast = 2,
XpressHuffMax = 3
} HIBER_COMPRESS_METHOD;
typedef struct _PO_MEMORY_RANGE32_NT62
{
ULONG PageCount : 4;
ULONG StartPage : 28;
} PO_MEMORY_RANGE32_NT62, *PPO_MEMORY_RANGE32_NT62;
typedef struct _PO_MEMORY_RANGE_TABLE32_NT62
{
ULONG RangeCount : 8;
ULONG CompressedSize : 22;
ULONG CompressMethod : 2;
PO_MEMORY_RANGE32_NT62 Range[ANYSIZE_ARRAY];
} PO_MEMORY_RANGE_TABLE32_NT62, *PPO_MEMORY_RANGE_TABLE32_NT62;
#pragma pack(push) // push current alignment to stack
#pragma pack(4) // set alignment to 1 byte boundary
typedef struct _PO_MEMORY_RANGE64_NT62
{
ULONG64 PageCount : 4;
ULONG64 StartPage : 28;
} PO_MEMORY_RANGE64_NT62, *PPO_MEMORY_RANGE64_NT62;
typedef struct _PO_MEMORY_RANGE_TABLE64_NT62
{
ULONG RangeCount : 8;
ULONG CompressedSize : 22;
ULONG CompressMethod : 2;
PO_MEMORY_RANGE64_NT62 Range[ANYSIZE_ARRAY];
} PO_MEMORY_RANGE_TABLE64_NT62, *PPO_MEMORY_RANGE_TABLE64_NT62;
#pragma pack(pop)
#endif