Némi kísérletezés után úgy tűnik, hogy LD_PRELOAD-dal be lehet tölteni egy inicializáló kódot, ami átírja a program megfelelő paraméterét a tényleges jelszóra, míg a ps, top, stb, a parancssorban megadott helyőrzőt jeleníti meg.
a betöltendő kód:
void init( int argc, char **argv, char **envp ){
argv[2] = "(igazi titok)";
}
__attribute__((section(".init_array"))) typeof(init) *__init = init;
fordítása:
gcc -shared -o setarg.so setarg.c
teszt program:
#!/bin/bash
LD_PRELOAD= /bin/echo A B C
/bin/echo A B C
/bin/echo "0:$0 1:$1 2:$2"
LD_PRELOAD= od -c /proc/${BASHPID}/cmdline
ps ax | grep elso
teszt eredmény:
$ LD_PRELOAD=setarg.so ./test.sh elso masodik
A B C
A (igazi titok) C
0:./test.sh 1:(igazi titok) 2:masodik
0000000 / b i n / b a s h \0 . / t e s t
0000020 . s h \0 e l s o \0 m a s o d i k
0000040 \0
0000041
5047 pts/1 S+ 0:00 /bin/bash ./test.sh elso masodik
5053 pts/1 R+ 0:00 grep elso
Ha működik így a dolog, akkor némi XOR-ozással elrejthető a szöveg a kódban, vagy beemelhető környezeti változóból, fájlból, amit indítás után le lehet törölni, stb.