Skip to content

Commit

Permalink
feat: add js-obfuscator options.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaywcjlove committed Oct 29, 2022
1 parent e26da4b commit 3fed619
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 20 deletions.
5 changes: 5 additions & 0 deletions packages/components/src/CheckboxOption.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ export const Label = styled.label`
font-family: monospace;
input {
vertical-align: middle;
margin-right: 6px;
}
input:disabled {
cursor: not-allowed;
color: var(--color-fg-subtle);
}
> span * {
vertical-align: middle;
Expand Down
70 changes: 69 additions & 1 deletion packages/js-obfuscator/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,8 @@ export default function JSObfuscator() {
value: options.sourceMapBaseUrl,
children: (
<Fragment>
sourceMapBaseUrl <Info>{t<string>('sourceMapBaseUrl')}</Info>
sourceMapBaseUrl <br />
<Info>{t<string>('sourceMapBaseUrl')}</Info>
</Fragment>
),
onChange: ({ target }) => {
Expand Down Expand Up @@ -356,6 +357,73 @@ export default function JSObfuscator() {
setOptions({ ...options, ...{ unicodeEscapeSequence: target.checked } });
},
},
{
checked: !!options.splitStrings,
children: (
<Fragment>
splitStrings <Info>{t<string>('splitStrings')}</Info>
</Fragment>
),
onChange: ({ target }) => {
setOptions({ ...options, ...{ splitStrings: target.checked } });
},
},
{
type: 'number',
disabled: !options.splitStrings,
value: options.splitStringsChunkLength,
children: (
<Fragment>
splitStringsChunkLength <br />
<Info>{t<string>('splitStringsChunkLength')}</Info>
</Fragment>
),
onChange: ({ target }) => {
setOptions({ ...options, ...{ splitStringsChunkLength: Number(target.value) } });
},
},
{
checked: !!options.stringArray,
children: (
<Fragment>
stringArray <Info>{t<string>('stringArray')}</Info>
</Fragment>
),
onChange: ({ target }) => {
setOptions({ ...options, ...{ stringArray: target.checked } });
},
},
{
disabled: !options.stringArray,
checked: !!options.stringArrayCallsTransform,
children: (
<Fragment>
stringArrayCallsTransform <br />
<Info>{t<string>('stringArrayCallsTransform')}</Info>
</Fragment>
),
onChange: ({ target }) => {
setOptions({ ...options, ...{ stringArrayCallsTransform: target.checked } });
},
},
{
type: 'range',
max: '1',
min: '0',
step: '0.1',
disabled: !options.stringArray,
value: options.stringArrayCallsTransformThreshold,
children: (
<Fragment>
{options.stringArrayCallsTransformThreshold} <br />
stringArrayCallsTransformThreshold
<Info>{t<string>('stringArrayCallsTransformThreshold')}</Info>
</Fragment>
),
onChange: ({ target }) => {
setOptions({ ...options, ...{ stringArrayCallsTransformThreshold: Number(target.value) } });
},
},
];
return (
<Wrapper>
Expand Down
29 changes: 24 additions & 5 deletions packages/js-obfuscator/src/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,30 @@ export const allOptions: ObfuscatorOptions = {
sourceMapFileName: '',
// sourceMapMode: TTypeFromEnum<typeof SourceMapMode>;
// sourceMapSourcesMode: TTypeFromEnum<typeof SourceMapSourcesMode>;
// splitStrings: boolean;
// splitStringsChunkLength: number;
// stringArray: boolean;
// stringArrayCallsTransform: boolean;
// stringArrayCallsTransformThreshold: number;
/**
* Splits literal strings into chunks with length of `splitStringsChunkLength` option value.
*/
splitStrings: false,
/** Sets chunk length of splitStrings option. */
splitStringsChunkLength: 10,
/**
* Removes string literals and place them in a special array.
* For instance, the string "Hello World" in var m = "Hello World";
* will be replaced with something like var m = _0x12c456[0x1];
*/
stringArray: true,
/**
* ⚠️ `stringArray` option must be enabled.
* Enables the transformation of calls to the stringArray.
* All arguments of these calls may be extracted to a different object depending on stringArrayCallsTransformThreshold value. So it makes it even harder to automatically find calls to the string array.
*/
stringArrayCallsTransform: false,
/**
* ⚠️ `stringArray` and `stringArrayCallsTransformThreshold` options must be enabled
*
* You can use this setting to adjust the probability (from 0 to 1) that calls to the string array will be transformed.
*/
stringArrayCallsTransformThreshold: 0.5,
// stringArrayEncoding: TStringArrayEncoding[];
// stringArrayIndexesType: TStringArrayIndexesType[];
// stringArrayIndexShift: boolean;
Expand Down
34 changes: 20 additions & 14 deletions website/public/locales/cn/js-obfuscator.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,34 @@
"allOptions": "默认所有预设,高性能",

"compact": "在一行上压缩代码输出",
"controlFlowFlattening": "⚠️ 此选项极大地影响性能,运行时速度降低1.5倍。使用 controlFlowFlatteningThreshold 设置受控制流扁平化影响的节点百分比",
"controlFlowFlatteningThreshold": "controlFlowFlattening 转换将应用于任何给定节点的概率。 此设置对于较大的代码大小特别有用,因为大量的控制流转换会减慢代码速度并增加代码大小。 controlFlowFlatteningThreshold:0 等于 controlFlow Flatteng:false",
"deadCodeInjection": "\n⚠️ 极大地增加了混淆代码的大小(高达200%),只有在混淆代码大小不重要的情况下才使用。使用 deadCodeInjectionThreshold 设置将受死代码注入影响的节点的百分比。⚠️ 此选项强制启用stringArray选项。有了这个选项,死代码的随机块将被添加到模糊代码中",
"deadCodeInjectionThreshold": "\n允许设置将受 deadCodeInjection 影响的节点的百分比",
"debugProtection": "⚠️ 如果打开开发人员工具,可能会冻结浏览器。此选项几乎不可能使用开发工具的调试器功能(基于WebKit和Mozilla Firefox)",
"debugProtectionInterval": "⚠️ 可以冻结您的浏览器!使用风险自负。 如果设置,则会使用以毫秒为单位的间隔来强制 Console 选项卡上的调试模式,从而更难使用开发人员工具的其他功能。如果启用了debugProtection,则有效。建议值介于2000和4000毫秒之间",
"disableConsoleOutput": "⚠️ 此选项全局禁用所有脚本的控制台调用禁用控制台的使用。console.log, console.info, console.error, console.warn, console.debug, console.exception和 console.trace。通过将它们替换为空函数进行跟踪。这使得调试器的使用更加困难",
"controlFlowFlattening": "⚠️ 此选项极大地影响性能,运行时速度降低1.5倍。使用 controlFlowFlatteningThreshold 设置受控制流扁平化影响的节点百分比",
"controlFlowFlatteningThreshold": "controlFlowFlattening 转换将应用于任何给定节点的概率。 此设置对于较大的代码大小特别有用,因为大量的控制流转换会减慢代码速度并增加代码大小。 controlFlowFlatteningThreshold:0 等于 controlFlow Flatteng:false",
"deadCodeInjection": "\n⚠️ 极大地增加了混淆代码的大小(高达200%),只有在混淆代码大小不重要的情况下才使用。使用 deadCodeInjectionThreshold 设置将受死代码注入影响的节点的百分比。⚠️ 此选项强制启用stringArray选项。有了这个选项,死代码的随机块将被添加到模糊代码中",
"deadCodeInjectionThreshold": "\n允许设置将受 deadCodeInjection 影响的节点的百分比",
"debugProtection": "⚠️ 如果打开开发人员工具,可能会冻结浏览器。此选项几乎不可能使用开发工具的调试器功能(基于WebKit和Mozilla Firefox)",
"debugProtectionInterval": "⚠️ 可以冻结您的浏览器!使用风险自负。 如果设置,则会使用以毫秒为单位的间隔来强制 Console 选项卡上的调试模式,从而更难使用开发人员工具的其他功能。如果启用了debugProtection,则有效。建议值介于2000和4000毫秒之间",
"disableConsoleOutput": "⚠️ 此选项全局禁用所有脚本的控制台调用禁用控制台的使用。console.log, console.info, console.error, console.warn, console.debug, console.exception和 console.trace。通过将它们替换为空函数进行跟踪。这使得调试器的使用更加困难",

"ignoreImports": "防止 require 导入的混淆。在某些情况下,由于某些原因,运行时环境只需要静态字符串的这些导入可能会有所帮助",
"inputFileName": "允许使用源代码设置输入文件的名称。此名称将在内部用于源映射生成。当使用 NodeJS API 且 sourceMapSourcesMode 选项具有 sources 值时是必需的",
"ignoreImports": "防止 require 导入的混淆。在某些情况下,由于某些原因,运行时环境只需要静态字符串的这些导入可能会有所帮助",
"inputFileName": "允许使用源代码设置输入文件的名称。此名称将在内部用于源映射生成。当使用 NodeJS API 且 sourceMapSourcesMode 选项具有 sources 值时是必需的",
"log": "启用将信息记录到控制台",
"numbersToExpressions": "启用数字转换为表达式",
"renameGlobals": "⚠️ 此选项可能会破坏您的代码。只有当你知道它的作用时才启用它!使用声明启用全局变量和函数名称的模糊处理",
"renameProperties": "⚠️ 此选项可能会破坏您的代码。只有当你知道它的作用时才启用它!启用属性名称的重命名。所有内置DOM属性和核心JavaScript类中的属性都将被忽略。要在该选项的安全和不安全模式之间切换,请使用“renamePropertiesMode”选项。要设置重命名属性名称的格式,请使用“identifierNamesGenerator”选项。要控制要重命名的属性,请使用“reservedNames”选项",
"renameGlobals": "⚠️ 此选项可能会破坏您的代码。只有当你知道它的作用时才启用它!使用声明启用全局变量和函数名称的模糊处理",
"renameProperties": "⚠️ 此选项可能会破坏您的代码。只有当你知道它的作用时才启用它!启用属性名称的重命名。所有内置DOM属性和核心JavaScript类中的属性都将被忽略。要在该选项的安全和不安全模式之间切换,请使用“renamePropertiesMode”选项。要设置重命名属性名称的格式,请使用“identifierNamesGenerator”选项。要控制要重命名的属性,请使用“reservedNames”选项",

"selfDefending": "⚠️ 使用此选项混淆后,不要以任何方式更改混淆代码,因为任何更改(如代码丑化)都会触发自我保护,代码将不再工作!⚠️ 此选项强制将压缩值设置为true。此选项使输出代码对格式化和变量重命名具有弹性。如果有人试图在混淆的代码上使用JavaScript美化器,那么代码将不再工作,这会使理解和修改变得更加困难",
"simplify": "通过简化启用其他代码混淆。 ⚠️ 在未来的版本中,布尔文字 (true => !![]) 的模糊处理将在此选项下移动",
"sourceMap": "启用模糊代码的源映射生成。 源映射可以帮助您调试混淆的JavaScript源代码。如果您想要或需要在生产中调试,可以将单独的源映射文件上载到一个秘密位置,然后将浏览器指向那里",
"sourceMapBaseUrl": "当sourceMapMode:“separate”时,将基url设置为源映射导入url",
"sourceMapFileName": "当sourceMapMode:“separate”时,设置输出源映射的文件名",
"sourceMapFileName": "当sourceMapMode:“separate”时,设置输出源映射的文件名",

"target": "允许为模糊代码设置目标环境。可用值:`browser`,`browser-no-eval`,`node`。当前 `browser` 和`node`目标的输出代码是相同的,但某些特定于`browser`的选项不允许与`node`目标一起使用。`browser-no-eval`目标的输出代码未使用eval。",
"transformObjectKeys": "启用对象关键点的变换。",
"splitStrings": "将文字字符串拆分为长度为 splitStringsChunkLength 选项值的块",
"splitStringsChunkLength": "设置 splitStrings 选项的块长度",
"stringArray": "删除字符串文字并将其放置在特殊数组中。例如,var m=“Hello World”中的字符串“Hello World”;将替换为类似var m=_0x12c456[0x1]的内容;",
"stringArrayCallsTransform": "⚠️ 必须启用stringArray选项启用对stringArray的调用转换。根据stringArrayCallsTransformThreshold值,可以将这些调用的所有参数提取到不同的对象。因此,自动查找对字符串数组的调用变得更加困难。",
"stringArrayCallsTransformThreshold": " ⚠️ 必须启用stringArray和stringArrayCallsTransformThreshold选项您可以使用此设置调整对字符串数组的调用将被转换的概率(从0到1)。",

"target": "允许为模糊代码设置目标环境。可用值:`browser`,`browser-no-eval`,`node`。当前 `browser` 和`node`目标的输出代码是相同的,但某些特定于`browser`的选项不允许与`node`目标一起使用。`browser-no-eval`目标的输出代码未使用eval",
"transformObjectKeys": "启用对象关键点的变换",
"unicodeEscapeSequence": "允许启用/禁用字符串转换为unicode转义序列。Unicode转义序列大大增加了代码大小,字符串可以很容易地恢复到原始视图。建议仅对小型源代码启用此选项。"
}
6 changes: 6 additions & 0 deletions website/public/locales/en/js-obfuscator.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@
"sourceMapBaseUrl": "Sets base url to the source map import url when sourceMapMode: 'separate'.",
"sourceMapFileName": "Sets file name for output source map when sourceMapMode: 'separate'.",

"splitStrings": "Splits literal strings into chunks with length of splitStringsChunkLength option value.",
"splitStringsChunkLength": "Sets chunk length of splitStrings option.",
"stringArray": "Removes string literals and place them in a special array. For instance, the string \"Hello World\" in var m = \"Hello World\"; will be replaced with something like var m = _0x12c456[0x1];",
"stringArrayCallsTransform": "⚠️ stringArray option must be enabled Enables the transformation of calls to the stringArray. All arguments of these calls may be extracted to a different object depending on stringArrayCallsTransformThreshold value. So it makes it even harder to automatically find calls to the string array.",
"stringArrayCallsTransformThreshold": "⚠️ stringArray and stringArrayCallsTransformThreshold options must be enabled You can use this setting to adjust the probability (from 0 to 1) that calls to the string array will be transformed.",

"target": "Allows to set target environment for obfuscated code. Available values: `browser` `browser-no-eval` `node`. Currently output code for browser and node targets is identical, but some browser-specific options are not allowed to use with node target. Output code for browser-no-eval target is not using eval.",
"transformObjectKeys": "Enables transformation of object keys.",
"unicodeEscapeSequence": "Allows to enable/disable string conversion to unicode escape sequence. Unicode escape sequence increases code size greatly and strings easily can be reverted to their original view. Recommended to enable this option only for small source code."
Expand Down

0 comments on commit 3fed619

Please sign in to comment.