bloc_note
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
bloc_note [2024/12/17 13:10] – admin | bloc_note [2025/03/24 15:27] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
< | < | ||
- | # | + | <g id=" |
- | #include <stdlib.h> | + | <ellipse cx="475.825" |
- | #include <string.h> | + | < |
- | # | + | < |
- | + | < | |
- | #define MAX_SCRIPTS 100 | + | < |
- | #define MAX_SCRIPT_LENGTH 256 | + | </ |
- | + | </g> | |
- | // Chemin fixe vers le fichier des scripts valides | + | </g> |
- | #define VALID_SCRIPTS_FILE | + | |
- | + | ||
- | // Liste des scripts valides par défaut | + | |
- | const char *default_scripts[] | + | |
- | const size_t default_scripts_count | + | |
- | + | ||
- | // Liste externe pour stocker les scripts supplémentaires | + | |
- | char external_scripts[MAX_SCRIPTS][MAX_SCRIPT_LENGTH]; | + | |
- | size_t external_scripts_count | + | |
- | + | ||
- | // Fonction pour vérifier que le programme est lancé par un script shell | + | |
- | void check_parent_process() { | + | |
- | char path[256]; | + | |
- | char parent_executable[256] = {0}; | + | |
- | FILE *file; | + | |
- | + | ||
- | // Obtenir le PPID (Parent Process ID) | + | |
- | pid_t ppid = getppid(); | + | |
- | + | ||
- | // Lire le nom du processus parent dans / | + | |
- | snprintf(path, sizeof(path), | + | |
- | file = fopen(path, | + | |
- | if (!file) { | + | |
- | perror("Error: Unable to check parent process" | + | |
- | exit(1); | + | |
- | } | + | |
- | + | ||
- | if (fgets(parent_executable, sizeof(parent_executable), file)) { | + | |
- | // Supprimer le saut de ligne | + | |
- | parent_executable[strcspn(parent_executable, " | + | |
- | } | + | |
- | fclose(file); | + | |
- | + | ||
- | // Vérifier si le processus parent est un shell (bash, sh, etc.) | + | |
- | if (strcmp(parent_executable, " | + | |
- | fprintf(stderr, | + | |
- | exit(1); | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | // Fonction pour charger les scripts valides depuis un fichier | + | |
- | int load_external_scripts() { | + | |
- | FILE *file = fopen(VALID_SCRIPTS_FILE, | + | |
- | if (!file) { | + | |
- | perror("Error opening the valid scripts file"); | + | |
- | return 1; | + | |
- | } | + | |
- | + | ||
- | char line[MAX_SCRIPT_LENGTH]; | + | |
- | while (fgets(line, sizeof(line), file)) { | + | |
- | line[strcspn(line, " | + | |
- | + | ||
- | if (external_scripts_count >= MAX_SCRIPTS) { | + | |
- | fprintf(stderr, " | + | |
- | fclose(file); | + | |
- | return 1; | + | |
- | } | + | |
- | + | ||
- | strncpy(external_scripts[external_scripts_count], line, MAX_SCRIPT_LENGTH - 1); | + | |
- | external_scripts[external_scripts_count][MAX_SCRIPT_LENGTH - 1] = ' | + | |
- | external_scripts_count++; | + | |
- | } | + | |
- | + | ||
- | fclose(file); | + | |
- | return 0; | + | |
- | } | + | |
- | + | ||
- | // Fonction pour vérifier si le script est valide | + | |
- | int is_valid_script(const char *script) { | + | |
- | for (size_t i = 0; i < default_scripts_count; | + | |
- | if (strcmp(script, default_scripts[i]) == 0) { | + | |
- | return 1; | + | |
- | } | + | |
- | } | + | |
- | for (size_t i = 0; i < external_scripts_count; | + | |
- | if (strcmp(script, external_scripts[i]) == 0) { | + | |
- | return 1; | + | |
- | } | + | |
- | } | + | |
- | return 0; | + | |
- | } | + | |
- | + | ||
- | // Fonction pour décoder en base64 | + | |
- | void decode_base64(const char *input) { | + | |
- | char command[512]; | + | |
- | snprintf(command, sizeof(command), "echo %s | base64 -d", input); | + | |
- | system(command); | + | |
- | } | + | |
- | + | ||
- | int main(int argc, char *argv[]) { | + | |
- | // Vérifier si le programme est lancé par un script shell | + | |
- | check_parent_process(); | + | |
- | + | ||
- | // Charger la liste externe des scripts valides | + | |
- | if (load_external_scripts() != 0) { | + | |
- | return 1; | + | |
- | } | + | |
- | + | ||
- | // Vérifier que la variable d' | + | |
- | const char *script = getenv("SCRIPT" | + | |
- | if (script | + | |
- | fprintf(stderr, | + | |
- | return 1; | + | |
- | } | + | |
- | + | ||
- | // Vérifier si le script est valide | + | |
- | if (!is_valid_script(script)) { | + | |
- | fprintf(stderr, " | + | |
- | | + | |
- | } | + | |
- | + | ||
- | | + | |
- | if (argc < 2) { | + | |
- | fprintf(stderr, | + | |
- | return 1; | + | |
- | } | + | |
- | + | ||
- | | + | |
- | decode_base64(argv[1]); | + | |
- | printf(" | + | |
- | + | ||
- | return 0; | + | |
- | } | + | |
</ | </ |
bloc_note.1734437431.txt.gz · Dernière modification : 2024/12/17 13:10 de admin