LD_PRELOAD HOOCK В журнале только несколько команд на Ubuntu 20.04.3 LTSLinux

Ответить
Anonymous
 LD_PRELOAD HOOCK В журнале только несколько команд на Ubuntu 20.04.3 LTS

Сообщение Anonymous »

Я написал этот следующий код: < /p>

Код: Выделить всё

#define _GNU_SOURCE
#include 
#include 
#include 
#include 
#include 
#include 

// Log file location
#define LOG_FILE "/home/maifee/cmd-log.log"

// Function to get the process name
void get_process_name(pid_t pid, char *name, size_t len) {
char path[256];
snprintf(path, sizeof(path), "/proc/%d/comm", pid);
FILE *file = fopen(path, "r");
if (file) {
fgets(name, len, file);
name[strcspn(name, "\n")] = 0; // Remove newline character
fclose(file);
} else {
strncpy(name, "unknown", len);
}
}

// Override execve
int execve(const char *filename, char *const argv[], char *const envp[]) {
// Get the original execve function
int (*original_execve)(const char *, char *const[], char *const[]) = dlsym(RTLD_NEXT, "execve");

// Log the command to a file
FILE *log_file = fopen(LOG_FILE, "a");
if (log_file) {
pid_t pid = getpid();
pid_t ppid = getppid();
char pname[256], ppname[256];
get_process_name(pid, pname, sizeof(pname));
get_process_name(ppid, ppname, sizeof(ppname));
// print time [2025.12.30 23:59:59]
time_t t = time(NULL);
struct tm tm = *localtime(&t);
fprintf(log_file, "[%d.%d.%d %d:%d:%d] ", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
fprintf(log_file, "PID: %d (%s), PPID: %d (%s), Command: ", pid, pname, ppid, ppname);
for (int i = 0; argv[i]; i++) {
fprintf(log_file, "%s ", argv[i]);
}
fprintf(log_file, "\n");
fclose(log_file);
}

// NEVER call execve directly, it will cause an infinite loop
// NEVER remove this line
return original_execve(filename, argv, envp);
}
< /code>
и я составляю ее, используя следующую команду: < /p>
gcc -shared -fPIC -o ld_preload_hook.so ld_preload_hook.c -ldl
, а затем я установил переменную среды LD_PRELOAD на путь файла общего объекта:

Код: Выделить всё

export LD_PRELOAD=$PWD/ld_preload_hook.so
< /code>
А потом я перезагружаю оболочку: < /p>
source ~/.zshrc
source ~/.bashrc
< /code>
и он генерирует файл журнала, что здорово. Но проблема в том, что он просто генерирует эти несколько конкретных команд: < /p>
[2025.2.25 1:30:43] PID: 8062 (lesspipe), PPID: 8061 (lesspipe), Command: basename /usr/bin/lesspipe
[2025.2.25 1:30:43] PID: 8064 (lesspipe), PPID: 8063 (lesspipe), Command: dirname /usr/bin/lesspipe
[2025.2.25 1:32:39] PID: 9658 (lesspipe), PPID: 9657 (lesspipe), Command: basename /usr/bin/lesspipe
[2025.2.25 1:32:39] PID: 9660 (lesspipe), PPID: 9659 (lesspipe), Command: dirname /usr/bin/lesspipe
< /code>
Это все, что я попробовал перезагрузить свое устройство, снова перезапустив оболочку. Ничего не работает. Пробовал ls 
, dir и многие другие команды.
Но результат остается прежним. Я использую Ubuntu 20.04.3 LTS. Я не уверен, что делаю не так. Кто -нибудь может мне помочь в этом? Я просто изучаю крючки, внедряя, прямо сейчас.

Подробнее здесь: https://stackoverflow.com/questions/794 ... 0-04-3-lts
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»