diff --git a/arkguard/src/ArkObfuscator.ts b/arkguard/src/ArkObfuscator.ts index 7bb3e1064805d15ef7abfeb6f1a5ce51cf31e2b9..c266e27d00654eab62bee43caca3515dd8350ebb 100644 --- a/arkguard/src/ArkObfuscator.ts +++ b/arkguard/src/ArkObfuscator.ts @@ -210,9 +210,9 @@ export class ArkObfuscator { config = FileUtils.readFileAsJson(this.mConfigPath); // this.mConfigPath from Arkguard unit test handleReservedConfig(config, 'mNameObfuscation', 'mReservedProperties', 'mUniversalReservedProperties'); + handleReservedConfig(config, 'mNameObfuscation', 'mReservedToplevelNames', 'mUniversalReservedToplevelNames'); } - handleReservedConfig(config, 'mNameObfuscation', 'mReservedToplevelNames', 'mUniversalReservedToplevelNames'); handleReservedConfig(config, 'mRenameFileName', 'mReservedFileNames', 'mUniversalReservedFileNames'); handleReservedConfig(config, 'mRemoveDeclarationComments', 'mReservedComments', 'mUniversalReservedComments', 'mEnable'); this.mCustomProfiles = config; diff --git a/arkguard/src/common/ApiExtractor.ts b/arkguard/src/common/ApiExtractor.ts index 3bc46356647898ea259d4d28a0f29896a6ebebdb..2f2f3e0f323bf235f524290d37d58362079a3344 100644 --- a/arkguard/src/common/ApiExtractor.ts +++ b/arkguard/src/common/ApiExtractor.ts @@ -85,6 +85,7 @@ export namespace ApiExtractor { export let mPropertySet: Set = new Set(); export let mLibExportNameSet: Set = new Set(); export let mConstructorPropertySet: Set = undefined; + export let mSystemExportSet: Set = new Set(); /** * filter classes or interfaces with export, default, etc */ @@ -478,6 +479,7 @@ export namespace ApiExtractor { case ApiType.API: mCurrentExportNameSet.clear(); forEachChild(sourceFile, visitExport); + mCurrentExportNameSet.forEach(item => mSystemExportSet.add(item)); forEachChild(sourceFile, visitPropertyAndName); mCurrentExportNameSet.clear(); diff --git a/arkguard/test/ut/arkobfuscator/ArkObfuscator.spec.ts b/arkguard/test/ut/arkobfuscator/ArkObfuscator.spec.ts index deef09b046959377afa3b8f2147d906e69ddf4e5..18f64a6fe8c2fedf08d341e5c1d782d22b047a11 100644 --- a/arkguard/test/ut/arkobfuscator/ArkObfuscator.spec.ts +++ b/arkguard/test/ut/arkobfuscator/ArkObfuscator.spec.ts @@ -15,7 +15,7 @@ import { describe, it } from 'mocha'; import { assert } from 'chai'; -import { ArkObfuscator, FileUtils } from '../../../src/ArkObfuscator'; +import { ArkObfuscator, FileUtils, wildcardTransformer } from '../../../src/ArkObfuscator'; import path from 'path'; import { TransformerFactory, Node, SourceFile, createSourceFile, ScriptTarget, Printer, createTextWriter, RawSourceMap } from 'typescript'; import { IOptions } from '../../../src/configs/IOptions'; @@ -160,6 +160,46 @@ class Demo{ console.log(actualContent); }); }); + + describe('Tester Cases for .', function () { + it('Tester: test case for ArkObfuscator.ini: mConfigPath != ""', function (){ + let configPath = "test/ut/arkobfuscator/iniTestObfConfig.json" + let obfuscator: ArkObfuscator = new ArkObfuscator(undefined, configPath); + let initSuccess = obfuscator.init(); + let config = obfuscator.customProfiles; + let reservedTopelevelNames = config.mNameObfuscation?.mReservedToplevelNames; + let reservedProperty = config.mNameObfuscation?.mReservedProperties; + let universalReservedToplevelNames = config.mNameObfuscation?.mUniversalReservedToplevelNames as RegExp[]; + let universalReservedProperties = config.mNameObfuscation?.mUniversalReservedProperties as RegExp[]; + assert.isTrue(reservedTopelevelNames?.includes("func2")); + assert.isTrue(reservedProperty?.includes("prop")); + assert.equal(universalReservedToplevelNames[0].toString(), new RegExp(`^${wildcardTransformer("a*")}$`).toString()); + assert.equal(universalReservedToplevelNames[1].toString(), new RegExp(`^${wildcardTransformer("*shoul?keep*")}$`).toString()); + assert.equal(universalReservedProperties[0].toString(), new RegExp(`^${wildcardTransformer("prop?")}$`).toString()); + assert.equal(universalReservedProperties[2].toString(), new RegExp(`^${wildcardTransformer("*pro?")}$`).toString()); + assert.equal(universalReservedProperties[1].toString(), new RegExp(`^${wildcardTransformer("function*")}$`).toString()); + }); + + it('Tester: test case for ArkObfuscator.ini: mConfigPath == ""', function (){ + let configPath = "test/ut/arkobfuscator/iniTestObfConfig.json" + let obfuscator: ArkObfuscator = new ArkObfuscator(); + let config = FileUtils.readFileAsJson(configPath) as IOptions; + let initSuccess = obfuscator.init(config); + let reservedTopelevelNames = config.mNameObfuscation?.mReservedToplevelNames; + let reservedProperty = config.mNameObfuscation?.mReservedProperties; + let universalReservedToplevelNames = config.mNameObfuscation?.mUniversalReservedToplevelNames; + let universalReservedProperties = config.mNameObfuscation?.mUniversalReservedProperties; + assert.isTrue(reservedTopelevelNames?.includes("func2")); + assert.isTrue(reservedTopelevelNames?.includes("a*")); + assert.isTrue(reservedTopelevelNames?.includes("*shoul?keep*")); + assert.isTrue(reservedProperty?.includes("prop")); + assert.isTrue(reservedProperty?.includes("prop?")); + assert.isTrue(reservedProperty?.includes("*pro?")); + assert.isTrue(reservedProperty?.includes("function*")); + assert.equal(universalReservedToplevelNames, undefined); + assert.equal(universalReservedProperties, undefined); + }); + }); }); function compareStringsIgnoreNewlines(str1: string, str2: string): boolean { diff --git a/arkguard/test/ut/arkobfuscator/iniTestObfConfig.json b/arkguard/test/ut/arkobfuscator/iniTestObfConfig.json new file mode 100644 index 0000000000000000000000000000000000000000..c4ce5a7e3f7c189ce3119e04563df632d13371a1 --- /dev/null +++ b/arkguard/test/ut/arkobfuscator/iniTestObfConfig.json @@ -0,0 +1,20 @@ +{ + "mCompact": false, + "mRemoveComments": false, + "mOutputDir": "", + "mDisableHilog": false, + "mDisableConsole": false, + "mSimplify": false, + "mNameObfuscation": { + "mEnable": true, + "mNameGeneratorType": 1, + "mDictionaryList": [], + "mRenameProperties": false, + "mReservedProperties": ["prop?", "function*", "*pro?", "prop"], + "mKeepStringProperty": false, + "mTopLevel": true, + "mReservedToplevelNames": ["a*", "*shoul?keep*", "func2"] + }, + "mEnableSourceMap": false, + "mEnableNameCache": false +} \ No newline at end of file