Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions code/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
config KERNEL_HACK
tristate "Kernel Hack Driver"
default y
help
This is the kernel hack driver for android system.

3 changes: 2 additions & 1 deletion code/Makefile
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
obj-m += rwProcMem_module.o
obj-m += testok.o
testok-y := memory.o process.o verify.o entry.o
54 changes: 0 additions & 54 deletions code/api_proxy.h

This file was deleted.

19 changes: 19 additions & 0 deletions code/comm.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
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,
};
109 changes: 109 additions & 0 deletions code/entry.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/miscdevice.h>
#include "comm.h"
#include "memory.h"
#include "process.h"
#include "verify.h"

#define DEVICE_NAME "kernel_hack"

int dispatch_open(struct inode *node, struct file *file)
{
return 0;
}

int dispatch_close(struct inode *node, struct file *file)
{
return 0;
}

long dispatch_ioctl(struct file* const file, unsigned int const cmd, unsigned long const arg)
{
COPY_MEMORY cm;
MODULE_BASE mb;
char key[0x100] = {0};
char name[0x100] = {0};
static bool is_verified = false;

if (cmd == OP_INIT_KEY && !is_verified) {
if (copy_from_user(key, (void __user*)arg, sizeof(key)-1) != 0) {
return -1;
}
is_verified = init_key(key, sizeof(key));
}
if (is_verified == false) {
return -1;
}
switch (cmd) {
case OP_READ_MEM:
{
if (copy_from_user(&cm, (void __user*)arg, sizeof(cm)) != 0) {
return -1;
}
if (read_process_memory(cm.pid, cm.addr, cm.buffer, cm.size) == false) {
return -1;
}
}
break;
case OP_WRITE_MEM:
{
if (copy_from_user(&cm, (void __user*)arg, sizeof(cm)) != 0) {
return -1;
}
if (write_process_memory(cm.pid, cm.addr, cm.buffer, cm.size) == false) {
return -1;
}
}
break;
case OP_MODULE_BASE:
{
if (copy_from_user(&mb, (void __user*)arg, sizeof(mb)) != 0
|| copy_from_user(name, (void __user*)mb.name, sizeof(name)-1) !=0) {
return -1;
}
mb.base = get_module_base(mb.pid, name);
if (copy_to_user((void __user*)arg, &mb, sizeof(mb)) !=0) {
return -1;
}
}
break;
default:
break;
}
return 0;
}

struct file_operations dispatch_functions = {
.owner = THIS_MODULE,
.open = dispatch_open,
.release = dispatch_close,
.unlocked_ioctl = dispatch_ioctl,
};

struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = &dispatch_functions,
};

int __init driver_entry(void)
{
int ret;
printk("[+] driver_entry");
ret = misc_register(&misc);
return ret;
}

void __exit driver_unload(void)
{
printk("[+] driver_unload");
misc_deregister(&misc);
}

module_init(driver_entry);
module_exit(driver_unload);

MODULE_DESCRIPTION("Linux Kernel H4cking.");
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Rog");
82 changes: 0 additions & 82 deletions code/hide_procfs_dir.h

This file was deleted.

78 changes: 0 additions & 78 deletions code/linux_kernel_api.h

This file was deleted.

Loading
Loading