mirror of
https://github.com/gchq/CyberChef.git
synced 2024-11-02 22:21:01 +01:00
Added PNG and BMP extractors
This commit is contained in:
parent
3ae225ac59
commit
ede75530d0
@ -57,7 +57,7 @@ export const FILE_SIGNATURES = {
|
||||
6: 0x1a,
|
||||
7: 0x0a
|
||||
},
|
||||
extractor: null
|
||||
extractor: extractPNG
|
||||
},
|
||||
{
|
||||
name: "WEBP Image",
|
||||
@ -150,7 +150,7 @@ export const FILE_SIGNATURES = {
|
||||
16: 0x0,
|
||||
17: 0x0
|
||||
},
|
||||
extractor: null
|
||||
extractor: extractBMP
|
||||
},
|
||||
{
|
||||
name: "JPEG Extended Range image",
|
||||
@ -1233,3 +1233,55 @@ export function extractZIP(bytes, offset) {
|
||||
|
||||
return stream.carve();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* PNG extractor.
|
||||
*
|
||||
* @param {Uint8Array} bytes
|
||||
* @param {number} offset
|
||||
* @returns {Uint8Array}
|
||||
*/
|
||||
export function extractPNG(bytes, offset) {
|
||||
const stream = new Stream(bytes.slice(offset));
|
||||
|
||||
// Move past signature to first chunk
|
||||
stream.moveForwardsBy(8);
|
||||
|
||||
let chunkSize = 0,
|
||||
chunkType = "";
|
||||
|
||||
while (chunkType !== "IEND") {
|
||||
chunkSize = stream.readInt(4, "be");
|
||||
chunkType = stream.readString(4);
|
||||
|
||||
// Chunk data size + CRC checksum
|
||||
stream.moveForwardsBy(chunkSize + 4);
|
||||
}
|
||||
|
||||
|
||||
return stream.carve();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* BMP extractor.
|
||||
*
|
||||
* @param {Uint8Array} bytes
|
||||
* @param {number} offset
|
||||
* @returns {Uint8Array}
|
||||
*/
|
||||
export function extractBMP(bytes, offset) {
|
||||
const stream = new Stream(bytes.slice(offset));
|
||||
|
||||
// Move past header
|
||||
stream.moveForwardsBy(2);
|
||||
|
||||
// Read full file size
|
||||
const bmpSize = stream.readInt(4, "le");
|
||||
|
||||
// Move to end of file (file size minus header and size field)
|
||||
stream.moveForwardsBy(bmpSize - 6);
|
||||
|
||||
return stream.carve();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user