Skip to content

Commit

Permalink
embed kpayload
Browse files Browse the repository at this point in the history
  • Loading branch information
ChendoChap committed Jul 26, 2018
1 parent c80f858 commit 30e45a5
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 65 deletions.
6 changes: 2 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,14 @@
TARGET = payload.bin
KTARGET = kpayload.elf

all: clean $(TARGET) $(KTARGET)
all: clean $(KTARGET) $(TARGET)

$(TARGET):
cd payload && $(MAKE) -s
cp payload/$(TARGET) $(TARGET)

$(KTARGET):
cd kpayload && $(MAKE) -s
cp kpayload/$(KTARGET) $(KTARGET)
elfedit --output-type=DYN $(KTARGET)
cd kpayload && $(MAKE) -s && elfedit --output-type=DYN $(KTARGET)

.PHONY: clean
clean:
Expand Down
12 changes: 12 additions & 0 deletions payload/source/embed.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.section .rodata
.global kpayload
.type kpayload, @object
.align 4
kpayload:
.incbin "../kpayload/kpayload.elf"
kpayload_end:
.global kpayload_size
.type kpayload_size, @object
.align 4
kpayload_size:
.int kpayload_end - kpayload
65 changes: 4 additions & 61 deletions payload/source/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
#include "jkpatch.h"
#include "install.h"

extern uint8_t kpayload[];
extern int32_t kpayload_size;

// perfect for putty
void ascii_art(void *_printf) {
printf("\n\n");
Expand Down Expand Up @@ -79,60 +82,6 @@ void scesbl_patches(struct thread *td, uint64_t kernbase) {
//*(uint8_t *)(kernbase + 0x36057B) = 0;
}

int receive_payload(void **payload, size_t *psize) {
struct sockaddr_in server;
server.sin_len = sizeof(server);
server.sin_family = AF_INET;
server.sin_addr.s_addr = IN_ADDR_ANY;
server.sin_port = sceNetHtons(9023);
memset(server.sin_zero, 0, sizeof(server.sin_zero));

int servsock = sceNetSocket("jkpatch", AF_INET, SOCK_STREAM, 0);

sceNetBind(servsock, (struct sockaddr *)&server, sizeof(server));

sceNetListen(servsock, 128);

int client = sceNetAccept(servsock, NULL, NULL);
if (client < 0) {
return 1;
}

void *data = (void *)malloc(4096);
int recvlen = 0;
int length = 0;

while (1) {
recvlen = sceNetRecv(client, data + length, 4096, 0);
length += recvlen;

if (recvlen) {
void *ndata = (void *)realloc(data, length + 4096);
if (ndata) {
data = ndata;
} else {
break;
}
} else {
break;
}
}

if (payload) {
*payload = data;
} else {
free(data);
}

if (psize) {
*psize = length;
}

sceNetSocketClose(servsock);

return 0;
}

struct jkuap {
uint64_t sycall;
void *payload;
Expand Down Expand Up @@ -189,13 +138,7 @@ int jkpatch(struct thread *td, struct jkuap *uap) {
int _main(void) {
initKernel();
initLibc();
initNetwork();

size_t psize = 0;
void *payload = NULL;
receive_payload(&payload, &psize);

syscall(11, jkpatch, payload, psize);
syscall(11, jkpatch, kpayload, kpayload_size);

// this could race
/*if (payload) {
Expand Down

0 comments on commit 30e45a5

Please sign in to comment.