Create app.js

This commit is contained in:
UltraLion
2024-07-05 19:36:36 +02:00
committed by GitHub
parent e2077b29bd
commit bfb6623feb
+158
View File
@@ -0,0 +1,158 @@
const express = require('express');
const fs = require('fs');
const app = express();
const port = 3000;
app.use((req, res, next) => {
res.setHeader('X-Powered-By', 'Made by UltraLion');
next();
});
function WinSCP() {
var WSCP_CHARS = [];
var WSCP_SIMPLE_MAGIC = 0xA3;
var WSCP_SIMPLE_STRING = '0123456789ABCDEF';
var WSCP_SIMPLE_MAXLEN = 50;
var WSCP_SIMPLE_FLAG = 0xFF;
var WSCP_SIMPLE_INTERNAL = 0x00;
function rand(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function _simple_encrypt_char(char) {
char = ~char ^ WSCP_SIMPLE_MAGIC;
var a = (char & 0xF0) >> 4;
var b = (char & 0x0F) >> 0;
return [WSCP_SIMPLE_STRING[a], WSCP_SIMPLE_STRING[b]].join('');
}
function _simple_decrypt_next_char() {
if (WSCP_CHARS.length == 0) {
return WSCP_SIMPLE_INTERNAL;
}
var a = WSCP_SIMPLE_STRING.indexOf(WSCP_CHARS.shift());
var b = WSCP_SIMPLE_STRING.indexOf(WSCP_CHARS.shift());
return WSCP_SIMPLE_FLAG & ~(((a << 4) + b << 0) ^ WSCP_SIMPLE_MAGIC);
}
// Encrypt password
this.encrypt = function(username, hostname, password) {
var salt = [username, hostname, password].join(''), shift = 0;
if (salt.length < WSCP_SIMPLE_MAXLEN) {
shift = rand(0, WSCP_SIMPLE_MAXLEN - salt.length);
}
result = [];
result.push(_simple_encrypt_char(WSCP_SIMPLE_FLAG));
result.push(_simple_encrypt_char(WSCP_SIMPLE_INTERNAL));
result.push(_simple_encrypt_char(salt.length));
result.push(_simple_encrypt_char(shift));
for (var i = 0; i < shift; i++) {
result.push(_simple_encrypt_char(rand(0, 256)));
}
for (var i = 0; i < salt.length; i++) {
result.push(_simple_encrypt_char(salt[i].charCodeAt(0)));
}
while (result.length < WSCP_SIMPLE_MAXLEN * 2) {
result.push(_simple_encrypt_char(rand(0, 256)));
}
return result.join('');
}
// Descrypt password
this.decrypt = function(username, hostname, encrypted) {
if (!encrypted.match(/[A-F0-9]+/)) {
return '';
}
var result = [], key = [username, hostname].join('');
WSCP_CHARS = encrypted.split('');
var flag = _simple_decrypt_next_char(), length;
if (flag == WSCP_SIMPLE_FLAG) {
_simple_decrypt_next_char();
length = _simple_decrypt_next_char();
} else {
length = flag;
}
WSCP_CHARS = WSCP_CHARS.slice(_simple_decrypt_next_char() * 2);
for (var i = 0; i < length; i++) {
result.push(String.fromCharCode(_simple_decrypt_next_char()));
}
if (flag == WSCP_SIMPLE_FLAG) {
var valid = result.slice(0, key.length).join('');
if (valid != key) {
result = [];
} else {
result = result.slice(key.length);
}
}
WSCP_CHARS = [];
return result.join('');
}
}
const winSCP = new WinSCP();
function decodePassword(username, hostname, encodedPassword) {
const decodedPassword = winSCP.decrypt(username, hostname, encodedPassword);
return decodedPassword;
}
app.get('/decodeAll', (req, res) => {
const filePath = 'WinSCP.ini'; // Replace with the path to your WinSCP.ini file
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
return res.status(500).send('Error reading file');
}
const sessions = data.split('\n[').filter(session => session.startsWith('Sessions\\'));
const decodedSessions = sessions.map(session => {
const sessionName = decodeURIComponent(session.split(']')[0].replace('Sessions\\', ''));
const usernameLine = session.split('\n').find(line => line.startsWith('UserName='));
const hostnameLine = session.split('\n').find(line => line.startsWith('HostName='));
const passwordLine = session.split('\n').find(line => line.startsWith('Password='));
if (usernameLine && hostnameLine && passwordLine) {
const username = usernameLine.split('=')[1].trim();
const hostname = hostnameLine.split('=')[1].trim();
const encodedPassword = passwordLine.split('=')[1].trim();
const decodedPassword = decodePassword(username, hostname, encodedPassword);
return {
session: sessionName,
username,
hostname,
decodedPassword
};
}
return {
session: sessionName,
decodedPassword: 'Password not found'
};
});
res.send(decodedSessions);
});
});
app.listen(port, () => {
console.log(`Server running on http://localhost:${port}`);
});