mirror of
https://github.com/gchq/CyberChef.git
synced 2025-05-11 16:51:31 -04:00
Currently Working
This commit is contained in:
parent
a35e3348d8
commit
34faeca7ba
1 changed files with 42 additions and 48 deletions
|
@ -244,6 +244,45 @@ class Magic {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async regexesTests(flag, sensible, prevOp, depth, extLang, intensive, recipeConfig, crib) {
|
||||||
|
let results = []
|
||||||
|
// Execute each of the matching operations, then recursively call the speculativeExecution()
|
||||||
|
// method on the resulting data, recording the properties of each option.
|
||||||
|
await Promise.all(sensible.map(async op => {
|
||||||
|
const opConfig = {
|
||||||
|
op: op.op,
|
||||||
|
args: op.args
|
||||||
|
},
|
||||||
|
output = await this._runRecipe([opConfig]);
|
||||||
|
|
||||||
|
// If the recipe is repeating and returning the same data, do not continue
|
||||||
|
if (prevOp && op.op === prevOp.op && _buffersEqual(output, this.inputBuffer)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the recipe returned an empty buffer, do not continue
|
||||||
|
if (_buffersEqual(output, new ArrayBuffer())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (flag) {
|
||||||
|
const outputRegexes = OperationConfig[op.op].outputRegexes;
|
||||||
|
if (outputRegexes)
|
||||||
|
for (const pattern of outputRegexes)
|
||||||
|
if (!(new RegExp(pattern.match, pattern.flags).test(Utils.arrayBufferToStr(output))))
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
if(!(new RegExp(op.match, op.flags).test(Utils.arrayBufferToStr(output))))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const magic = new Magic(output, this.opPatterns),
|
||||||
|
speculativeResults = await magic.speculativeExecution(
|
||||||
|
depth-1, extLang, intensive, [...recipeConfig, opConfig], op.useful, crib);
|
||||||
|
|
||||||
|
results = results.concat(speculativeResults);
|
||||||
|
}));
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Speculatively executes matching operations, recording metadata of each result.
|
* Speculatively executes matching operations, recording metadata of each result.
|
||||||
*
|
*
|
||||||
|
@ -279,58 +318,13 @@ class Magic {
|
||||||
});
|
});
|
||||||
const prevOp = recipeConfig[recipeConfig.length - 1];
|
const prevOp = recipeConfig[recipeConfig.length - 1];
|
||||||
|
|
||||||
/**
|
results = results.concat(await this.regexesTests(1, matchingOps, prevOp, depth, extLang, intensive, recipeConfig, crib));
|
||||||
*
|
results = results.concat(await this.regexesTests(0, this.opPatterns.getOutputRegexes(), prevOp, depth, extLang, intensive, recipeConfig, crib));
|
||||||
* @param flag
|
|
||||||
* @param sensible
|
|
||||||
*/
|
|
||||||
async function regexesTests(flag, sensible) {
|
|
||||||
|
|
||||||
// Execute each of the matching operations, then recursively call the speculativeExecution()
|
|
||||||
// method on the resulting data, recording the properties of each option.
|
|
||||||
await Promise.all(sensible.map(async op => {
|
|
||||||
const opConfig = {
|
|
||||||
op: op.op,
|
|
||||||
args: op.args
|
|
||||||
},
|
|
||||||
output = await this._runRecipe([opConfig]);
|
|
||||||
|
|
||||||
// If the recipe is repeating and returning the same data, do not continue
|
|
||||||
if (prevOp && op.op === prevOp.op && _buffersEqual(output, this.inputBuffer)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the recipe returned an empty buffer, do not continue
|
|
||||||
if (_buffersEqual(output, new ArrayBuffer())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (flag) {
|
|
||||||
const outputRegexes = OperationConfig[op.op].outputRegexes;
|
|
||||||
if (outputRegexes)
|
|
||||||
for (const pattern of outputRegexes)
|
|
||||||
if (!(new RegExp(pattern.match, pattern.flags).test(Utils.arrayBufferToStr(output))))
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
if (!(op.match.test(output))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const magic = new Magic(output, this.opPatterns),
|
|
||||||
speculativeResults = await magic.speculativeExecution(
|
|
||||||
depth-1, extLang, intensive, [...recipeConfig, opConfig], op.useful, crib);
|
|
||||||
|
|
||||||
results = results.concat(speculativeResults);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
regexesTests(1, matchingOps);
|
|
||||||
// regexesTests(0, this.opPatterns.getOutputRegexes());
|
|
||||||
// console.log("haha", results);
|
// console.log("haha", results);
|
||||||
|
|
||||||
if (intensive) {
|
if (intensive) {
|
||||||
// Run brute forcing of various types on the data and create a new branch for each option
|
// Run brute forcing of various types on the data and create a new branch for each option
|
||||||
const bfEncodings = await this.bruteForce();
|
const bfEncodings = await this.bruteForce();
|
||||||
|
|
||||||
await Promise.all(bfEncodings.map(async enc => {
|
await Promise.all(bfEncodings.map(async enc => {
|
||||||
const magic = new Magic(enc.data, this.opPatterns),
|
const magic = new Magic(enc.data, this.opPatterns),
|
||||||
bfResults = await magic.speculativeExecution(
|
bfResults = await magic.speculativeExecution(
|
||||||
|
@ -353,7 +347,7 @@ class Magic {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log("important", prunedResults);
|
// console.log("important", prunedResults);
|
||||||
|
|
||||||
// Return a sorted list of possible recipes along with their properties
|
// Return a sorted list of possible recipes along with their properties
|
||||||
return prunedResults.sort((a, b) => {
|
return prunedResults.sort((a, b) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue