From 8f63b580621cac4143c32dbd44a920290b31d74e Mon Sep 17 00:00:00 2001 From: lizhiyuan Date: Mon, 29 Aug 2022 16:09:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=9F=E8=AE=A1=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- debian/changelog | 8 +- src/downloadworker.cpp | 9 + tool/ss-feedback/README.md | 5 +- tool/ss-feedback/sender-d.sh.x.c | 817 ------------------------------- 4 files changed, 14 insertions(+), 825 deletions(-) delete mode 100644 tool/ss-feedback/sender-d.sh.x.c diff --git a/debian/changelog b/debian/changelog index 0b68365..54ab678 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,19 +1,19 @@ spark-store (3.2) stable; urgency=medium -* 新增下载量统计功能 + * 新增下载量统计功能 -- shenmo Fri, 30 Jan 2022 00:00:00 +0800 spark-store (3.1.6) stable; urgency=medium -* 修复部分情况下无法选中正确的镜像源的问题 -* 合入3.1.5以来的各项修改 + * 修复部分情况下无法选中正确的镜像源的问题 + * 合入3.1.5以来的各项修改 -- shenmo Fri, 30 Jan 2022 00:00:00 +0800 spark-store (3.1.5-5) stable; urgency=medium -* 从所有镜像源中选取最快镜像源高速下载 + * 从所有镜像源中选取最快镜像源高速下载 -- shenmo Fri, 30 Jan 2022 00:00:00 +0800 diff --git a/src/downloadworker.cpp b/src/downloadworker.cpp index 334c4dd..a2069aa 100644 --- a/src/downloadworker.cpp +++ b/src/downloadworker.cpp @@ -198,6 +198,15 @@ void DownloadController::startDownload(const QString &url) { continue; } + + // 统计下载量 + QString SenderdPath = "/opt/durapps/spark-store/bin/ss-feedback/sender-d"; + /* + * https://en.wikipedia.org/wiki/HD_70642 + * HD 70642 is a star with an exoplanetary companion in the southern constellation of Puppis. + */ + system(SenderdPath.toUtf8() + " " + metaUrl.toUtf8() + " " + "HD70642"); + emit downloadFinished(); }); } diff --git a/tool/ss-feedback/README.md b/tool/ss-feedback/README.md index 609713f..efcc7f2 100644 --- a/tool/ss-feedback/README.md +++ b/tool/ss-feedback/README.md @@ -1,5 +1,2 @@ # Feadback 反馈脚本 -使用 shc 加密, 需要使用 cc 编译。 -```shell - cc sender-d.sh.x.c -o sender-d.sh.x -``` \ No newline at end of file +使用 shc 加密, 需要使用 cc、gcc 编译。 diff --git a/tool/ss-feedback/sender-d.sh.x.c b/tool/ss-feedback/sender-d.sh.x.c deleted file mode 100644 index 309139d..0000000 --- a/tool/ss-feedback/sender-d.sh.x.c +++ /dev/null @@ -1,817 +0,0 @@ -#if 0 - shc Version 4.0.3, Generic Shell Script Compiler - GNU GPL Version 3 Md Jahidul Hamid - - shc -v -r -f sender-d.sh -#endif - -static char data [] = -#define pswd_z 256 -#define pswd ((&data[15])) - "\073\237\114\151\003\324\064\061\057\100\342\310\062\343\346\075" - "\105\011\036\257\154\107\223\050\237\060\137\020\063\015\377\156" - "\162\230\321\117\026\333\267\322\335\062\077\075\261\355\172\366" - "\367\231\246\144\341\071\215\201\151\354\221\234\371\221\013\153" - "\052\334\273\101\267\162\023\224\244\123\322\125\100\115\114\067" - "\347\362\233\310\053\050\111\225\025\333\061\016\154\075\172\227" - "\031\065\330\320\250\354\145\114\077\067\242\200\204\357\267\154" - "\341\123\064\015\174\176\242\221\131\324\240\306\021\032\136\053" - "\117\066\373\367\043\141\104\142\230\347\342\035\326\232\212\270" - "\356\276\306\152\075\151\374\227\076\234\135\120\266\273\173\006" - "\362\167\376\025\330\103\170\161\052\133\217\001\366\031\272\344" - "\330\201\116\025\352\113\254\051\347\012\171\236\305\365\245\270" - "\154\243\316\105\346\106\267\021\242\106\023\230\137\316\174\067" - "\117\313\115\072\026\371\143\376\003\334\234\311\322\101\202\076" - "\345\120\204\313\227\073\335\071\202\360\321\341\276\116\031\016" - "\031\146\110\057\140\253\056\144\210\312\056\132\014\260\231\361" - "\000\036\275\230\131\232\321\333\213\243\275\112\361\327\130\360" - "\173\100\213\115\034\027\361\331\141\342\261\272\356\360\133\051" - "\217\247\222\222\173\307\304\253\007\247\163\072\212\132\052\005" - "\232\266\123\266\315\104\220" -#define date_z 1 -#define date ((&data[311])) - "\375" -#define tst2_z 19 -#define tst2 ((&data[312])) - "\031\242\273\246\041\336\076\145\246\300\036\051\047\366\106\356" - "\220\064\226" -#define shll_z 10 -#define shll ((&data[331])) - "\142\312\022\213\061\052\357\062\161\266\353\321" -#define inlo_z 3 -#define inlo ((&data[343])) - "\216\314\250" -#define msg1_z 65 -#define msg1 ((&data[347])) - "\300\115\164\240\306\270\356\211\346\362\207\042\205\377\337\231" - "\113\016\267\021\330\324\374\242\242\336\361\041\143\054\223\355" - "\361\326\220\125\016\336\260\031\012\341\025\102\124\131\005\244" - "\234\133\315\262\013\375\340\025\227\352\060\034\236\222\347\136" - "\160\356\206\333\112\340\006\120\173\274\243\061" -#define chk1_z 22 -#define chk1 ((&data[427])) - "\270\017\004\242\044\277\223\036\316\135\273\047\172\354\056\123" - "\141\200\041\375\363\101\127\122\242\373\336\067\346\143\370" -#define text_z 1869 -#define text ((&data[549])) - "\071\315\146\114\156\047\322\111\162\262\117\303\055\014\146\137" - "\226\117\042\116\136\046\360\203\135\327\346\126\251\033\243\342" - "\351\012\056\127\062\000\240\244\263\360\147\341\374\316\101\222" - "\035\143\341\174\212\322\377\350\251\345\076\122\001\342\065\352" - "\355\143\101\037\144\342\304\030\323\053\372\320\372\073\142\030" - "\237\104\224\051\026\223\022\300\171\121\023\172\064\110\144\041" - "\131\377\367\164\123\316\261\141\353\367\301\016\274\016\120\047" - "\114\046\100\031\034\140\073\010\260\305\236\267\340\334\172\305" - "\021\246\221\332\021\311\021\154\112\347\316\242\317\135\332\301" - "\336\151\126\072\217\354\230\133\220\107\301\140\001\353\360\166" - "\213\363\372\027\233\047\323\276\201\201\216\023\154\320\161\313" - "\320\152\257\025\322\272\025\153\247\235\321\160\071\321\067\253" - "\241\156\046\022\220\271\031\066\331\215\206\354\323\250\277\275" - "\253\021\137\373\037\247\054\101\371\345\374\104\113\056\231\313" - "\256\361\253\230\051\271\176\340\337\333\050\341\362\056\167\255" - "\110\043\213\146\047\300\122\142\314\236\021\040\074\377\243\374" - "\373\242\311\017\027\025\325\213\232\031\105\104\013\052\212\072" - "\030\104\271\142\045\220\026\110\122\375\151\376\117\030\367\246" - "\217\256\245\325\077\346\276\327\045\113\166\374\164\175\046\022" - "\327\265\135\221\047\346\332\276\260\240\227\230\211\165\023\170" - "\316\154\240\317\001\217\073\173\212\106\115\070\141\315\324\116" - "\204\026\326\026\254\252\257\044\333\310\024\223\327\026\336\312" - "\151\363\273\204\220\242\016\226\317\314\156\124\240\122\232\124" - "\110\055\240\223\016\373\000\136\102\135\122\057\222\070\210\130" - "\012\234\324\361\047\201\232\126\155\021\270\134\303\377\110\250" - "\220\352\314\011\276\260\131\175\233\367\254\266\366\263\014\102" - "\237\066\305\270\257\117\034\316\147\136\133\373\051\333\006\077" - "\242\225\073\276\155\106\311\232\247\112\341\143\016\103\013\062" - "\214\247\315\302\241\024\076\037\135\126\145\227\342\323\061\230" - "\016\246\203\251\033\223\105\251\131\001\060\306\305\034\005\133" - "\161\366\173\132\343\314\135\205\273\260\170\145\370\262\153\321" - "\253\345\131\260\346\020\367\016\127\056\307\040\112\052\012\264" - "\247\057\273\157\016\275\270\226\173\033\071\042\072\142\170\134" - "\045\016\163\251\362\073\214\166\354\103\017\330\122\073\211\204" - "\200\004\003\176\324\343\275\017\056\341\055\071\173\175\144\147" - "\365\115\274\012\253\277\036\370\220\115\307\120\131\037\206\063" - "\355\032\324\265\064\114\014\217\113\302\125\301\033\100\357\042" - "\334\212\202\353\262\040\130\240\027\110\343\271\356\171\001\325" - "\167\062\056\061\210\316\075\142\261\005\116\142\230\367\343\135" - "\174\302\375\047\075\334\222\326\253\073\174\173\360\260\021\344" - "\331\315\146\233\057\007\314\231\256\113\221\021\126\173\045\315" - "\247\126\162\253\375\041\043\263\232\274\171\132\320\020\070\152" - "\013\224\371\045\350\270\077\251\145\063\357\171\036\245\125\315" - "\020\206\333\111\062\331\054\144\346\173\132\113\374\043\022\371" - "\311\101\043\300\337\334\367\145\030\023\207\043\253\042\227\302" - "\350\037\067\332\350\253\117\124\243\341\046\211\061\007\303\154" - "\022\210\064\112\311\170\123\071\332\266\205\151\265\300\343\237" - "\147\001\024\013\173\265\330\375\070\111\044\246\204\155\146\067" - "\036\060\065\251\005\354\200\115\136\076\034\040\335\033\043\221" - "\374\211\170\061\251\321\372\116\023\167\330\007\310\060\175\076" - "\064\242\253\131\116\074\275\022\133\016\203\214\254\115\002\325" - "\046\213\073\107\241\341\273\110\300\236\005\231\275\325\012\175" - "\365\056\370\275\132\330\041\035\166\130\240\013\162\041\163\140" - "\377\225\075\315\115\106\270\277\233\113\106\305\270\240\026\106" - "\317\325\264\324\126\337\214\155\366\331\372\200\306\272\163\333" - "\266\343\246\100\016\002\242\070\231\262\005\137\323\257\343\047" - "\301\206\266\341\302\046\266\167\227\276\125\165\027\044\353\035" - "\043\036\300\137\140\244\156\205\364\361\067\016\324\110\142\167" - "\125\216\360\003\023\161\060\263\356\073\050\173\151\371\005\027" - "\027\273\363\163\017\044\064\055\267\345\052\320\370\132\374\123" - "\020\263\163\176\037\145\346\003\275\377\154\040\166\363\224\240" - "\214\304\332\367\057\146\070\165\101\026\125\361\100\357\001\031" - "\305\363\242\164\125\067\077\063\134\271\250\242\243\022\031\114" - "\225\006\352\203\137\376\201\147\225\372\053\217\331\003\156\143" - "\332\361\315\167\027\232\307\331\314\071\025\271\047\031\126\310" - "\254\200\324\257\022\351\244\007\335\036\150\036\362\072\021\007" - "\140\155\073\242\063\071\162\205\121\257\302\056\155\071\306\057" - "\236\364\027\143\074\375\254\324\117\176\242\267\247\215\374\137" - "\003\123\113\247\064\347\123\321\123\044\211\351\253\045\226\324" - "\034\147\117\066\000\370\074\041\242\137\270\361\106\154\113\045" - "\275\172\101\331\157\137\222\202\136\241\075\132\267\033\325\113" - "\042\352\305\133\274\252\111\213\330\215\261\145\322\246\174\031" - "\267\347\275\247\251\030\255\106\116\362\117\277\024\135\356\172" - "\033\066\346\252\205\144\302\147\131\076\122\021\152\225\313\235" - "\202\066\043\300\027\147\263\001\201\341\121\051\310\140\317\333" - "\131\254\112\104\337\014\320\143\375\231\252\220\064\143\234\000" - "\017\304\317\113\131\055\324\177\367\224\230\264\132\311\261\152" - "\034\137\223\225\365\314\014\076\377\025\023\040\222\043\022\047" - "\332\363\144\102\015\314\010\256\206\065\310\103\337\001\326\206" - "\024\354\074\045\337\107\003\225\137\032\055\332\056\347\073\055" - "\267\115\315\204\061\310\304\007\065\267\107\176\066\216\011\014" - "\066\215\236\247\176\327\164\113\353\215\343\313\302\106\302\250" - "\077\220\165\207\015\144\336\311\065\351\311\163\104\104\267\262" - "\307\057\106\061\110\271\053\136\133\263\066\177\103\212\234\166" - "\271\130\043\076\352\006\066\017\220\207\275\024\235\356\377\344" - "\005\257\200\002\253\123\052\015\326\342\225\116\137\256\213\354" - "\251\026\237\347\166\014\121\075\306\022\247\276\265\017\375\161" - "\174\113\273\017\227\064\057\217\376\326\311\140\354\074\160\121" - "\346\370\327\255\277\376\062\301\033\111\042\016\233\162\101\303" - "\161\123\210\042\157\270\114\252\372\315\352\335\221\115\300\252" - "\163\344\140\324\157\261\256\232\173\171\024\250\006\342\320\340" - "\365\137\167\336\216\320\337\345\265\346\363\133\023\076\121\117" - "\002\021\237\112\206\043\012\370\033\045\133\151\303\330\001\222" - "\073\174\074\320\054\005\127\000\210\240\347\131\256\126\253\007" - "\342\137\135\162\075\344\340\210\333\057\141\042\223\055\006\174" - "\000\005\225\117\203\320\143\136\130\037\333\217\136\371\221\220" - "\052\071\173\374\261\213\235\241\071\260\057\226\360\212\211\346" - "\333\062\135\157\357\316\156\022\111\201\010\151\065\111\364\364" - "\137\005\161\265\354\014\003\204\117\112\075\042\357\165\042\354" - "\263\304\343\323\045\127\244\326\160\216\335\042\353\173\135\061" - "\354\306\013\252\265\013\046\173\100\050\146\372\303\210\171\200" - "\160\377\013\300\245\265\307\146\355\047\052\007\011\214\060\367" - "\177\327\043\302\111\263\123\276\107\220\316\207\024\142\070\325" - "\004\262\276\355\075\175\146\163\370\345\135\214\322\041\105\047" - "\371\073\016\023\064\231\203\005\246\204\203\306\340\002\160\365" - "\315\022\302\170\340\356\151\323\344\242\134\046\134\162\227\117" - "\262\240\062\234\324\135\326\242\341\066\232\314\200\331\124\077" - "\201\245\227\252\073\356\252\367\277\232\331\005\324\350\032\261" - "\035\246\325\177\334\121\146\316\041\043\352\253\373\043\035\234" - "\231\321\046\171\221\105\216\272\025\321\042\222\007\351\363\232" - "\006\016\231\137\124\215\132\071\166\042\065\127\337\253\307\021" - "\337\364\070\261\112\201\310\242\335\104\353\055\277\322\232\240" - "\007\374\034\322\312\373\031\130\204\036\362\373\142\043\273\315" - "\216\373\273\260\310\111\070\031\207\101\325\157\110\142\216\357" - "\172\023\345\067\105\007\375\023\053\256\121\163\255\323\257\132" - "\164\360\307\234\106\130\275\217\211\327\300\322\261\206\364\326" - "\021\255\077\302\202\027\207\370\263\313\333\070\010\115\377\271" - "\173\302\243\224\126\201\255\356\261\176\213\135\216\054\237\371" - "\040\174\342\367\323\053\341\031\333\211\214\042\343\254\122\252" - "\325\326\263\326\325\063\065\362\114\161\314\151\116\237\160\073" - "\321\025\336\117\020\055\371\021\371\104\001\072\204\064\227\333" - "\034\374\123\265\343\026\372\207\264\033\065\316\147\211\142\366" - "\371\257\120\162\107\234\134\010\035\212\241\132\317\254\246\101" - "\020\211\005\051\134\061\043\054\054\137\217\104\376\323\330\050" - "\352\154\072\253\345\214\276\137\300\006\304\341\262\152\043\303" - "\364\051\354\120\132\017\175\207\156\014\313\155\337\244\225\312" - "\020\320\165\366\134\063\126\034\072\032\376\355\205\041\260\171" - "\113\234\312\245\254\107\055\033\123\370\210\063\235\036\375\256" - "\356\163\245\113\247\373\150\341\025\146\316\233\210\177\024\323" - "\034\336\171\310\046\246\343\171\237\153\255\075\211\252\353\170" - "\036\220\304\305\214\054\246\242\222\165\075\033\365\122\357\021" - "\061\150\331\127\017\275\321\257\051\176" -#define chk2_z 19 -#define chk2 ((&data[2562])) - "\330\053\107\261\150\156\021\060\277\165\015\167\176\171\251\302" - "\276\160\207\325\012\334" -#define lsto_z 1 -#define lsto ((&data[2581])) - "\010" -#define xecc_z 15 -#define xecc ((&data[2582])) - "\005\040\327\254\114\361\156\300\024\244\110\337\050\143\126\227" - "\257" -#define tst1_z 22 -#define tst1 ((&data[2603])) - "\036\047\271\057\207\076\001\326\201\264\356\151\036\164\071\111" - "\027\304\031\244\017\252\223\354\153\051\130\042\011\260" -#define msg2_z 19 -#define msg2 ((&data[2632])) - "\341\357\377\335\143\002\251\076\361\005\267\075\204\313\320\034" - "\012\023\243\361\261\374\315\242" -#define rlax_z 1 -#define rlax ((&data[2653])) - "\121" -#define opts_z 1 -#define opts ((&data[2654])) - "\241"/* End of data[] */; -#define hide_z 4096 -#define SETUID 0 /* Define as 1 to call setuid(0) at start of script */ -#define DEBUGEXEC 0 /* Define as 1 to debug execvp calls */ -#define TRACEABLE 1 /* Define as 1 to enable ptrace the executable */ -#define HARDENING 0 /* Define as 1 to disable ptrace/dump the executable */ -#define BUSYBOXON 0 /* Define as 1 to enable work with busybox */ - -#if HARDENING -static const char * shc_x[] = { -"/*", -" * Copyright 2019 - Intika ", -" * Replace ******** with secret read from fd 21", -" * Also change arguments location of sub commands (sh script commands)", -" * gcc -Wall -fpic -shared -o shc_secret.so shc_secret.c -ldl", -" */", -"", -"#define _GNU_SOURCE /* needed to get RTLD_NEXT defined in dlfcn.h */", -"#define PLACEHOLDER \"********\"", -"#include ", -"#include ", -"#include ", -"#include ", -"#include ", -"#include ", -"", -"static char secret[128000]; //max size", -"typedef int (*pfi)(int, char **, char **);", -"static pfi real_main;", -"", -"// copy argv to new location", -"char **copyargs(int argc, char** argv){", -" char **newargv = malloc((argc+1)*sizeof(*argv));", -" char *from,*to;", -" int i,len;", -"", -" for(i = 0; i 0) {", -" int i;", -"", -" if (secret[n - 1] == '\\n') secret[--n] = '\\0';", -" for (i = 1; i < argc; i++)", -" if (strcmp(argv[i], PLACEHOLDER) == 0)", -" argv[i] = secret;", -" }", -"", -" real_main = main;", -"", -" return real___libc_start_main(mymain, argc, argv, init, fini, rtld_fini, stack_end);", -"}", -"", -0}; -#endif /* HARDENING */ - -/* rtc.c */ - -#include -#include - -#include -#include -#include -#include -#include -#include - -/* 'Alleged RC4' */ - -static unsigned char stte[256], indx, jndx, kndx; - -/* - * Reset arc4 stte. - */ -void stte_0(void) -{ - indx = jndx = kndx = 0; - do { - stte[indx] = indx; - } while (++indx); -} - -/* - * Set key. Can be used more than once. - */ -void key(void * str, int len) -{ - unsigned char tmp, * ptr = (unsigned char *)str; - while (len > 0) { - do { - tmp = stte[indx]; - kndx += tmp; - kndx += ptr[(int)indx % len]; - stte[indx] = stte[kndx]; - stte[kndx] = tmp; - } while (++indx); - ptr += 256; - len -= 256; - } -} - -/* - * Crypt data. - */ -void arc4(void * str, int len) -{ - unsigned char tmp, * ptr = (unsigned char *)str; - while (len > 0) { - indx++; - tmp = stte[indx]; - jndx += tmp; - stte[indx] = stte[jndx]; - stte[jndx] = tmp; - tmp += stte[indx]; - *ptr ^= stte[tmp]; - ptr++; - len--; - } -} - -/* End of ARC4 */ - -#if HARDENING - -#include -#include -#include -#include -#define PR_SET_PTRACER 0x59616d61 - -/* Seccomp Sandboxing Init */ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#define ArchField offsetof(struct seccomp_data, arch) - -#define Allow(syscall) \ - BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_##syscall, 0, 1), \ - BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW) - -struct sock_filter filter[] = { - /* validate arch */ - BPF_STMT(BPF_LD+BPF_W+BPF_ABS, ArchField), - BPF_JUMP( BPF_JMP+BPF_JEQ+BPF_K, AUDIT_ARCH_X86_64, 1, 0), - BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL), - - /* load syscall */ - BPF_STMT(BPF_LD+BPF_W+BPF_ABS, offsetof(struct seccomp_data, nr)), - - /* list of allowed syscalls */ - Allow(exit_group), /* exits a process */ - Allow(brk), /* for malloc(), inside libc */ - Allow(mmap), /* also for malloc() */ - Allow(munmap), /* for free(), inside libc */ - - /* and if we don't match above, die */ - BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL), -}; -struct sock_fprog filterprog = { - .len = sizeof(filter)/sizeof(filter[0]), - .filter = filter -}; - -/* Seccomp Sandboxing - Set up the restricted environment */ -void seccomp_hardening() { - if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) { - perror("Could not start seccomp:"); - exit(1); - } - if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &filterprog) == -1) { - perror("Could not start seccomp:"); - exit(1); - } -} -/* End Seccomp Sandboxing Init */ - -void shc_x_file() { - FILE *fp; - int line = 0; - - if ((fp = fopen("/tmp/shc_x.c", "w")) == NULL ) {exit(1); exit(1);} - for (line = 0; shc_x[line]; line++) fprintf(fp, "%s\n", shc_x[line]); - fflush(fp);fclose(fp); -} - -int make() { - char * cc, * cflags, * ldflags; - char cmd[4096]; - - cc = getenv("CC"); - if (!cc) cc = "cc"; - - sprintf(cmd, "%s %s -o %s %s", cc, "-Wall -fpic -shared", "/tmp/shc_x.so", "/tmp/shc_x.c -ldl"); - if (system(cmd)) {remove("/tmp/shc_x.c"); return -1;} - remove("/tmp/shc_x.c"); return 0; -} - -void arc4_hardrun(void * str, int len) { - //Decode locally - char tmp2[len]; - char tmp3[len+1024]; - memcpy(tmp2, str, len); - - unsigned char tmp, * ptr = (unsigned char *)tmp2; - int lentmp = len; - int pid, status; - pid = fork(); - - shc_x_file(); - if (make()) {exit(1);} - - setenv("LD_PRELOAD","/tmp/shc_x.so",1); - - if(pid==0) { - - //Start tracing to protect from dump & trace - if (ptrace(PTRACE_TRACEME, 0, 0, 0) < 0) { - kill(getpid(), SIGKILL); - _exit(1); - } - - //Decode Bash - while (len > 0) { - indx++; - tmp = stte[indx]; - jndx += tmp; - stte[indx] = stte[jndx]; - stte[jndx] = tmp; - tmp += stte[indx]; - *ptr ^= stte[tmp]; - ptr++; - len--; - } - - //Do the magic - sprintf(tmp3, "%s %s", "'********' 21<<<", tmp2); - - //Exec bash script //fork execl with 'sh -c' - system(tmp2); - - //Empty script variable - memcpy(tmp2, str, lentmp); - - //Clean temp - remove("/tmp/shc_x.so"); - - //Sinal to detach ptrace - ptrace(PTRACE_DETACH, 0, 0, 0); - exit(0); - } - else {wait(&status);} - - /* Seccomp Sandboxing - Start */ - seccomp_hardening(); - - exit(0); -} -#endif /* HARDENING */ - -/* - * Key with file invariants. - */ -int key_with_file(char * file) -{ - struct stat statf[1]; - struct stat control[1]; - - if (stat(file, statf) < 0) - return -1; - - /* Turn on stable fields */ - memset(control, 0, sizeof(control)); - control->st_ino = statf->st_ino; - control->st_dev = statf->st_dev; - control->st_rdev = statf->st_rdev; - control->st_uid = statf->st_uid; - control->st_gid = statf->st_gid; - control->st_size = statf->st_size; - control->st_mtime = statf->st_mtime; - control->st_ctime = statf->st_ctime; - key(control, sizeof(control)); - return 0; -} - -#if DEBUGEXEC -void debugexec(char * sh11, int argc, char ** argv) -{ - int i; - fprintf(stderr, "shll=%s\n", sh11 ? sh11 : ""); - fprintf(stderr, "argc=%d\n", argc); - if (!argv) { - fprintf(stderr, "argv=\n"); - } else { - for (i = 0; i <= argc ; i++) - fprintf(stderr, "argv[%d]=%.60s\n", i, argv[i] ? argv[i] : ""); - } -} -#endif /* DEBUGEXEC */ - -void rmarg(char ** argv, char * arg) -{ - for (; argv && *argv && *argv != arg; argv++); - for (; argv && *argv; argv++) - *argv = argv[1]; -} - -void chkenv_end(void); - -int chkenv(int argc) -{ - char buff[512]; - unsigned long mask, m; - int l, a, c; - char * string; - extern char ** environ; - - mask = (unsigned long)getpid(); - stte_0(); - key(&chkenv, (void*)&chkenv_end - (void*)&chkenv); - key(&data, sizeof(data)); - key(&mask, sizeof(mask)); - arc4(&mask, sizeof(mask)); - sprintf(buff, "x%lx", mask); - string = getenv(buff); -#if DEBUGEXEC - fprintf(stderr, "getenv(%s)=%s\n", buff, string ? string : ""); -#endif - l = strlen(buff); - if (!string) { - /* 1st */ - sprintf(&buff[l], "=%lu %d", mask, argc); - putenv(strdup(buff)); - return 0; - } - c = sscanf(string, "%lu %d%c", &m, &a, buff); - if (c == 2 && m == mask) { - /* 3rd */ - rmarg(environ, &string[-l - 1]); - return 1 + (argc - a); - } - return -1; -} - -void chkenv_end(void){} - -#if HARDENING - -static void gets_process_name(const pid_t pid, char * name) { - char procfile[BUFSIZ]; - sprintf(procfile, "/proc/%d/cmdline", pid); - FILE* f = fopen(procfile, "r"); - if (f) { - size_t size; - size = fread(name, sizeof (char), sizeof (procfile), f); - if (size > 0) { - if ('\n' == name[size - 1]) - name[size - 1] = '\0'; - } - fclose(f); - } -} - -void hardening() { - prctl(PR_SET_DUMPABLE, 0); - prctl(PR_SET_PTRACER, -1); - - int pid = getppid(); - char name[256] = {0}; - gets_process_name(pid, name); - - if ( (strcmp(name, "bash") != 0) - && (strcmp(name, "/bin/bash") != 0) - && (strcmp(name, "sh") != 0) - && (strcmp(name, "/bin/sh") != 0) - && (strcmp(name, "sudo") != 0) - && (strcmp(name, "/bin/sudo") != 0) - && (strcmp(name, "/usr/bin/sudo") != 0) - && (strcmp(name, "gksudo") != 0) - && (strcmp(name, "/bin/gksudo") != 0) - && (strcmp(name, "/usr/bin/gksudo") != 0) - && (strcmp(name, "kdesu") != 0) - && (strcmp(name, "/bin/kdesu") != 0) - && (strcmp(name, "/usr/bin/kdesu") != 0) - ) - { - printf("Operation not permitted\n"); - kill(getpid(), SIGKILL); - exit(1); - } -} - -#endif /* HARDENING */ - -#if !TRACEABLE - -#define _LINUX_SOURCE_COMPAT -#include -#include -#include -#include -#include -#include -#include - -#if !defined(PT_ATTACHEXC) /* New replacement for PT_ATTACH */ - #if !defined(PTRACE_ATTACH) && defined(PT_ATTACH) - #define PT_ATTACHEXC PT_ATTACH - #elif defined(PTRACE_ATTACH) - #define PT_ATTACHEXC PTRACE_ATTACH - #endif -#endif - -void untraceable(char * argv0) -{ - char proc[80]; - int pid, mine; - - switch(pid = fork()) { - case 0: - pid = getppid(); - /* For problematic SunOS ptrace */ -#if defined(__FreeBSD__) - sprintf(proc, "/proc/%d/mem", (int)pid); -#else - sprintf(proc, "/proc/%d/as", (int)pid); -#endif - close(0); - mine = !open(proc, O_RDWR|O_EXCL); - if (!mine && errno != EBUSY) - mine = !ptrace(PT_ATTACHEXC, pid, 0, 0); - if (mine) { - kill(pid, SIGCONT); - } else { - perror(argv0); - kill(pid, SIGKILL); - } - _exit(mine); - case -1: - break; - default: - if (pid == waitpid(pid, 0, 0)) - return; - } - perror(argv0); - _exit(1); -} -#endif /* !TRACEABLE */ - -char * xsh(int argc, char ** argv) -{ - char * scrpt; - int ret, i, j; - char ** varg; - char * me = argv[0]; - if (me == NULL) { me = getenv("_"); } - if (me == 0) { fprintf(stderr, "E: neither argv[0] nor $_ works."); exit(1); } - - ret = chkenv(argc); - stte_0(); - key(pswd, pswd_z); - arc4(msg1, msg1_z); - arc4(date, date_z); - if (date[0] && (atoll(date) 1) ? ret : 0; /* Args numbering correction */ - while (i < argc) - varg[j++] = argv[i++]; /* Main run-time arguments */ - varg[j] = 0; /* NULL terminated array */ -#if DEBUGEXEC - debugexec(shll, j, varg); -#endif - execvp(shll, varg); - return shll; -} - -int main(int argc, char ** argv) -{ -#if SETUID - setuid(0); -#endif -#if DEBUGEXEC - debugexec("main", argc, argv); -#endif -#if HARDENING - hardening(); -#endif -#if !TRACEABLE - untraceable(argv[0]); -#endif - argv[1] = xsh(argc, argv); - fprintf(stderr, "%s%s%s: %s\n", argv[0], - errno ? ": " : "", - errno ? strerror(errno) : "", - argv[1] ? argv[1] : "" - ); - return 1; -}