| const crypto = require('crypto'); |
| const fs = require('fs'); |
|
|
| const resp = JSON.parse(fs.readFileSync('E:\\laragon\\www\\project\\data\\anime-responses.json', 'utf8')); |
| const infoBody = resp[0].body; |
|
|
| const key = Buffer.from([107,105,101,109,116,105,101,110,109,117,97,57,49,49,99,97]); |
| const iv = Buffer.from([49,50,51,52,53,54,55,56,57,48,111,105,117,121,116,114]); |
|
|
| console.log('Body length:', infoBody.length); |
| console.log('Key length:', key.length, '| IV length:', iv.length); |
|
|
| const cipherBuf = Buffer.from(infoBody, 'hex'); |
| console.log('Cipher buffer length:', cipherBuf.length); |
|
|
| const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv); |
| let dec = decipher.update(cipherBuf); |
| dec = Buffer.concat([dec, decipher.final()]); |
| const json = dec.toString('utf8'); |
| console.log('Decrypted length:', json.length); |
|
|
| const obj = JSON.parse(json); |
| console.log('\nKeys:', Object.keys(obj)); |
|
|
| |
| const findUrls = (o, path = '') => { |
| for (const [k, v] of Object.entries(o || {})) { |
| const p = path ? `${path}.${k}` : k; |
| if (typeof v === 'string' && (v.includes('http') || v.includes('m3u8') || v.includes('.mp4') || v.includes('.ts'))) { |
| console.log(`${p}: ${v.substring(0, 300)}`); |
| } else if (typeof v === 'object' && v !== null) { |
| findUrls(v, p); |
| } |
| } |
| }; |
| findUrls(obj); |
|
|
| fs.writeFileSync('E:\\laragon\\www\\project\\data\\anime-decrypted.json', JSON.stringify(obj, null, 2)); |
| console.log('\nSaved to anime-decrypted.json'); |
|
|