admin管理员组文章数量:1425951
Request to api of mega.nz, parse url for get private key of folder, and try decode name of files from responde of request, by crypto of nodejs.
My code:
const crypto = require('crypto')
const parse = require('url').parse
const request = require('request')
const link = '!gE5WkDpS!Yh6AQtYHPgi-rEkir_gAEw'
const api = ';n=MBwjmCqR'
function d64 (s) {
s += '=='.substr((2 - s.length * 3) & 3)
s = s.replace(/-/g, '+').replace(/_/g, '/').replace(/,/g, '')
return new Buffer(s, 'base64')
}
function from256to128 (s) {
var o = new Buffer(16)
for (var i = 0; i < 16; i++) {
o[i] = s[i] ^ s[i + 16]
}
return o
}
function decodeName (at) {
var end = at.length
while (!at.readUInt8(end - 1)) end--
return at.slice(0, end).toString()
}
const url = parse(link)
const split = url.hash.split('!')
const k0 = d64(split[2])
request({
method: 'POST', uri: api, body: '[{"a":"f","c":1,"r":1,"ca":1}]'
}, (e, r, b) => {
if (!e && r.statusCode === 200) {
for (let file of JSON.parse(b)[0].f) {
if (file.t === 1) {
let k = d64(file.k.split(':')[1])
let a = d64(file.a)
let aes = crypto.createDecipheriv('aes-128-ecb', k0, Buffer(0))
aes.setAutoPadding(false)
let kdec = aes.update(k)
aes = crypto.createDecipheriv('aes-128-cbc', kdec, Buffer(16))
aes.setAutoPadding(false)
let name = decodeName(aes.update(a))
console.log(name)
} else {
let k = d64(file.k.split(':')[1])
let a = d64(file.a)
let aes = crypto.createDecipheriv('aes-128-ecb', k0, Buffer(0))
aes.setAutoPadding(false)
let k2dec = from256to128(aes.update(k))
aes = crypto.createDecipheriv('aes-128-cbc', k2dec, Buffer(16))
aes.setAutoPadding(false)
let name = decodeName(aes.update(a))
console.log(name)
}
}
}
})
My output is more broken text, i try change url and get more broken text:
�MzM�ݾ��+,�BW���p�K����
Request to api of mega.nz, parse url for get private key of folder, and try decode name of files from responde of request, by crypto of nodejs.
My code:
const crypto = require('crypto')
const parse = require('url').parse
const request = require('request')
const link = 'https://mega.nz/#F!gE5WkDpS!Yh6AQtYHPgi-rEkir_gAEw'
const api = 'https://eu.api.mega.co.nz/cs?id=-1771463320&n=MBwjmCqR'
function d64 (s) {
s += '=='.substr((2 - s.length * 3) & 3)
s = s.replace(/-/g, '+').replace(/_/g, '/').replace(/,/g, '')
return new Buffer(s, 'base64')
}
function from256to128 (s) {
var o = new Buffer(16)
for (var i = 0; i < 16; i++) {
o[i] = s[i] ^ s[i + 16]
}
return o
}
function decodeName (at) {
var end = at.length
while (!at.readUInt8(end - 1)) end--
return at.slice(0, end).toString()
}
const url = parse(link)
const split = url.hash.split('!')
const k0 = d64(split[2])
request({
method: 'POST', uri: api, body: '[{"a":"f","c":1,"r":1,"ca":1}]'
}, (e, r, b) => {
if (!e && r.statusCode === 200) {
for (let file of JSON.parse(b)[0].f) {
if (file.t === 1) {
let k = d64(file.k.split(':')[1])
let a = d64(file.a)
let aes = crypto.createDecipheriv('aes-128-ecb', k0, Buffer(0))
aes.setAutoPadding(false)
let kdec = aes.update(k)
aes = crypto.createDecipheriv('aes-128-cbc', kdec, Buffer(16))
aes.setAutoPadding(false)
let name = decodeName(aes.update(a))
console.log(name)
} else {
let k = d64(file.k.split(':')[1])
let a = d64(file.a)
let aes = crypto.createDecipheriv('aes-128-ecb', k0, Buffer(0))
aes.setAutoPadding(false)
let k2dec = from256to128(aes.update(k))
aes = crypto.createDecipheriv('aes-128-cbc', k2dec, Buffer(16))
aes.setAutoPadding(false)
let name = decodeName(aes.update(a))
console.log(name)
}
}
}
})
My output is more broken text, i try change url and get more broken text:
�MzM�ݾ��+,�BW���p�K����
Share
Improve this question
asked Jul 8, 2016 at 20:59
lobitolobito
1211 gold badge1 silver badge5 bronze badges
2
-
You're requesting info for the
MBwjmCqR
folder and trying to decrypt it usinggE5WkDpS
key. But seems it's not the only problem. – Gustavo Rodrigues Commented Jul 26, 2016 at 17:52 -
Found the problem: use the correct key (as I noted above) then use
Buffer.alloc(0)
andBuffer.alloc(16)
instead ofBuffer(0)
andBuffer(16)
. – Gustavo Rodrigues Commented Dec 6, 2016 at 11:00
1 Answer
Reset to default 1There are two errors in your code:
const link = 'https://mega.nz/#F!gE5WkDpS!Yh6AQtYHPgi-rEkir_gAEw'
const api = 'https://eu.api.mega.co.nz/cs?id=-1771463320&n=MBwjmCqR'
You're requesting MBwjmCqR
folder info but using gE5WkDpS
key.
let aes = crypto.createDecipheriv('aes-128-ecb', k0, Buffer(0))
aes = crypto.createDecipheriv('aes-128-cbc', kdec, Buffer(16))
Using Buffer(size)
will not initialize it, so the Buffer will contain data that was previously in memory. Use Buffer.alloc(size, 0)
to initialize it with zeroes, which will match MEGA's implementation.
本文标签: javascriptget name files of a meganz folder in nodejsStack Overflow
版权声明:本文标题:javascript - get name files of a mega.nz folder in nodejs - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745420551a2657881.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论