• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import fs from 'fs';
17import path from 'path';
18
19import { ArkObfuscator } from '../ArkObfuscator';
20import { collectResevedFileNameInIDEConfig, MergedConfig, ObConfigResolver, readNameCache } from './ConfigResolver';
21import { type IOptions } from '../configs/IOptions';
22
23export const printerConfig = {
24  // Print obfuscation time&memory usage of all files and obfuscation processes
25  mFilesPrinter: false,
26  // Print time&memory usage of a single file obfuscation in transform processes
27  mSingleFilePrinter: false,
28  // Print sum up time of transform processes during obfuscation
29  mSumPrinter: false,
30  // Output path of printer
31  mOutputPath: '',
32};
33
34export function initObfuscationConfig(projectConfig: any, arkProjectConfig: any, logger: any): void {
35  const obConfig: ObConfigResolver = new ObConfigResolver(projectConfig, logger, true);
36  const mergedObConfig: MergedConfig = obConfig.resolveObfuscationConfigs();
37  const isHarCompiled: boolean = projectConfig.compileHar;
38  if (mergedObConfig.options.disableObfuscation) {
39    return;
40  }
41
42  if (mergedObConfig.options.enableFileNameObfuscation) {
43    const ohPackagePath = path.join(projectConfig.modulePath, 'oh-package.json5');
44    const entryArray = arkProjectConfig.entryArrayForObf;
45    const reservedFileNamesInIDEconfig = collectResevedFileNameInIDEConfig(
46      ohPackagePath,
47      projectConfig,
48      arkProjectConfig.modulePathMap,
49      entryArray,
50    );
51    mergedObConfig.reservedFileNames.push(...reservedFileNamesInIDEconfig);
52  }
53  arkProjectConfig.obfuscationMergedObConfig = mergedObConfig;
54
55  arkProjectConfig.arkObfuscator = initArkGuardConfig(
56    projectConfig.obfuscationOptions?.obfuscationCacheDir,
57    logger,
58    mergedObConfig,
59    isHarCompiled,
60  );
61}
62
63function initArkGuardConfig(
64  obfuscationCacheDir: string | undefined,
65  logger: any,
66  mergedObConfig: MergedConfig,
67  isHarCompiled: boolean,
68): ArkObfuscator {
69  const arkguardConfig: IOptions = {
70    mCompact: mergedObConfig.options.compact,
71    mDisableConsole: mergedObConfig.options.removeLog,
72    mSimplify: false,
73    mRemoveComments: true,
74    mNameObfuscation: {
75      mEnable: true,
76      mNameGeneratorType: 1,
77      mReservedNames: mergedObConfig.reservedNames,
78      mRenameProperties: mergedObConfig.options.enablePropertyObfuscation,
79      mReservedProperties: mergedObConfig.reservedPropertyNames,
80      mKeepStringProperty: !mergedObConfig.options.enableStringPropertyObfuscation,
81      mTopLevel: mergedObConfig.options.enableToplevelObfuscation,
82      mReservedToplevelNames: mergedObConfig.reservedGlobalNames,
83      mUniversalReservedProperties: mergedObConfig.universalReservedPropertyNames,
84      mUniversalReservedToplevelNames: mergedObConfig.universalReservedGlobalNames,
85    },
86    mRemoveDeclarationComments: {
87      mEnable: mergedObConfig.options.removeComments,
88      mReservedComments: mergedObConfig.keepComments,
89    },
90    mEnableSourceMap: true,
91    mEnableNameCache: true,
92    mRenameFileName: {
93      mEnable: mergedObConfig.options.enableFileNameObfuscation,
94      mNameGeneratorType: 1,
95      mReservedFileNames: mergedObConfig.reservedFileNames,
96    },
97    mExportObfuscation: mergedObConfig.options.enableExportObfuscation,
98    mPerformancePrinter: printerConfig,
99    mKeepFileSourceCode: {
100      mKeepSourceOfPaths: new Set(),
101      mkeepFilesAndDependencies: new Set(),
102    },
103  };
104
105  const arkObfuscator: ArkObfuscator = new ArkObfuscator();
106  arkObfuscator.init(arkguardConfig);
107  if (mergedObConfig.options.applyNameCache && mergedObConfig.options.applyNameCache.length > 0) {
108    readNameCache(mergedObConfig.options.applyNameCache, logger);
109  } else {
110    if (obfuscationCacheDir) {
111      const defaultNameCachePath: string = path.join(obfuscationCacheDir, 'nameCache.json');
112      if (fs.existsSync(defaultNameCachePath)) {
113        readNameCache(defaultNameCachePath, logger);
114      }
115    }
116  }
117  return arkObfuscator;
118}
119