Index: Add support for decrypting and sending back Aime traffic

This commit is contained in:
Ash
2019-11-06 17:28:29 -05:00
committed by Tau
parent 0addd9d045
commit 92e002cbfc
+44 -3
View File
@@ -4,7 +4,7 @@ const fs = require('fs')
const net = require('net')
const billing = require('./billing')
const startup = require('./startup')
const crypto = require('crypto')
const title = require('./title')
const tls = {
@@ -12,14 +12,55 @@ const tls = {
key: fs.readFileSync('pki/server.key'),
}
function encodeAimeBody(buf) {
const keyBuf = Buffer.from('Copyright(C)SEGA', 'utf8')
const ivBuf = Buffer.from('0x00', 'hex')
let cipher = crypto.createCipheriv('aes-128-ecb', keyBuf, ivBuf)
cipher.setAutoPadding(false)
crypted = Buffer.concat([cipher.update(buf), cipher.final()])
return crypted
}
function decodeAimeBody(buf) {
const keyBuf = Buffer.from('Copyright(C)SEGA', 'utf8')
const ivBuf = Buffer.from('0x00', 'hex')
let decipher = crypto.createDecipheriv('aes-128-ecb', keyBuf, ivBuf)
decipher.setAutoPadding(false)
decrypted = Buffer.concat([decipher.update(buf), decipher.final()])
return decrypted
}
function parseMessage(buf) {
switch(buf[4].toString(16)) {
case "64":
var newBuffer = new Buffer.from([0x3e, 0xa1, 0x87, 0x30, 0x65, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]);
console.log(newBuffer)
return newBuffer
break;
case "66":
var newBuffer = new Buffer.from([0x3e, 0xa1, 0x87, 0x30, 0x67, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]);
console.log(newBuffer)
return newBuffer
break;
default:
console.log("No case for "+buf[4].toString(16))
return null
}
}
const server = net.createServer((c) => {
// 'connection' listener
console.log('client connected');
c.on('end', () => {
console.log('client disconnected');
});
c.write('hello\r\n');
c.pipe(c);
c.on('error', (err) => { throw err; });
c.on('data', (data) => {
decode = decodeAimeBody(data);
encode = encodeAimeBody(decodeAimeBody(data)).toString('hex')+'\r\n'
console.log('Decode: '+decode.toString('hex'))
c.write(encodeAimeBody(parseMessage(decode)))
});
c.pipe(c);
});
server.on('error', (err) => {
throw err;