Skip to content

Commit

Permalink
Display ignored and predefined words differently and separated from t…
Browse files Browse the repository at this point in the history
…he normal parsed words (#42)

* feat(ignored-predefined): display ignored & predefined words separately

* fix(ignored-predefined): remove display from initial mapping
  • Loading branch information
Z-n-o-M committed Jan 12, 2023
1 parent d8b5f22 commit a3caf59
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 15 deletions.
19 changes: 15 additions & 4 deletions src/__tests__/mapper.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ describe("Mapper", () => {
{
prefix: codefendDefaultOptions.obfuscationOptions.prefix,
debug: codefendDefaultOptions.debug,
ignoredWords: codefendDefaultOptions.obfuscationOptions.ignoredWords,
predefinedWords:
codefendDefaultOptions.obfuscationOptions.predefinedWords,
}
);
expect(map).toEqual({ l_var: "Ox0", "lib-file": "Ox1" });
Expand All @@ -41,7 +44,9 @@ describe("Mapper", () => {
};

it("should ignore the word", () => {
map = CodefendCore.mapper.mapIgnoredWords(map, ignoredWords);
map = CodefendCore.mapper.mapIgnoredWords(map, ignoredWords, {
debug: true,
});
expect(map[ignoredWords[0]]).toEqual(ignoredWords[0]);
});
});
Expand All @@ -57,7 +62,9 @@ describe("Mapper", () => {
};

it("should replace with the target word", () => {
map = CodefendCore.mapper.mapPredefinedWords(map, predefinedWords);
map = CodefendCore.mapper.mapPredefinedWords(map, predefinedWords, {
debug: true,
});
expect(map[predefinedWords[0].originalWord]).toEqual(
predefinedWords[0].targetWord
);
Expand All @@ -79,8 +86,12 @@ describe("Mapper", () => {
};

it("ignore > predefined", () => {
map = CodefendCore.mapper.mapIgnoredWords(map, ignoredWords);
map = CodefendCore.mapper.mapPredefinedWords(map, predefinedWords);
map = CodefendCore.mapper.mapIgnoredWords(map, ignoredWords, {
debug: true,
});
map = CodefendCore.mapper.mapPredefinedWords(map, predefinedWords, {
debug: true,
});
expect(map[predefinedWords[0].originalWord]).toEqual(
predefinedWords[0].targetWord
);
Expand Down
39 changes: 32 additions & 7 deletions src/core/mapper/CodefendMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { logger } from "../..";
import {
IBuildMapOptions,
ICodefendPredefinedWordOption,
IMapIgnoredWordsOptions,
IMapPredefinedWordsOptions,
} from "../options/ICodefendOptions";
import { ICodefendParserWord } from "../parser/ICodefendParser";
import { ICodefendMapper } from "./ICodefendMapper";
Expand All @@ -12,15 +14,21 @@ export class CodefendMapper implements ICodefendMapper {
map: Record<string, string>,
options: IBuildMapOptions
) {
const reserved = [
...(options.ignoredWords ?? []),
...(options.predefinedWords?.map((word) => word.originalWord) ?? []),
];
let sequence = Object.keys(map).length;
words.forEach((word) => {
if (map[word.value]) return;
map[word.value] = `${options.prefix}${sequence++}`;
logger.debug(
"Codefend",
`${word.value} --> ${map[word.value]}`,
options.debug
);

if (!reserved.includes(word.value))
logger.debug(
"Codefend",
`${word.value} --> ${map[word.value]}`,
options.debug
);
});
return map;
}
Expand All @@ -36,18 +44,35 @@ export class CodefendMapper implements ICodefendMapper {
}, {});
}

mapIgnoredWords(map: Record<string, string>, ignoredWords: string[]) {
mapIgnoredWords(
map: Record<string, string>,
ignoredWords: string[],
options: IMapIgnoredWordsOptions
) {
ignoredWords.forEach((word: string) => {
if (map[word]) {
logger.debug("Codefend", `${word} (Ignored word)`, options.debug);
}
map[word] = word;
});
return map;
}

mapPredefinedWords(
map: Record<string, string>,
predefinedWords: ICodefendPredefinedWordOption[]
predefinedWords: ICodefendPredefinedWordOption[],
options: IMapPredefinedWordsOptions
) {
predefinedWords.forEach((predefinedWord) => {
if (map[predefinedWord.originalWord]) {
logger.debug(
"Codefend",
`${map[predefinedWord.originalWord]} --> ${
predefinedWord.targetWord
} (Predefined word)`,
options.debug
);
}
map[predefinedWord.originalWord] = predefinedWord.targetWord;
});
return map;
Expand Down
8 changes: 6 additions & 2 deletions src/core/mapper/ICodefendMapper.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import {
IBuildMapOptions,
ICodefendPredefinedWordOption,
IMapIgnoredWordsOptions,
IMapPredefinedWordsOptions,
} from "../options/ICodefendOptions";
import { ICodefendParserWord } from "../parser/ICodefendParser";
export interface ICodefendMapper {
Expand All @@ -12,10 +14,12 @@ export interface ICodefendMapper {
sortMap: (map: Record<string, string>) => Record<string, string>;
mapIgnoredWords: (
map: Record<string, string>,
ignoredWords: string[]
ignoredWords: string[],
options: IMapIgnoredWordsOptions
) => Record<string, string>;
mapPredefinedWords: (
map: Record<string, string>,
predefinedWords: ICodefendPredefinedWordOption[]
predefinedWords: ICodefendPredefinedWordOption[],
options: IMapPredefinedWordsOptions
) => Record<string, string>;
}
10 changes: 10 additions & 0 deletions src/core/options/ICodefendOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,16 @@ export interface ICodefendRegexListOption {
export interface IBuildMapOptions {
prefix: string;
debug: boolean;
predefinedWords?: ICodefendPredefinedWordOption[];
ignoredWords?: string[];
}

export interface IMapIgnoredWordsOptions {
debug: boolean;
}

export interface IMapPredefinedWordsOptions {
debug: boolean;
}

export interface IObfuscateOptions {
Expand Down
12 changes: 10 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,23 @@ export function obfuscate(
CodefendCore.mapper.buildMap(words, map, {
prefix: _options.obfuscationOptions.prefix,
debug: _options.debug,
ignoredWords: _options.obfuscationOptions.ignoredWords,
predefinedWords: _options.obfuscationOptions.predefinedWords,
});
map = CodefendCore.mapper.sortMap(map);
CodefendCore.mapper.mapPredefinedWords(
map,
_options.obfuscationOptions.predefinedWords
_options.obfuscationOptions.predefinedWords,
{
debug: _options.debug,
}
);
CodefendCore.mapper.mapIgnoredWords(
map,
_options.obfuscationOptions.ignoredWords
_options.obfuscationOptions.ignoredWords,
{
debug: _options.debug,
}
);
const output = CodefendCore.replacer.replace(code, map);
return output;
Expand Down

0 comments on commit a3caf59

Please sign in to comment.