forked from Jiang-Night/Kernel_driver_hack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdriver.hpp
More file actions
executable file
·119 lines (100 loc) · 1.79 KB
/
driver.hpp
File metadata and controls
executable file
·119 lines (100 loc) · 1.79 KB
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
#include <sys/fcntl.h>
#include <sys/ioctl.h>
#define DEVICE_NAME "/dev/JiangNight"
class c_driver
{
private:
int fd;
pid_t pid;
typedef struct _COPY_MEMORY
{
pid_t pid;
uintptr_t addr;
void *buffer;
size_t size;
} COPY_MEMORY, *PCOPY_MEMORY;
typedef struct _MODULE_BASE
{
pid_t pid;
char *name;
uintptr_t base;
} MODULE_BASE, *PMODULE_BASE;
enum OPERATIONS
{
OP_INIT_KEY = 0x800,
OP_READ_MEM = 0x801,
OP_WRITE_MEM = 0x802,
OP_MODULE_BASE = 0x803,
};
public:
c_driver()
{
fd = open(DEVICE_NAME, O_RDWR);
if (fd == -1)
{
printf("[-] open driver failed\n");
}
}
~c_driver()
{
if (fd > 0)
close(fd);
}
void initialize(pid_t pid)
{
this->pid = pid;
}
bool read(uintptr_t addr, void *buffer, size_t size)
{
COPY_MEMORY cm;
cm.pid = this->pid;
cm.addr = addr;
cm.buffer = buffer;
cm.size = size;
if (ioctl(fd, OP_READ_MEM, &cm) != 0)
{
return false;
}
return true;
}
bool write(uintptr_t addr, void *buffer, size_t size)
{
COPY_MEMORY cm;
cm.pid = this->pid;
cm.addr = addr;
cm.buffer = buffer;
cm.size = size;
if (ioctl(fd, OP_WRITE_MEM, &cm) != 0)
{
return false;
}
return true;
}
template <typename T>
T read(uintptr_t addr)
{
T res;
if (this->read(addr, &res, sizeof(T)))
return res;
return {};
}
template <typename T>
bool write(uintptr_t addr, T value)
{
return this->write(addr, &value, sizeof(T));
}
uintptr_t get_module_base(char *name)
{
MODULE_BASE mb;
char buf[0x100];
strcpy(buf, name);
mb.pid = this->pid;
mb.name = buf;
if (ioctl(fd, OP_MODULE_BASE, &mb) != 0)
{
return 0;
}
return mb.base;
}
};
static c_driver *driver = new c_driver();