Advertisement
Guest User

Untitled

a guest
May 15th, 2016
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.07 KB | None | 0 0
  1. #include<cctype>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<initializer_list>
  6. #include<dirent.h>
  7. #include<fcntl.h>
  8. #include<grp.h>
  9. #include<linux/rtc.h>
  10. #include<net/if.h>
  11. #include<netinet/in.h>
  12. #include<spawn.h>
  13. #include<sys/mount.h>
  14. #include<sys/reboot.h>
  15. #include<sys/resource.h>
  16. #include<sys/socket.h>
  17. #include<sys/stat.h>
  18. #include<sys/swap.h>
  19. #include<sys/syscall.h>
  20. #include<sys/utsname.h>
  21. #include<sys/wait.h>
  22. #include<unistd.h>
  23. using namespace std;
  24.  
  25. #define exec(...)do{const char*const c[]={__VA_ARGS__,0};execvp(*c,(char*const*)c);}while(0)
  26. #define run(...)do{const char*const c[]={__VA_ARGS__,0};posix_spawnp(0,*c,0,0,(char*const*)c,environ);}while(0)
  27. static auto open2(const char*a,int b){return open(a,b|O_CLOEXEC,S_IRUSR|S_IWUSR);}
  28.  
  29. int main(){
  30. const auto xlk="/tmp/.X0-lock",hor="/root",hou="/home/xxx",_0="0",_1="1";const auto pol=100000;
  31.  
  32. for(auto i=(const char*const[]){"/dev/pts","devpts","gid=5,mode=600","/dev/shm","tmpfs","mode=1777,size=2g","/proc","proc","hidepid=2","/sys","sysfs",0,0};*i;i+=3)
  33.   mount(0,*i,i[1],MS_MGC_VAL|MS_NOEXEC|MS_NOSUID,i[2]);
  34.  
  35. auto ti=open2("/dev/shm/init.log",O_CREAT|O_RDWR);
  36. dup2(ti,STDERR_FILENO);
  37. dup2(ti,STDOUT_FILENO);
  38. dup2(open2("/dev/null",0),STDIN_FILENO);
  39.  
  40. char ts[100];dirent*ent;
  41. auto dir=opendir("/sys/fs/ext4");
  42. while((ent=readdir(dir))&&memcmp(ent->d_name,"sd",2));
  43. snprintf(ts,sizeof ts,"/dev/%s",ent->d_name);
  44. run("/usr/bin/e2fsck","-fvy",ts);
  45.  
  46. utsname unm;
  47. uname(&unm);
  48. snprintf(ts,sizeof ts,"/lib/modules/%s/extra/nvidia.ko",unm.release);
  49. syscall(SYS_finit_module,open2(ts,0),"NVreg_ModifyDeviceFiles=0",0);
  50.  
  51. setsid();
  52. umask(S_IRWXG|S_IRWXO);
  53. for(auto i=(const rlim_t[]){RLIMIT_MEMLOCK,0,RLIMIT_NPROC,300,0};*i;i+=2)
  54.   setrlimit(*i,&(const rlimit&){i[1],i[1]});
  55. for(auto i=(const char*const[]){"DBUS_SESSION_BUS_ADDRESS",_0,"DISPLAY",":0","__GL_SYNC_TO_VBLANK",_0,"HOME",hou,"LADSPA_PATH","/usr/lib/ladspa","LANG","ru_RU.UTF-8","NO_AT_BRIDGE",_1,"PATH","/usr/bin:/opt/bin",0};*i;i+=2)
  56.   setenv(*i,i[1],1);
  57.  
  58. ti=0;
  59. wait(&ti);
  60. if(ti<2)
  61.   mount(0,"/",0,MS_MGC_VAL|MS_LAZYTIME|MS_NOATIME|MS_REMOUNT,"dioread_nolock,errors=remount-ro,lazytime,nobarrier,noblock_validity");
  62. else{
  63.   sync();
  64.   reboot(RB_AUTOBOOT);}
  65.  
  66. remove(xlk);
  67. if(!fork()){
  68.   const gid_t grp[]={1000,10};
  69.   chdir(hou);
  70.   setgroups(sizeof grp/sizeof*grp,grp);
  71.   setgid(*grp);
  72.   setuid(*grp);
  73.   while(access(xlk,F_OK))
  74.     usleep(pol);
  75.   for(const auto&i:(const char*const[][6]){
  76.   {"/usr/bin/openbox",0},
  77.   //skip
  78.     })posix_spawnp(0,*i,0,0,(char*const*)i,environ);
  79.   return 0;}
  80.  
  81. run("/usr/lib/xorg-server/Xorg","-noreset","-novtswitch","vt1","-config","/root/.config/xorg.conf");
  82. for(const auto&i:{"/run/metalog.pid","/run/ppp0.pid"})
  83.   remove(i);
  84. chdir(hor);
  85. setenv("HOME",hor,1);
  86. ti=socket(AF_INET,SOCK_CLOEXEC|SOCK_DGRAM,IPPROTO_IP);
  87. ioctl(ti,SIOCSIFFLAGS,&(const ifreq&){"eth0",IFF_RUNNING|IFF_UP|IFF_BROADCAST|IFF_MULTICAST});
  88. ioctl(ti,SIOCSIFFLAGS,&(const ifreq&){"lo",IFF_RUNNING|IFF_UP|IFF_LOOPBACK});
  89. for(const auto&i:(const char*const[][5]){
  90. {"/usr/bin/metalog","--configfile",".config/metalog.conf",0},
  91. {"/usr/bin/pppd",0},
  92. {"/usr/bin/pdnsd","--nodaemon","--config-file",".config/pdnsd.conf",0},
  93.   })posix_spawnp(0,*i,0,0,(char*const*)i,environ);
  94. swapon("/swap",0);
  95.  
  96. for(auto i=(const char*const[]){
  97. "/proc/sys/kernel/ctrl-alt-del",_0,
  98. //skip
  99.   0};*i;i+=2)write(open2(*i,O_RDWR),i[1],strlen(i[1]));
  100.  
  101. dir=opendir("/proc");
  102. while((ent=readdir(dir)))
  103.   if(isdigit(*ent->d_name)){
  104.     snprintf(ts,sizeof ts,"/proc/%s/comm",ent->d_name);// /proc/*/task/*
  105.     if(read(open2(ts,0),ts,sizeof ts)>0){
  106.       ti=atoi(ent->d_name);
  107.       if(!memcmp(ts,"kswapd0",7))
  108.         setpriority(PRIO_PROCESS,ti,20);
  109.       if(!memcmp(ts,"Xorg",1))
  110.         setpriority(PRIO_PROCESS,ti,-20);
  111.       }}
  112.  
  113. while(open2("/sys/class/sound/pcmC0D0p",0)<0)
  114.   usleep(pol);
  115. run("/usr/bin/alsactl","restore");
  116. //run("/usr/bin/nvidia-smi","--power-limit=113");
  117.  
  118. ti=open2("/dev/tty2",O_RDWR);
  119. dup2(ti,STDERR_FILENO);
  120. dup2(ti,STDOUT_FILENO);
  121. dup2(ti,STDIN_FILENO);
  122. exec("/usr/bin/bash","--login");
  123.  
  124. while(1)
  125.   wait(0);}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement