diff --git a/src/index.js b/src/index.js index 612c2fd..ef2a7bd 100644 --- a/src/index.js +++ b/src/index.js @@ -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;