Spaces:
Running
Running
File size: 3,287 Bytes
dcbb08f 26f7d9f dcbb08f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
const puppeteer = require('puppeteer');
async function deobfuscateCode(code) {
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
try {
const page = await browser.newPage();
await page.goto('https://obf-io.deobfuscate.io/', {
waitUntil: 'domcontentloaded',
timeout: 30000
});
await new Promise(resolve => setTimeout(resolve, 2000));
await page.waitForSelector('.cm-content', { timeout: 15000 });
await page.evaluate((inputCode) => {
const editors = document.querySelectorAll('.cm-content[contenteditable="true"]');
if (editors.length > 0) {
const editor = editors[0];
editor.focus();
document.execCommand('selectAll', false, null);
document.execCommand('insertText', false, inputCode);
}
}, code);
await new Promise(resolve => setTimeout(resolve, 1500));
const buttonClicked = await page.evaluate(() => {
const buttons = Array.from(document.querySelectorAll('button'));
const deobfButton = buttons.find(btn => btn.textContent.includes('Deobfuscate'));
if (deobfButton) {
deobfButton.click();
return true;
}
return false;
});
if (!buttonClicked) {
throw new Error('Deobfuscate button not found');
}
await new Promise(resolve => setTimeout(resolve, 5000));
await page.waitForFunction(() => {
const editors = document.querySelectorAll('.cm-content[contenteditable="true"]');
return editors.length > 1 && editors[1].textContent.trim().length > 0;
}, { timeout: 15000 }).catch(() => {});
const result = await page.evaluate(() => {
const editors = document.querySelectorAll('.cm-content[contenteditable="true"]');
if (editors.length > 1) {
const outputEditor = editors[1];
let text = '';
const lines = outputEditor.querySelectorAll('.cm-line');
lines.forEach((line, index) => {
text += line.textContent;
if (index < lines.length - 1) text += '\n';
});
return text.trim();
}
return null;
});
if (!result) {
throw new Error('No result found');
}
return result;
} finally {
await browser.close();
}
}
const handler = async (req, res) => {
try {
const { code } = req.body;
if (!code) {
return res.status(400).json({
success: false,
error: 'Missing required parameter: code'
});
}
const deobfuscatedCode = await deobfuscateCode(code);
res.json({
author: "Herza",
success: true,
result: {
original_length: code.length,
deobfuscated_length: deobfuscatedCode.length,
code: deobfuscatedCode
}
});
} catch (error) {
res.status(500).json({
success: false,
error: error.message
});
}
};
module.exports = {
name: 'JavaScript Deobfuscator',
description: 'Deobfuscate obfuscated JavaScript code using obf-io.deobfuscate.io',
type: 'POST',
routes: ['api/tools/deobfuscate'],
tags: ['tools', 'javascript', 'deobfuscate', 'code'],
main: ['tools'],
parameters: ['code'],
enabled: true,
limit: 2,
handler
}; |