Thérapie codique
biohazard
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour,
Je voudrait savoir si on pourrait créer un programme qui modifie le code d'un autre programme? Avec ca, on pourrait faire de la "thérapie codique" (thérapie génique appliquée aux programmes informatiques), nan? Genre ajouter une instruction à plein de programmes en une fois, ou comparer un code et corriger les erreurs juste avec un programme? Est-ce que ca existe? Je sais ca parait impossible mais en s'attaquant directement au binaire ou en utilisant un assembleur ce serait faisable nan? Je voudrait aussi savoir quel bouts de code permettrait de faire ca (déja, choper le code du programme cible, ajouter le bout de code voulu et ensuite le réinsérer en mémoire à la place de l'ancien code du programme)?
Je voudrait savoir si on pourrait créer un programme qui modifie le code d'un autre programme? Avec ca, on pourrait faire de la "thérapie codique" (thérapie génique appliquée aux programmes informatiques), nan? Genre ajouter une instruction à plein de programmes en une fois, ou comparer un code et corriger les erreurs juste avec un programme? Est-ce que ca existe? Je sais ca parait impossible mais en s'attaquant directement au binaire ou en utilisant un assembleur ce serait faisable nan? Je voudrait aussi savoir quel bouts de code permettrait de faire ca (déja, choper le code du programme cible, ajouter le bout de code voulu et ensuite le réinsérer en mémoire à la place de l'ancien code du programme)?
7 réponses
Bonjour
Je voudrait savoir si on pourrait créer un programme qui modifie le code d'un autre programme Oui, ça se fait très courament. Ça s'appelle un virus quand c'est fait avec de mauvaises intentions et un patch quand c'est fait avec de bonnes intentions.
Je voudrait savoir si on pourrait créer un programme qui modifie le code d'un autre programme Oui, ça se fait très courament. Ça s'appelle un virus quand c'est fait avec de mauvaises intentions et un patch quand c'est fait avec de bonnes intentions.
Voila, moi c'est des patchs que je veux faire. Vous pourriez m'expliquer comment ca marche? Quels code utiliser pour modifier le code d'un autre programme?
Pour faire un patch d'un programme, il n'y a aucune règle générale. Il faut connaître ce programme en particulier et surtout de quelles corrections il a besoin.
Ba imaginons que par exemple je veuille modifier ce programme (je sais c hyper basique, je débute):
#include <stdio.h>
int pow(int x, int y)
{
int pow=1
for(;y>0;y--)
pow*=x;
return pow;
}
int facto(int a)
{
int c=1;
int b;
for (b=a,b>0,b--)
{
c*=b;
}
return c;
)
int main (void)
{
int a;
int b;
int c;
int P;
printf("entrez un nombre d'éléments\n");
scanf("%i",&a);
printf("entrez le nombre d'états de ces éléments\n");
scanf("%i",&b)
int c= pow((1/2),b)
P= c*(facto(a))/((facto(b))*(facto(a)))
printf("la probabilité de trouver a dans l'état b est de");
printf("%i", P);
return 0;
Admettons que je me sois trompé dans mon code et que je veuille le modifier, que je veuille remplacer la ligne
P= c*(facto(a))/((facto(b))*(facto(a))) par P= c*(facto(a)/((facto(b))*((facto(a-b)))
Admettons que je veuille créer un programme qui ira modifier cette ligne, comment je fais ? C'est quoi le code?
#include <stdio.h>
int pow(int x, int y)
{
int pow=1
for(;y>0;y--)
pow*=x;
return pow;
}
int facto(int a)
{
int c=1;
int b;
for (b=a,b>0,b--)
{
c*=b;
}
return c;
)
int main (void)
{
int a;
int b;
int c;
int P;
printf("entrez un nombre d'éléments\n");
scanf("%i",&a);
printf("entrez le nombre d'états de ces éléments\n");
scanf("%i",&b)
int c= pow((1/2),b)
P= c*(facto(a))/((facto(b))*(facto(a)))
printf("la probabilité de trouver a dans l'état b est de");
printf("%i", P);
return 0;
Admettons que je me sois trompé dans mon code et que je veuille le modifier, que je veuille remplacer la ligne
P= c*(facto(a))/((facto(b))*(facto(a))) par P= c*(facto(a)/((facto(b))*((facto(a-b)))
Admettons que je veuille créer un programme qui ira modifier cette ligne, comment je fais ? C'est quoi le code?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Donc faut utiliser un assembleur? Faut traduire le code à changer à la base en C en assembleur? Et une fois que c'est fais on fait comment? Y'a pas moyen de créer un programme en C qui se convertisse lui même en assembleur pour aller modifier le programme cible?
Le gros problème c'est qu'il faut connaitre à l'avance le contenu exact du binaire à changer.
Si tu modifies une petite ligne d'un code C, tout le code binaire va basculer: changement d'adresse d'instruction avec réaction en chaine...
Et tu ne peux pas vraiment savoir à l'avance à quoi va ressembler ton code une fois compilé.
Si tu modifies une petite ligne d'un code C, tout le code binaire va basculer: changement d'adresse d'instruction avec réaction en chaine...
Et tu ne peux pas vraiment savoir à l'avance à quoi va ressembler ton code une fois compilé.
Admettons qu'on ait le code source du programme cible et le code à ajouter. Si on traduit le code source en binaire et qu'on utilise un assembleur pour voir le code en assembleur. On traduit aussi notre code à ajouter en assembleur. Il n'y a plus qu'à ajouter au code source du programme cible le code qu'on veut ajouter nan?
Ceci étant, la plus belle prouesse que je connaisse en matière de patch, c'est ça:
http://www.ksplice.com/
Un truc capable d'appliquer directement des mises à jour du noyau linux sans rebooter, en patchant la mémoire.
Incroyable....
http://www.ksplice.com/
Un truc capable d'appliquer directement des mises à jour du noyau linux sans rebooter, en patchant la mémoire.
Incroyable....