mirror of
https://github.com/rizinorg/shellforge4.git
synced 2026-11-08 07:58:45 -10:00
52 lines
2.5 KiB
C
Executable File
52 lines
2.5 KiB
C
Executable File
#define ADDR 0x08048590
|
|
char check[4] = "\x43\x23\x43\x54";
|
|
char shellcode[320] =
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
|
|
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90";
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
int pid = getppid();
|
|
int status;
|
|
if (ptrace(PTRACE_ATTACH, pid, 0, 0) != -1){
|
|
waitpid(pid, &status, 0);
|
|
int rword = ptrace(PTRACE_PEEKTEXT, pid, ADDR, 0);
|
|
char *word = (char *)&rword;
|
|
//The address that we want to overwrite has not been changed
|
|
if (word[0] == check[0] && word[1] == check[1] &&
|
|
word[2] == check[2] && word[3] == check[3]) {
|
|
int i = 0;
|
|
while (i < sizeof(shellcode)) {
|
|
ptrace(PTRACE_POKETEXT, pid, ADDR, (void *)((unsigned int *)shellcode)[i]);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
ptrace(PTRACE_DETACH, pid , 0, 0);
|
|
write(1, "YEEAAH\n", 7);
|
|
} else {
|
|
write(1, "OOOOOH\n", 7);
|
|
}
|
|
|
|
}
|