Skip to content

Instantly share code, notes, and snippets.

@stylemistake
Last active September 19, 2015 23:52
Show Gist options
  • Save stylemistake/a6ef21c8b72568115749 to your computer and use it in GitHub Desktop.
Save stylemistake/a6ef21c8b72568115749 to your computer and use it in GitHub Desktop.
Tool for getting out information hidden in LSB (steganography, nodejs)
'use strict';
var fs = require('fs');
// --------------------------------------------------------
// Get LSB data from buffer
// --------------------------------------------------------
function bufToLSB(buf, bufBits, bufLE, offset, length, lsbLE) {
if (length === void(0)) {
length = buf.length;
}
if (lsbLE === void(0)) {
lsbLE = false;
}
var bufWord = bufBits / 8;
var bufWordOffset = bufLE ? bufWord - 1 : 0;
var size = (length - offset) / bufWord;
var lsbBufSize = Math.ceil(size / 8);
var lsbBuf = (new Buffer(lsbBufSize)).fill(0);
var lsbBufI = 0;
var i, tmpBufByte, tmpLSBByte = 0;
for (i = 0; i < size; i += 1) {
tmpBufByte = buf[i * bufWord + bufWordOffset + offset];
if (lsbLE) {
tmpLSBByte += (tmpBufByte & 1) << (i % 8);
} else {
tmpLSBByte = (tmpLSBByte << 1) | (tmpBufByte & 1);
}
if (i % 8 === 7) {
lsbBuf.writeUInt8(tmpLSBByte, lsbBufI++);
tmpLSBByte = 0;
}
}
return lsbBuf;
}
// --------------------------------------------------------
// Convenience functions
// --------------------------------------------------------
function buf8ToLSB(buf, offset, length, lsbLE) {
return bufToLSB(buf, 8, false, offset, length, lsbLE);
}
function buf16LEToLSB(buf, offset, length, lsbLE) {
return bufToLSB(buf, 16, true, offset, length, lsbLE);
}
function buf16BEToLSB(buf, offset, length, lsbLE) {
return bufToLSB(buf, 16, false, offset, length, lsbLE);
}
// --------------------------------------------------------
// Analyze
// --------------------------------------------------------
var buf = fs.readFileSync('audio1.wav');
for (var i = 0; i < 8; i += 1) {
var lsb = buf16LEToLSB(buf, 44 + i);
process.stdout.write(lsb.toString() + '\n');
}
for (var i = 0; i < 8; i += 1) {
var lsb = buf16BEToLSB(buf, 44 + i);
process.stdout.write(lsb.toString() + '\n');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment