├── readme.md ├── decodeLevels.js ├── decodeSave.js └── crypto.js /readme.md: -------------------------------------------------------------------------------- 1 | ![](https://i.imgur.com/lWdA3OU.gif) -------------------------------------------------------------------------------- /decodeLevels.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const Crypto = require('./crypto.js') 3 | let crypto = new Crypto() 4 | 5 | let gdSave = process.env.HOME || process.env.USERPROFILE + "/AppData/Local/GeometryDash/CCLocalLevels.dat" 6 | 7 | fs.readFile(gdSave, 'utf8', function (err, saveData) { 8 | if (err) return console.log("Error! Could not open or find GD save file") 9 | let decoded = crypto.decode(saveData) 10 | if (!decoded) return 11 | fs.writeFileSync('CCLocalLevels.xml', decoded, 'utf8') 12 | console.log(`Saved!`); 13 | }) -------------------------------------------------------------------------------- /decodeSave.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const Crypto = require('./crypto.js') 3 | let crypto = new Crypto() 4 | 5 | let gdSave = process.env.HOME || process.env.USERPROFILE + "/AppData/Local/GeometryDash/CCGameManager.dat" 6 | 7 | fs.readFile(gdSave, 'utf8', function (err, saveData) { 8 | if (err) return console.log("Error! Could not open or find GD save file") 9 | let decoded = crypto.decode(saveData) 10 | if (!decoded) return 11 | fs.writeFileSync('CCGameManager.xml', decoded, 'utf8') 12 | console.log(`Saved!`); 13 | }) -------------------------------------------------------------------------------- /crypto.js: -------------------------------------------------------------------------------- 1 | const zlib = require('zlib') 2 | 3 | module.exports = class crypto { 4 | 5 | xor(str, key) { 6 | str = String(str).split('').map(letter => letter.charCodeAt()); 7 | let res = ""; 8 | for (let i = 0; i < str.length; i++) res += String.fromCodePoint(str[i] ^ key); 9 | return res; 10 | } 11 | 12 | decode(data) { 13 | console.log("Decoding...") 14 | if (data.startsWith('')) return data 15 | let decoded = this.xor(data, 11) 16 | decoded = Buffer.from(decoded, 'base64') 17 | try { return zlib.unzipSync(decoded).toString() } 18 | catch (e) { return console.log("Error! GD save file seems to be corrupt!") } 19 | } 20 | 21 | } --------------------------------------------------------------------------------