mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-20 23:06:16 -04:00
Merged upstream master
This commit is contained in:
commit
559e32a16a
10 changed files with 70 additions and 169 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -131,6 +131,10 @@ const FlowControl = {
|
||||||
jumpNum = ings[0],
|
jumpNum = ings[0],
|
||||||
maxJumps = ings[1];
|
maxJumps = ings[1];
|
||||||
|
|
||||||
|
if (jumpNum < 0) {
|
||||||
|
jumpNum--;
|
||||||
|
}
|
||||||
|
|
||||||
if (state.numJumps >= maxJumps) {
|
if (state.numJumps >= maxJumps) {
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
@ -158,6 +162,10 @@ const FlowControl = {
|
||||||
jumpNum = ings[1],
|
jumpNum = ings[1],
|
||||||
maxJumps = ings[2];
|
maxJumps = ings[2];
|
||||||
|
|
||||||
|
if (jumpNum < 0) {
|
||||||
|
jumpNum--;
|
||||||
|
}
|
||||||
|
|
||||||
if (state.numJumps >= maxJumps) {
|
if (state.numJumps >= maxJumps) {
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1029,20 +1029,37 @@ const Utils = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var formatFile = function(file, i) {
|
var formatFile = function(file, i) {
|
||||||
|
var blob = new Blob(
|
||||||
|
[new Uint8Array(file.bytes)],
|
||||||
|
{type: "octet/stream"}
|
||||||
|
);
|
||||||
|
var blobUrl = URL.createObjectURL(blob);
|
||||||
|
|
||||||
|
var downloadAnchorElem = "<a href='" + blobUrl + "' " +
|
||||||
|
"title='Download " + Utils.escapeHtml(file.fileName) + "' " +
|
||||||
|
"download='" + Utils.escapeHtml(file.fileName) + "'>\u21B4</a>";
|
||||||
|
|
||||||
|
var expandFileContentsElem = "<a href='#collapse" + i + "' " +
|
||||||
|
"class='collapsed' " +
|
||||||
|
"data-toggle='collapse' " +
|
||||||
|
"aria-expanded='true' " +
|
||||||
|
"aria-controls='collapse" + i + "' " +
|
||||||
|
"title=\"Show/hide contents of '" + Utils.escapeHtml(file.fileName) + "'\">🔍</a>";
|
||||||
|
|
||||||
var html = "<div class='panel panel-default'>" +
|
var html = "<div class='panel panel-default'>" +
|
||||||
"<div class='panel-heading' role='tab' id='heading" + i + "'>" +
|
"<div class='panel-heading' role='tab' id='heading" + i + "'>" +
|
||||||
"<h4 class='panel-title'>" +
|
"<h4 class='panel-title'>" +
|
||||||
"<a class='collapsed' role='button' data-toggle='collapse' " +
|
"<div>" +
|
||||||
"href='#collapse" + i + "' " +
|
Utils.escapeHtml(file.fileName) +
|
||||||
"aria-expanded='true' aria-controls='collapse" + i +"'>" +
|
" " + expandFileContentsElem +
|
||||||
file.fileName +
|
" " + downloadAnchorElem +
|
||||||
"<span class='pull-right'>" +
|
"<span class='pull-right'>" +
|
||||||
// These are for formatting when stripping HTML
|
// These are for formatting when stripping HTML
|
||||||
"<span style='display: none'>\n</span>" +
|
"<span style='display: none'>\n</span>" +
|
||||||
file.size.toLocaleString() + " bytes" +
|
file.size.toLocaleString() + " bytes" +
|
||||||
"<span style='display: none'>\n</span>" +
|
"<span style='display: none'>\n</span>" +
|
||||||
"</span>" +
|
"</span>" +
|
||||||
"</a>" +
|
"</div>" +
|
||||||
"</h4>" +
|
"</h4>" +
|
||||||
"</div>" +
|
"</div>" +
|
||||||
"<div id='collapse" + i + "' class='panel-collapse collapse' " +
|
"<div id='collapse" + i + "' class='panel-collapse collapse' " +
|
||||||
|
|
|
@ -34,6 +34,7 @@ const Base64 = {
|
||||||
{name: "Xxencoding: +-0-9A-Za-z", value: "+\\-0-9A-Za-z"},
|
{name: "Xxencoding: +-0-9A-Za-z", value: "+\\-0-9A-Za-z"},
|
||||||
{name: "BinHex: !-,-0-689@A-NP-VX-Z[`a-fh-mp-r", value: "!-,-0-689@A-NP-VX-Z[`a-fh-mp-r"},
|
{name: "BinHex: !-,-0-689@A-NP-VX-Z[`a-fh-mp-r", value: "!-,-0-689@A-NP-VX-Z[`a-fh-mp-r"},
|
||||||
{name: "ROT13: N-ZA-Mn-za-m0-9+/=", value: "N-ZA-Mn-za-m0-9+/="},
|
{name: "ROT13: N-ZA-Mn-za-m0-9+/=", value: "N-ZA-Mn-za-m0-9+/="},
|
||||||
|
{name: "UNIX crypt: ./0-9A-Za-z", value: "./0-9A-Za-z"},
|
||||||
],
|
],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,7 +106,7 @@ const Base64 = {
|
||||||
enc3 = (chr2 >> 1) & 31;
|
enc3 = (chr2 >> 1) & 31;
|
||||||
enc4 = ((chr2 & 1) << 4) | (chr3 >> 4);
|
enc4 = ((chr2 & 1) << 4) | (chr3 >> 4);
|
||||||
enc5 = ((chr3 & 15) << 1) | (chr4 >> 7);
|
enc5 = ((chr3 & 15) << 1) | (chr4 >> 7);
|
||||||
enc6 = (chr4 >> 2) & 63;
|
enc6 = (chr4 >> 2) & 31;
|
||||||
enc7 = ((chr4 & 3) << 3) | (chr5 >> 5);
|
enc7 = ((chr4 & 3) << 3) | (chr5 >> 5);
|
||||||
enc8 = chr5 & 31;
|
enc8 = chr5 & 31;
|
||||||
|
|
||||||
|
|
|
@ -327,9 +327,8 @@ const Compress = {
|
||||||
files = [];
|
files = [];
|
||||||
|
|
||||||
filenames.forEach(function(fileName) {
|
filenames.forEach(function(fileName) {
|
||||||
var contents = unzip.decompress(fileName);
|
var bytes = unzip.decompress(fileName);
|
||||||
|
var contents = Utils.byteArrayToUtf8(bytes);
|
||||||
contents = Utils.byteArrayToUtf8(contents);
|
|
||||||
|
|
||||||
var file = {
|
var file = {
|
||||||
fileName: fileName,
|
fileName: fileName,
|
||||||
|
@ -338,6 +337,7 @@ const Compress = {
|
||||||
|
|
||||||
var isDir = contents.length === 0 && fileName.endsWith("/");
|
var isDir = contents.length === 0 && fileName.endsWith("/");
|
||||||
if (!isDir) {
|
if (!isDir) {
|
||||||
|
file.bytes = bytes;
|
||||||
file.contents = contents;
|
file.contents = contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -495,6 +495,13 @@ const Compress = {
|
||||||
this.position = 0;
|
this.position = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Stream.prototype.getBytes = function(bytesToGet) {
|
||||||
|
var newPosition = this.position + bytesToGet;
|
||||||
|
var bytes = this.bytes.slice(this.position, newPosition);
|
||||||
|
this.position = newPosition;
|
||||||
|
return bytes;
|
||||||
|
};
|
||||||
|
|
||||||
Stream.prototype.readString = function(numBytes) {
|
Stream.prototype.readString = function(numBytes) {
|
||||||
var result = "";
|
var result = "";
|
||||||
for (var i = this.position; i < this.position + numBytes; i++) {
|
for (var i = this.position; i < this.position + numBytes; i++) {
|
||||||
|
@ -553,11 +560,9 @@ const Compress = {
|
||||||
endPosition += 512 - (file.size % 512);
|
endPosition += 512 - (file.size % 512);
|
||||||
}
|
}
|
||||||
|
|
||||||
file.contents = "";
|
file.bytes = stream.getBytes(file.size);
|
||||||
|
file.contents = Utils.byteArrayToUtf8(file.bytes);
|
||||||
while (stream.position < endPosition) {
|
stream.position = endPosition;
|
||||||
file.contents += stream.readString(512);
|
|
||||||
}
|
|
||||||
} else if (file.type === "5") {
|
} else if (file.type === "5") {
|
||||||
// Directory
|
// Directory
|
||||||
files.push(file);
|
files.push(file);
|
||||||
|
|
|
@ -20,8 +20,8 @@ const HTTP = {
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
runStripHeaders: function(input, args) {
|
runStripHeaders: function(input, args) {
|
||||||
var headerEnd = input.indexOf("\r\n\r\n") +
|
var headerEnd = input.indexOf("\r\n\r\n");
|
||||||
(headerEnd < 0) ? input.indexOf("\n\n") + 2 : headerEnd + 4;
|
headerEnd = (headerEnd < 0) ? input.indexOf("\n\n") + 2 : headerEnd + 4;
|
||||||
|
|
||||||
return (headerEnd < 2) ? input : input.slice(headerEnd, input.length);
|
return (headerEnd < 2) ? input : input.slice(headerEnd, input.length);
|
||||||
},
|
},
|
||||||
|
|
|
@ -212,6 +212,22 @@ const IP = {
|
||||||
output += "\nThis is a reserved multicast address.";
|
output += "\nThis is a reserved multicast address.";
|
||||||
output += "\nMulticast addresses range: ff00::/8";
|
output += "\nMulticast addresses range: ff00::/8";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Detect possible EUI-64 addresses
|
||||||
|
if ((ipv6[5] & 0xff === 0xff) && (ipv6[6] >>> 8 === 0xfe)) {
|
||||||
|
output += "\n\nThis IPv6 address contains a modified EUI-64 address, identified by the presence of FF:FE in the 12th and 13th octets.";
|
||||||
|
|
||||||
|
var intIdent = Utils.hex(ipv6[4] >>> 8) + ":" + Utils.hex(ipv6[4] & 0xff) + ":" +
|
||||||
|
Utils.hex(ipv6[5] >>> 8) + ":" + Utils.hex(ipv6[5] & 0xff) + ":" +
|
||||||
|
Utils.hex(ipv6[6] >>> 8) + ":" + Utils.hex(ipv6[6] & 0xff) + ":" +
|
||||||
|
Utils.hex(ipv6[7] >>> 8) + ":" + Utils.hex(ipv6[7] & 0xff),
|
||||||
|
mac = Utils.hex((ipv6[4] >>> 8) ^ 2) + ":" + Utils.hex(ipv6[4] & 0xff) + ":" +
|
||||||
|
Utils.hex(ipv6[5] >>> 8) + ":" + Utils.hex(ipv6[6] & 0xff) + ":" +
|
||||||
|
Utils.hex(ipv6[7] >>> 8) + ":" + Utils.hex(ipv6[7] & 0xff);
|
||||||
|
output += "\nInterface identifier: " + intIdent +
|
||||||
|
"\nMAC address: " + mac;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return "Invalid IPv6 address";
|
return "Invalid IPv6 address";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
129 source files
|
128 source files
|
||||||
49149 lines
|
49196 lines
|
||||||
1.9M size
|
1.9M size
|
||||||
|
|
||||||
63 JavaScript source files
|
63 JavaScript source files
|
||||||
20966 lines
|
21013 lines
|
||||||
788K size
|
788K size
|
||||||
|
|
||||||
uncompressed JavaScript size
|
uncompressed JavaScript size
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue