Инъекция в процесс для обхода Nanomites

Вступление

После прочтения нескольких райтапов на реверс Nanomites ( метод антиотладки, при котором родительский процесс запускает дочерний, с которым постоянно обменивается информацией, что и затрудняет дебаг) понял, что проще всего с этим бороться при помощи инъекции в процесс с переопределением функции ptrace(мб не только ее). Проще всего это реализовать при помощи загрузки своей библиотеки через LD_PRELOAD.

Собсна, сами райтапы:

  1. Flareon 2020 task 10
  2. Justctf 2020 debug_me_if_you_can

Пример инъекции в процесс через 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

FULL POST HERE


Last modified on 2022-05-29