Инъекция в процесс для обхода Nanomites
Вступление
После прочтения нескольких райтапов на реверс Nanomites ( метод антиотладки, при котором родительский процесс запускает дочерний, с которым постоянно обменивается информацией, что и затрудняет дебаг) понял, что проще всего с этим бороться при помощи инъекции в процесс с переопределением функции ptrace(мб не только ее). Проще всего это реализовать при помощи загрузки своей библиотеки через LD_PRELOAD.
Собсна, сами райтапы:
Пример инъекции в процесс через LD_PRELOAD
Код в main.c:
#include "stdio.h"
int main(){
puts("some message");
return 0;
}
Код lib.c:
#define _GNU_SOURCE
#include <stdio.h>
#include "dlfcn.h"
int (*default_puts)(const char* message);
int puts(const char *message)
{
printf("OUR NEW MESSAGE: %s\n", message);
return 0;
}
__attribute__((constructor)) static void Constructor(void) {
default_puts = dlsym(RTLD_NEXT, "puts");
default_puts("constructor called\n");
}
__attribute__((destructor)) static void Destructor(void) {
default_puts("destructor called\n");
}
Компиляция и запуск:
$ gcc lib.c -o mylib.so -fPIC -shared -ldl
$ gcc main.c -o f
$ LD_PRELOAD=./mylib.so ./f
constructor
OUR NEW MESSAGE: some message
destructor
Last modified on 2022-05-29