Anonymous
Кодирование LZ4 и бинарное декодирование
Сообщение
Anonymous » 02 сен 2025, 18:21
Почему это декодирование восстановления Firefox не удается? < /p>
Код: Выделить всё
const profilesPath = path.join(os.homedir(), 'AppData', 'Roaming', 'Mozilla', 'Firefox', 'Profiles');
const defaultProfile = fs.readdirSync(profilesPath).find(profile => profile.includes('.Default'));
const recoveryFile = path.join(profilesPath, defaultProfile, 'sessionstore-backups', 'recovery.jsonlz4');
const rawData = fs.readFileSync(recoveryFile);
const uncompressedSize = rawData.readUInt32LE(8);
const lz4Data = rawData.subarray(12);
const decompressed = Buffer.alloc(uncompressedSize);
lz4.decodeBlock(lz4Data, decompressed);
const jdata = JSON.parse(decompressed.toString('utf8'));
const selectedTab = jdata.windows[0].tabs[jdata.windows[0].selected - 1];
const currentUrl = selectedTab.entries[selectedTab.entries.length - 1].url;
res.json({ activeTabUrl: currentUrl });
< /code>
То же самое с бинарным декодированием данных Google Chrome < /p>
const chromeSessionsPath = path.join(os.homedir(), 'AppData', 'Local', 'Google', 'Chrome', 'User Data', 'Default', 'Sessions');
if (!fs.existsSync(chromeSessionsPath)) {
return res.status(404).json({
error: 'Chrome Sessions directory not found'
});
}
const sessionFiles = fs.readdirSync(chromeSessionsPath);
const tabsFiles = sessionFiles.filter(file => file.startsWith('Tabs_'))
.map(file => ({
name: file,
path: path.join(chromeSessionsPath, file),
mtime: fs.statSync(path.join(chromeSessionsPath, file)).mtime
}))
.sort((a, b) => b.mtime - a.mtime);
if (tabsFiles.length === 0) {
return res.status(404).json({
error: 'No Chrome tabs files found'
});
}
const sessionData = fs.readFileSync(tabsFiles[0].path);
const dataString = sessionData.toString('utf8', 0, Math.min(sessionData.length, 10000));
const urlMatches = dataString.match(/https?:\/\/[^\s\x00-\x1f\x7f-\x9f"{}|\\^`\[\]]+/g);
if (urlMatches && urlMatches.length > 0) {
const currentUrl = urlMatches[urlMatches.length - 1];
res.json({
activeTabUrl: currentUrl
});
} else {
res.status(404).json({
error: 'No URLs found in Chrome session'
});
}
Я хотел создать комбинированный активный URL и просмотра истории для всех моих браузеров, но восстановление данных из этих файлов является громоздким.
Подробнее здесь:
https://stackoverflow.com/questions/797 ... y-decoding
1756826509
Anonymous
Почему это декодирование восстановления Firefox не удается? < /p> [code]const profilesPath = path.join(os.homedir(), 'AppData', 'Roaming', 'Mozilla', 'Firefox', 'Profiles'); const defaultProfile = fs.readdirSync(profilesPath).find(profile => profile.includes('.Default')); const recoveryFile = path.join(profilesPath, defaultProfile, 'sessionstore-backups', 'recovery.jsonlz4'); const rawData = fs.readFileSync(recoveryFile); const uncompressedSize = rawData.readUInt32LE(8); const lz4Data = rawData.subarray(12); const decompressed = Buffer.alloc(uncompressedSize); lz4.decodeBlock(lz4Data, decompressed); const jdata = JSON.parse(decompressed.toString('utf8')); const selectedTab = jdata.windows[0].tabs[jdata.windows[0].selected - 1]; const currentUrl = selectedTab.entries[selectedTab.entries.length - 1].url; res.json({ activeTabUrl: currentUrl }); < /code> То же самое с бинарным декодированием данных Google Chrome < /p> const chromeSessionsPath = path.join(os.homedir(), 'AppData', 'Local', 'Google', 'Chrome', 'User Data', 'Default', 'Sessions'); if (!fs.existsSync(chromeSessionsPath)) { return res.status(404).json({ error: 'Chrome Sessions directory not found' }); } const sessionFiles = fs.readdirSync(chromeSessionsPath); const tabsFiles = sessionFiles.filter(file => file.startsWith('Tabs_')) .map(file => ({ name: file, path: path.join(chromeSessionsPath, file), mtime: fs.statSync(path.join(chromeSessionsPath, file)).mtime })) .sort((a, b) => b.mtime - a.mtime); if (tabsFiles.length === 0) { return res.status(404).json({ error: 'No Chrome tabs files found' }); } const sessionData = fs.readFileSync(tabsFiles[0].path); const dataString = sessionData.toString('utf8', 0, Math.min(sessionData.length, 10000)); const urlMatches = dataString.match(/https?:\/\/[^\s\x00-\x1f\x7f-\x9f"{}|\\^`\[\]]+/g); if (urlMatches && urlMatches.length > 0) { const currentUrl = urlMatches[urlMatches.length - 1]; res.json({ activeTabUrl: currentUrl }); } else { res.status(404).json({ error: 'No URLs found in Chrome session' }); } [/code] Я хотел создать комбинированный активный URL и просмотра истории для всех моих браузеров, но восстановление данных из этих файлов является громоздким. Подробнее здесь: [url]https://stackoverflow.com/questions/79753657/lz4-encoding-and-binary-decoding[/url]