Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- rm main.so
- echo '#define _GNU_SOURCE
- #include <dlfcn.h>
- #include <stdio.h>
- #include <stdarg.h>
- #include <stdlib.h>
- void dump(const char* text, int fildes, const void* buf, ssize_t size)
- {
- ssize_t i;
- if(size==-1)
- {
- printf("%s(%i)=-1\n\n",text, fildes);
- return;
- }
- printf("%s(%i)=%zu\n ",text, fildes, size);
- for(i=0;i<size;i++)
- printf("%02X ", ((const char*)buf)[i]);
- printf("\n\n");
- }
- ssize_t write(int fildes, const void *buf, size_t nbyte)
- {
- static ssize_t (*real_write)(int fildes, const void *buf, size_t nbyte) = 0;
- ssize_t result;
- if(!real_write) real_write = dlsym(RTLD_NEXT, "write");
- result = real_write(fildes, buf, nbyte);
- dump("write", fildes, buf, result);
- return result;
- }
- ssize_t read(int fildes, void *buf, size_t nbyte)
- {
- static ssize_t (*real_read)(int fildes, void *buf, size_t nbyte) = 0;
- ssize_t result;
- if(!real_read) real_read = dlsym(RTLD_NEXT, "read");
- result = real_read(fildes, buf, nbyte);
- dump("read", fildes, buf, result);
- return result;
- }
- int open(const char *filename, int flags, ...)
- {
- static int (*real_open)(const char *, int, mode_t) = 0;
- int result;
- va_list ap;
- mode_t mode;
- if (!real_open) real_open = dlsym(RTLD_NEXT, "open");
- va_start(ap, flags);
- mode = va_arg(ap, mode_t);
- va_end(ap);
- result = real_open(filename, flags, mode);
- printf("open(%s)=%i\n\n", filename, result);
- return result;
- }
- ' | gcc -fPIC -shared -Wl,-soname,main.so -o main.so -xc -
- LD_PRELOAD=$PWD/main.so putty >out.log
Advertisement
Add Comment
Please, Sign In to add comment