Skip to content

Commit 416b38d

Browse files
fix: broken morse detection (#149)
1 parent 65d31c2 commit 416b38d

File tree

4 files changed

+78
-14
lines changed

4 files changed

+78
-14
lines changed

src/Analysis.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export default class Analysis {
8888
}
8989

9090
// Searching for morse string like "--.- --.--."
91-
if (Utils.stringCharDiversity(str, ["\n"]) >= 3 && Utils.isMorse(str)) {
91+
if (Utils.isMorse(str)) {
9292
this.counter.morseLiteral++;
9393
}
9494
}

src/obfuscators/index.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ export function isObfuscatedCode(analysis) {
3737
if (analysis.counter.identifiers > kMinimumIdsCount && uPrefixNames.size > 0) {
3838
analysis.hasPrefixedIdentifiers = calcAvgPrefixedIdentifiers(analysis, prefix) > 80;
3939
}
40-
// console.log(prefix);
41-
// console.log(oneTimeOccurence);
42-
// console.log(analysis.hasPrefixedIdentifiers);
43-
// console.log(analysis.counter.identifiers);
44-
// console.log(analysis.counter.encodedArrayValue);
4540

4641
if (uPrefixNames.size === 1 && freejsobfuscator.verify(analysis, prefix)) {
4742
encoderName = "freejsobfuscator";
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
function decodeNotMorse(notMorseCode) {
2+
var ref = {
3+
'.': 'a',
4+
'..': 'b',
5+
'...': 'c',
6+
'-': 'd',
7+
'--': 'e',
8+
'---': 'f',
9+
'.-': 'g',
10+
'.--': 'h',
11+
'-.': 'i',
12+
'-..': 'j',
13+
'....': 'k',
14+
'----': 'l',
15+
'.-.-': 'm',
16+
'.--.': 'n',
17+
'....----': 'o',
18+
'...----': 'p',
19+
'..----': 'q',
20+
'.----': 'r',
21+
'. . .': 's',
22+
'- - -': 't',
23+
'. - .': 'u',
24+
'- . -': 'v',
25+
'. . -': 'w',
26+
'- . .': 'x',
27+
'- - .': 'y',
28+
'_': 'z',
29+
'__': '1',
30+
'___': '2',
31+
'____': '3',
32+
'._': '4',
33+
'.__': '5',
34+
'.___': '6',
35+
'__.': '7',
36+
'.-_': '8',
37+
'-._': '9',
38+
'_-.': '0',
39+
};
40+
41+
return notMorseCode
42+
.split(' ')
43+
.map(
44+
a => a
45+
.split(' ')
46+
.map(
47+
b => ref[b]
48+
).join('')
49+
).join(' ');
50+
}
51+
52+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
53+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
54+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
55+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
56+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
57+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
58+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
59+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
60+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
61+
var decoded = decodeNotMorse(".-- --- .-. -.. .-- --- .-. -..");
62+
console.log(decoded);

test/obfuscated.spec.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@ test("should detect 'jsfuck' obfuscation", () => {
2020
assert.strictEqual(warnings[0].value, "jsfuck");
2121
});
2222

23-
// test("should detect 'morse' obfuscation", () => {
24-
// const trycatch = readFileSync(new URL("morse.js", FIXTURE_URL), "utf-8");
25-
// const { warnings } = runASTAnalysis(trycatch);
26-
27-
// assert.strictEqual(warnings.length, 1);
28-
// assert.deepEqual(getWarningKind(warnings), ["obfuscated-code"].sort());
29-
// assert.strictEqual(warnings[0].value, "morse");
30-
// });
23+
test("should detect 'morse' obfuscation", () => {
24+
const trycatch = readFileSync(new URL("morse.js", FIXTURE_URL), "utf-8");
25+
const { warnings } = runASTAnalysis(trycatch);
26+
27+
assert.strictEqual(warnings.length, 1);
28+
assert.deepEqual(getWarningKind(warnings), ["obfuscated-code"].sort());
29+
assert.strictEqual(warnings[0].value, "morse");
30+
});
31+
32+
test("should not detect 'morse' obfuscation", () => {
33+
const trycatch = readFileSync(new URL("notMorse.js", FIXTURE_URL), "utf-8");
34+
const { warnings } = runASTAnalysis(trycatch);
35+
36+
assert.strictEqual(warnings.length, 0);
37+
});
3138

3239
test("should detect 'jjencode' obfuscation", () => {
3340
const trycatch = readFileSync(

0 commit comments

Comments
 (0)