lundi 22 février 2010

gestion de lzm sous linux, et compilation statique

le systeme de compression lzm est utilisé sous les distributions slax, il offre des commandes tel que lzm2dir dir2lzm tgz2lzm deb2lzm et txz2lzm, ici on va l'utiliser sous une distribution de type debian, on va créer un binaire statique de john the ripper, la compilation statique permet d'avoir un binaire sans dépendance, ca nous donne un gros binaire comprenant les librairies requisent.
lzm2dir dir2lzm etc ca c'est dispo dans linux live-script:

wget ftp://ftp.slax.org/Linux-Live/linux-live-6.3.0.tar.gz
tar zxvf linux-live-6.3.0.tar.gz
cd linux-live-6.3.0/tools
sudo su
#le plus important la librairie
cp liblinuxlive /usr/lib/
#ldconfig ca c'est pour les debianoides
ldconfig
cp *lzm /usr/local/bin
cp lzm2dir /usr/local/bin


#à partir de la vous pouvez créer des lzm et les décompresser...
#on va faire notre lzm avec john the ripper compilé statiquement

wget http://www.openwall.com/john/g/john-1.7.4.2.tar.gz
tar zxvf john-1.7.4.2.tar.gz
cd john-1.7.4.2/

#tant qu'à faire on va lui coller, le jumbo patch.

wget http://www.openwall.com/john/contrib/john-1.7.4.2-jumbo-3.diff.gz
gzip -d john-1.7.4.2-jumbo-3.diff.gz
patch -Np1 -i john-1.7.4.2-jumbo-3.diff
cd src/

#ici le linux-x86-sse2 est en rapport avec mon processeur intel qui gère le sse2
#cat /proc/cpuinfo | grep sse2
#sinon
#make --help

make SHARED=0 CC='gcc -static' linux-x86-sse2

#pour un programme nécessitant un simple "make",
#on placera simplement make SHARED=0 CC='gcc -static'
#(shared=0 pour aucune librairies partagées, et le flag -static pour gcc)
#note que ca fonctionne pas sur tous les programmes out of box

cd ../run/

On vérifie que tout est bien en statique via la commande ldd, pour voir si on a bien des binaires statiques:

ldd *

all.chr:
n'est pas un exécutable dynamique
alnum.chr:
n'est pas un exécutable dynamique
alpha.chr:
n'est pas un exécutable dynamique
calc_stat:
n'est pas un exécutable dynamique
digits.chr:
n'est pas un exécutable dynamique
genincstats.rb:
n'est pas un exécutable dynamique
genmkvpwd:
n'est pas un exécutable dynamique
john:
n'est pas un exécutable dynamique
john.conf:
n'est pas un exécutable dynamique
lanman.chr:
n'est pas un exécutable dynamique
mailer:
n'est pas un exécutable dynamique
mkvcalcproba:
n'est pas un exécutable dynamique
netntlm.pl:
n'est pas un exécutable dynamique
netscreen.py:
n'est pas un exécutable dynamique
password.lst:
n'est pas un exécutable dynamique
sap_prepare.pl:
n'est pas un exécutable dynamique
stats:
n'est pas un exécutable dynamique
unafs:
n'est pas un exécutable dynamique
undrop:
n'est pas un exécutable dynamique
unique:
n'est pas un exécutable dynamique
unshadow:
n'est pas un exécutable dynamique

Un ldd sur un binaire non statique, à titre d'exemple:

ldd /bin/ls
linux-gate.so.1 => (0x001cd000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0x00a34000)
libselinux.so.1 => /lib/libselinux.so.1 (0x0037e000)
libacl.so.1 => /lib/libacl.so.1 (0x00dce000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x001ce000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x0013e000)
/lib/ld-linux.so.2 (0x00121000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00110000)
libattr.so.1 => /lib/libattr.so.1 (0x00c1a000)

Maintenant pour notre lzm on va créer nos répertoires dans tmp/build, so on avait eu un ./configure on aurait fait un ./configure --prefix=/tmp/build

sudo su
mkdir -p /tmp/build/usr/local/bin
cp * /tmp/build/usr/local/bin/

#note c'est un peu crado ça, car le repertoire /usr/local/bin, c'est pour des #executables, et la je balance tout (binaires, wordlists), mais c'est pour l'exemple

Et maintenant on créé notre lzm

./dir2lzm /tmp/build/ ~/john-jumbo-statique.lzm
[=================================================================-] 42/42 100%r

La décompression:

./lzm2dir ~/john-jumbo-statique.lzm /

ca va placer le contenue de l'archive ou il faut (ici /usr/local/bin)

le slash "/" indique de decompresser à la racine, super important, juste pour test on peut faire ./lzm2dir ~/john-jumbo-statique.lzm /home/tonuser (histoire de voir si la structure est comme il faut)

Pour finir, le systeme lzm est bien dans le sens ou il offre des conversions rapides (tgz2lzm et deb2lzm) aussi car avec un noyau patché les lzm peuvent etre très facilement ajoutés a un live cd / usb (ils se décompressent à la volé lors du chargement du systeme, et de facon rapide), après pour cette demo l'utilité du binaire statique est interessante, mais à coté de ca le lzm deja moins, car trouver un système ayant lzm2dir, bon courage (c'est sur les slax en général).Ici un tar.gz ou tar.bz2 avec le binaire statique serait plus pratique.

Lire la suite...
Un problème? Venez en parler sur le forum, tout a une solution :D
 
LinuxStore