Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.65 KB | None | 0 0
  1. #if 0
  2. shc Version 3.8.9b, Generic Script Compiler
  3. Copyright (c) 1994-2015 Francisco Rosales <frosal@fi.upm.es>
  4.  
  5. ./shc-3.8.9b/shc -v -r -T -f /home/qqq
  6. #endif
  7.  
  8. static char data [] =
  9. #define lsto_z 1
  10. #define lsto ((&data[0]))
  11. "\271"
  12. #define pswd_z 256
  13. #define pswd ((&data[35]))
  14. "\207\072\157\012\355\040\220\125\365\023\225\253\316\232\272\145"
  15. "\361\034\100\246\053\311\032\062\165\207\363\376\223\173\343\032"
  16. "\265\122\050\063\041\316\064\166\144\211\241\160\213\304\115\357"
  17. "\054\055\233\347\054\214\045\234\317\261\223\365\062\253\347\042"
  18. "\244\017\125\306\336\212\074\103\024\336\264\240\242\001\217\316"
  19. "\057\052\265\133\266\333\370\206\215\214\174\300\067\144\342\334"
  20. "\164\070\242\123\302\336\227\326\274\113\166\137\115\006\056\174"
  21. "\060\344\330\347\300\321\156\115\135\353\015\224\120\360\160\304"
  22. "\050\022\030\353\361\257\302\256\373\071\016\110\077\074\304\157"
  23. "\041\235\127\341\156\305\057\313\261\075\137\001\055\320\305\126"
  24. "\343\336\102\324\216\004\203\211\075\221\321\175\316\226\355\360"
  25. "\063\104\321\241\012\000\154\273\075\314\274\153\235\202\302\200"
  26. "\140\004\125\357\010\330\170\106\152\111\303\071\340\261\051\023"
  27. "\365\372\265\377\373\042\273\071\356\167\245\213\372\147\014\133"
  28. "\153\141\112\163\072\302\272\244\014\176\336\354\057\007\000\045"
  29. "\002\265\045\375\327\340\067\305\130\334\121\122\103\135\255\256"
  30. "\277\367\042\371\272\335\236\306\133\174\262\213\203\262\260\205"
  31. "\150\325\203\077\266\272\005\016\227\127\141\332\264\017\211\163"
  32. "\006\253\045\243\162\265\370\150\311\216\024\230\050\317\376\032"
  33. "\353\077\301\026\011\333\110\176\143\073\175\366\266\140\021\154"
  34. "\263\066\017\045\354\010\216\266\226\242\116\277\161\115\331\134"
  35. "\214\232\163\225\166\273\024\331\366\221\320\255"
  36. #define chk2_z 19
  37. #define chk2 ((&data[353]))
  38. "\245\030\050\313\216\244\016\370\066\077\365\172\337\017\052\121"
  39. "\024\266\315\060\300\324\043"
  40. #define msg1_z 42
  41. #define msg1 ((&data[374]))
  42. "\272\307\277\376\114\050\346\274\366\355\201\273\040\047\330\351"
  43. "\373\167\362\252\123\147\134\036\034\044\144\371\061\157\106\305"
  44. "\322\327\004\005\327\235\064\004\276\223\356\236\374\011\206"
  45. #define tst1_z 22
  46. #define tst1 ((&data[421]))
  47. "\312\343\374\302\060\034\106\053\305\000\004\235\026\134\136\035"
  48. "\327\001\307\110\025\142\037\144\373\076"
  49. #define chk1_z 22
  50. #define chk1 ((&data[447]))
  51. "\215\113\215\050\074\121\334\250\335\343\105\376\151\012\115\063"
  52. "\241\271\063\304\232\024\300\177\360\037\034\235\021"
  53. #define date_z 1
  54. #define date ((&data[474]))
  55. "\360"
  56. #define shll_z 8
  57. #define shll ((&data[477]))
  58. "\032\021\333\117\125\223\006\173\165\352\333"
  59. #define text_z 29
  60. #define text ((&data[492]))
  61. "\336\137\105\065\300\020\065\331\243\174\072\225\323\336\200\333"
  62. "\052\003\322\360\030\050\172\257\135\311\206\051\335\143\115\267"
  63. "\055\225\102\031\273\116\222\055\107"
  64. #define inlo_z 3
  65. #define inlo ((&data[527]))
  66. "\144\323\121"
  67. #define xecc_z 15
  68. #define xecc ((&data[532]))
  69. "\120\223\020\026\242\364\220\024\375\304\251\236\162\246\122\223"
  70. "\005\214\006\251"
  71. #define msg2_z 19
  72. #define msg2 ((&data[552]))
  73. "\176\143\352\242\236\224\256\361\205\353\205\350\011\145\024\266"
  74. "\025\022\232\336\131\231\127\072"
  75. #define rlax_z 1
  76. #define rlax ((&data[574]))
  77. "\201"
  78. #define opts_z 1
  79. #define opts ((&data[575]))
  80. "\320"
  81. #define tst2_z 19
  82. #define tst2 ((&data[576]))
  83. "\227\121\113\317\326\067\050\204\340\237\375\312\171\122\276\315"
  84. "\152\206\316\131\140\046\171"/* End of data[] */;
  85. #define hide_z 4096
  86. #define DEBUGEXEC 0 /* Define as 1 to debug execvp calls */
  87. #define TRACEABLE 1 /* Define as 1 to enable ptrace the executable */
  88.  
  89. /* rtc.c */
  90.  
  91. #include <sys/stat.h>
  92. #include <sys/types.h>
  93.  
  94. #include <errno.h>
  95. #include <stdio.h>
  96. #include <stdlib.h>
  97. #include <string.h>
  98. #include <time.h>
  99. #include <unistd.h>
  100.  
  101. /* 'Alleged RC4' */
  102.  
  103. static unsigned char stte[256], indx, jndx, kndx;
  104.  
  105. /*
  106. * Reset arc4 stte.
  107. */
  108. void stte_0(void)
  109. {
  110. indx = jndx = kndx = 0;
  111. do {
  112. stte[indx] = indx;
  113. } while (++indx);
  114. }
  115.  
  116. /*
  117. * Set key. Can be used more than once.
  118. */
  119. void key(void * str, int len)
  120. {
  121. unsigned char tmp, * ptr = (unsigned char *)str;
  122. while (len > 0) {
  123. do {
  124. tmp = stte[indx];
  125. kndx += tmp;
  126. kndx += ptr[(int)indx % len];
  127. stte[indx] = stte[kndx];
  128. stte[kndx] = tmp;
  129. } while (++indx);
  130. ptr += 256;
  131. len -= 256;
  132. }
  133. }
  134.  
  135. /*
  136. * Crypt data.
  137. */
  138. void arc4(void * str, int len)
  139. {
  140. unsigned char tmp, * ptr = (unsigned char *)str;
  141. while (len > 0) {
  142. indx++;
  143. tmp = stte[indx];
  144. jndx += tmp;
  145. stte[indx] = stte[jndx];
  146. stte[jndx] = tmp;
  147. tmp += stte[indx];
  148. *ptr ^= stte[tmp];
  149. ptr++;
  150. len--;
  151. }
  152. }
  153.  
  154. /* End of ARC4 */
  155.  
  156. /*
  157. * Key with file invariants.
  158. */
  159. int key_with_file(char * file)
  160. {
  161. struct stat statf[1];
  162. struct stat control[1];
  163.  
  164. if (stat(file, statf) < 0)
  165. return -1;
  166.  
  167. /* Turn on stable fields */
  168. memset(control, 0, sizeof(control));
  169. control->st_ino = statf->st_ino;
  170. control->st_dev = statf->st_dev;
  171. control->st_rdev = statf->st_rdev;
  172. control->st_uid = statf->st_uid;
  173. control->st_gid = statf->st_gid;
  174. control->st_size = statf->st_size;
  175. control->st_mtime = statf->st_mtime;
  176. control->st_ctime = statf->st_ctime;
  177. key(control, sizeof(control));
  178. return 0;
  179. }
  180.  
  181. #if DEBUGEXEC
  182. void debugexec(char * sh11, int argc, char ** argv)
  183. {
  184. int i;
  185. fprintf(stderr, "shll=%s\n", sh11 ? sh11 : "<null>");
  186. fprintf(stderr, "argc=%d\n", argc);
  187. if (!argv) {
  188. fprintf(stderr, "argv=<null>\n");
  189. } else {
  190. for (i = 0; i <= argc ; i++)
  191. fprintf(stderr, "argv[%d]=%.60s\n", i, argv[i] ? argv[i] : "<null>");
  192. }
  193. }
  194. #endif /* DEBUGEXEC */
  195.  
  196. void rmarg(char ** argv, char * arg)
  197. {
  198. for (; argv && *argv && *argv != arg; argv++);
  199. for (; argv && *argv; argv++)
  200. *argv = argv[1];
  201. }
  202.  
  203. int chkenv(int argc)
  204. {
  205. char buff[512];
  206. unsigned long mask, m;
  207. int l, a, c;
  208. char * string;
  209. extern char ** environ;
  210.  
  211. mask = (unsigned long)&chkenv;
  212. mask ^= (unsigned long)getpid() * ~mask;
  213. sprintf(buff, "x%lx", mask);
  214. string = getenv(buff);
  215. #if DEBUGEXEC
  216. fprintf(stderr, "getenv(%s)=%s\n", buff, string ? string : "<null>");
  217. #endif
  218. l = strlen(buff);
  219. if (!string) {
  220. /* 1st */
  221. sprintf(&buff[l], "=%lu %d", mask, argc);
  222. putenv(strdup(buff));
  223. return 0;
  224. }
  225. c = sscanf(string, "%lu %d%c", &m, &a, buff);
  226. if (c == 2 && m == mask) {
  227. /* 3rd */
  228. rmarg(environ, &string[-l - 1]);
  229. return 1 + (argc - a);
  230. }
  231. return -1;
  232. }
  233.  
  234. #if !TRACEABLE
  235.  
  236. #define _LINUX_SOURCE_COMPAT
  237. #include <sys/ptrace.h>
  238. #include <sys/types.h>
  239. #include <sys/wait.h>
  240. #include <fcntl.h>
  241. #include <signal.h>
  242. #include <stdio.h>
  243. #include <unistd.h>
  244.  
  245. #if !defined(PTRACE_ATTACH) && defined(PT_ATTACH)
  246. # define PTRACE_ATTACH PT_ATTACH
  247. #endif
  248. void untraceable(char * argv0)
  249. {
  250. char proc[80];
  251. int pid, mine;
  252.  
  253. switch(pid = fork()) {
  254. case 0:
  255. pid = getppid();
  256. /* For problematic SunOS ptrace */
  257. #if defined(__FreeBSD__)
  258. sprintf(proc, "/proc/%d/mem", (int)pid);
  259. #else
  260. sprintf(proc, "/proc/%d/as", (int)pid);
  261. #endif
  262. close(0);
  263. mine = !open(proc, O_RDWR|O_EXCL);
  264. if (!mine && errno != EBUSY)
  265. mine = !ptrace(PTRACE_ATTACH, pid, 0, 0);
  266. if (mine) {
  267. kill(pid, SIGCONT);
  268. } else {
  269. perror(argv0);
  270. kill(pid, SIGKILL);
  271. }
  272. _exit(mine);
  273. case -1:
  274. break;
  275. default:
  276. if (pid == waitpid(pid, 0, 0))
  277. return;
  278. }
  279. perror(argv0);
  280. _exit(1);
  281. }
  282. #endif /* !TRACEABLE */
  283.  
  284. char * xsh(int argc, char ** argv)
  285. {
  286. char * scrpt;
  287. int ret, i, j;
  288. char ** varg;
  289. char * me = argv[0];
  290.  
  291. stte_0();
  292. key(pswd, pswd_z);
  293. arc4(msg1, msg1_z);
  294. arc4(date, date_z);
  295. if (date[0] && (atoll(date)<time(NULL)))
  296. return msg1;
  297. arc4(shll, shll_z);
  298. arc4(inlo, inlo_z);
  299. arc4(xecc, xecc_z);
  300. arc4(lsto, lsto_z);
  301. arc4(tst1, tst1_z);
  302. key(tst1, tst1_z);
  303. arc4(chk1, chk1_z);
  304. if ((chk1_z != tst1_z) || memcmp(tst1, chk1, tst1_z))
  305. return tst1;
  306. ret = chkenv(argc);
  307. arc4(msg2, msg2_z);
  308. if (ret < 0)
  309. return msg2;
  310. varg = (char **)calloc(argc + 10, sizeof(char *));
  311. if (!varg)
  312. return 0;
  313. if (ret) {
  314. arc4(rlax, rlax_z);
  315. if (!rlax[0] && key_with_file(shll))
  316. return shll;
  317. arc4(opts, opts_z);
  318. arc4(text, text_z);
  319. arc4(tst2, tst2_z);
  320. key(tst2, tst2_z);
  321. arc4(chk2, chk2_z);
  322. if ((chk2_z != tst2_z) || memcmp(tst2, chk2, tst2_z))
  323. return tst2;
  324. /* Prepend hide_z spaces to script text to hide it. */
  325. scrpt = malloc(hide_z + text_z);
  326. if (!scrpt)
  327. return 0;
  328. memset(scrpt, (int) ' ', hide_z);
  329. memcpy(&scrpt[hide_z], text, text_z);
  330. } else { /* Reexecute */
  331. if (*xecc) {
  332. scrpt = malloc(512);
  333. if (!scrpt)
  334. return 0;
  335. sprintf(scrpt, xecc, me);
  336. } else {
  337. scrpt = me;
  338. }
  339. }
  340. j = 0;
  341. varg[j++] = argv[0]; /* My own name at execution */
  342. if (ret && *opts)
  343. varg[j++] = opts; /* Options on 1st line of code */
  344. if (*inlo)
  345. varg[j++] = inlo; /* Option introducing inline code */
  346. varg[j++] = scrpt; /* The script itself */
  347. if (*lsto)
  348. varg[j++] = lsto; /* Option meaning last option */
  349. i = (ret > 1) ? ret : 0; /* Args numbering correction */
  350. while (i < argc)
  351. varg[j++] = argv[i++]; /* Main run-time arguments */
  352. varg[j] = 0; /* NULL terminated array */
  353. #if DEBUGEXEC
  354. debugexec(shll, j, varg);
  355. #endif
  356. execvp(shll, varg);
  357. return shll;
  358. }
  359.  
  360. int main(int argc, char ** argv)
  361. {
  362. #if DEBUGEXEC
  363. debugexec("main", argc, argv);
  364. #endif
  365. #if !TRACEABLE
  366. untraceable(argv[0]);
  367. #endif
  368. argv[1] = xsh(argc, argv);
  369. fprintf(stderr, "%s%s%s: %s\n", argv[0],
  370. errno ? ": " : "",
  371. errno ? strerror(errno) : "",
  372. argv[1] ? argv[1] : "<null>"
  373. );
  374. return 1;
  375. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement