1. Установка shc на CentOS
Ставим gcc, скачиваем и устанавливаем shc
[root@centos ~]# yum install gcc [root@centos ~]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz [root@centos ~]# tar xvfz shc-3.8.7.tgz [root@centos ~]# cd shc-3.8.7 [root@centos shc-3.8.7]# make
2. Шифрование
[root@centos shc-3.8.7]# nano script.sh #!/bin/bash echo "Preved Medved !!!"
Преобразуем его при помощи shc
[root@localhost shc-3.8.7]# ./shc -r -v -T -f ./script.sh shc shll=bash shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l]= shc opts= shc: cc ./script.sh.x.c -o ./script.sh.x shc: strip ./script.sh.x shc: chmod go-r ./script.sh.x
-r — возможность запускать на других машинах;
-v — подробный вывод при компиляции;
-T — разрешить трассировку скрипта. Без этой опции можно получить ошибку "(command): Operation not permitted" при запуске не из под рута;
-f — путь к файлу скрипта.
В результате имеем
[root@localhost shc-3.8.7]# ls -lh script* -rw-r--r--. 1 root root 37 Окт 28 21:21 script.sh -rwx--x--x. 1 root root 9,2K Окт 28 21:25 script.sh.x -rw-r--r--. 1 root root 9,5K Окт 28 21:25 script.sh.x.c
- script.sh.x.c — нечитабельный код на C, вместе с текстом скрипта, шифрованным при помощи RC4
- script.sh.x — скомпилированный бинарник
3. Запуск
Запустим полученный бинарник
[root@localhost shc-3.8.7]# ./script.sh.x Preved Medved !!! [root@localhost shc-3.8.7]#
Перенесём бинарник на другую машину и попробуем запустить
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux root@debian:~# ls script.sh.x root@debian:~# ./script.sh.x Preved Medved !!! root@debian:~#
Видим, что скрипт отработал.
4. Дешифрование
Процесс дешифрования для shc версии 3.7 описан ещё в 2005 году, однако есть более простой путь получения исходного текста скрипта. Т.к. при выполнении бинарника происходит его расшифровка в оперативную память, достаточно сдампить и проанализировать данный участок памяти.
Убираем лимит на размер дампа
root@debian:~# ulimit -c unlimited
Выполняем команду
root@debian:~# ./script.sh.x& ( sleep 0.001 && kill -SIGSEGV $! ) [1] 13315 root@debian:~# [1]+ Segmentation fault (core dumped) ./script.sh.x
Здесь важно подобрать такой интервал времени (sleep 0.001), чтобы скрипт успел выгрузиться в память, но не успел завершиться.
$! — будет содержать PID запущенного процесса
Много действий.Проше ps ax | grep "file"
ОтветитьУдалить