Ключевые слова:solaris, lib, wrapper, security, (найти похожие документы) From : http://solaris.org.ru
Subj : [Solaris] пример использования LD_PRELOAD
-------------------------------------------------------------------------------
SUN Solaris: hacks
http://solaris.org.ru
_________________________________________________________________
Как получить вечную лицензию для SUN WorkShop 5.0
Идея этого хака до безобразия проста и элегантна. Мы надеемся что вы
не воспользуетесь им для промышленной эксплуатации Sun WorkShop.
Просто это один из способов использования LD_PRELOAD, например так же
например работает runsocks из пакета Socks5. Как известно Sun WorkShop
использует систему FlexLM &tm; для проверки лицензий.
1. Получаем временную лицензию на месяц:
SPARC: http://jsecom4.sun.com:80/ECom/licenses/sparc.dat
x86: http://jsecom4.sun.com:80/ECom/licenses/intel.dat
2. Из этого исходника делаем shared library. которая
переопределяет функцию time(3).
/* gcc -fpic -shared -O4 -pipe -s -o xflexlm.so xflexlm.c */
#include <stdio.h>
#include <unistd.h>
#include <dlfcn.h>
#include <sys/systeminfo.h>
#include <sys/utsname.h>
static void *libc_handle = NULL;
static long (*time_ptr)() = NULL;
static int xflexlm_inited = 0;
static void xflexlm_init (void) {
if (libc_handle = dlopen ("libc.so", RTLD_LAZY)) {
if (!(time_ptr = dlsym (libc_handle, "time")))
fprintf (stderr, "xflexlm: can't find time()\n");
}
else
fprintf (stderr, "xflexlm: can't open libc.so, sorry\n");
xflexlm_inited = 1;
}
time_t time(time_t *tloc) {
time_t value;
if (!xflexlm_inited)
xflexlm_init();
value = (*time_ptr)(tloc);
return (time_t)920000000; /* 26-Feb-1999 */
}
3. Делаем shell wrapper для всех программ
#!/bin/sh
#
# Fool workshop compiler ;)
#
LD_LIBRARY_PATH=/opt/SUNWspro/xflexlm
export LD_LIBRARY_PATH
LD_PRELOAD=xflexlm.so
export LD_PRELOAD
case `basename $0` in
cc)
exec /opt/SUNWspro/SC4.0/bin/cc $* ;;
CC)
exec /opt/SUNWspro/SC4.0/bin/CC $* ;;
workshop)
exec /opt/SUNWspro/WS5.0/bin/workshop $* ;;
*)
echo "Hmm, don't know full path to executable `basename $0`"
esac
4. Устанавливаем их в /opt/SUNWspro/bin
root# cd /opt/SUNWspro/bin
root# unlink cc CC workshop
root# cp ~/ws_wrapper.sh cc
root# ln cc CC
root# ln cc workshop
5. Все, теперь можно забыть про лицензии... ;-)
_________________________________________________________________
(x) 2000 solaris.org.ru Changes: Thursday, 08-Jun-2000 23:54:26 IRKST