Bonjour,

J'ai suivis ce tutoriel pour comprendre l'injection de bibliothèque sous Linux : https://tiger-222.fr/?d=2013/04/09/1...random-crackme
Voici le code de mon hook qui est le même que sur le site :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
 
int strcmp(const char *str1, const char *str2) {
  printf("[Hook strcmp] str1 = %s\n", str1);
  printf("              str2 = %s\n", str2);
  typeof(strcmp)* function;
  function = dlsym(RTLD_NEXT, "strcmp");
  return (*function)(str1, str2);
}
Je bloque donc à l'étape 4. Quand il s'agit de lancer le crackme.
J'obtiens l'erreur suivante :
ERROR: ld.so: object '/tmp/libstrcmp.so' from LD_PRELOAD cannot be preloaded: ignored.
Pourtant, j'ai bien lancer la commande : export LD_PRELOAD=/tmp/libstrcmp.so
Par contre, quand je fais la commande : ls /tmp
Mon hook semble fonctionner, car j'obtiens les printf contenus dans le code précédent.

J'ai également fais un autre programme en C pour tester mon hook :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
#include<stdlib.h>
 
int main(){
  if(strcmp("test", "test")){
    printf("Test1\n");
  }
  else{
    printf("Test2\n");
  }
  return 0;
}
Quand je lance ce code, je n'ai aucun message d'erreurs, et j'obtiens tout le temps "Test2", sans pour autant avoir les printf de mon hook.

J'ai aussi fais un autre hook sur la fonction printf :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
 
int printf(const char *format, ...){
  exit(0);
}
Qui ne fonctionne pas non plus...

Si quelqu'un pouvait m'éclaircir, je débute sur le sujet.