Skip to content

Revamp Web UI & Improve Deobfuscation Core (Custom Mangling + Logging)#19

Merged
kuizuo merged 22 commits intomainfrom
optimize
Jan 29, 2026
Merged

Revamp Web UI & Improve Deobfuscation Core (Custom Mangling + Logging)#19
kuizuo merged 22 commits intomainfrom
optimize

Conversation

@kuizuo
Copy link
Copy Markdown
Owner

@kuizuo kuizuo commented Jan 28, 2026

This PR delivers a major upgrade to both the web interface and the core deobfuscation pipeline:
• Redesigned UI with a new console and configurable options modal
• Replaced external name-mangling dependency with a custom, more flexible implementation
• Added integrated logging system for clearer transform progress and debugging
• Improved Babel parsing compatibility and error handling
• Simplified app state by removing unused features (e.g. AST viewer)

Overall, the tool is now more transparent, controllable, and user-friendly.

@vercel
Copy link
Copy Markdown

vercel Bot commented Jan 28, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
js-de-obfuscator Ready Ready Preview, Comment Jan 29, 2026 9:06am

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @kuizuo, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on optimizing the project by significantly enhancing the user experience of the web interface, improving the core deobfuscation logic, and refining internal development practices. Key changes include a redesigned UI with a new console and configuration options, a custom and more flexible variable mangling implementation, and a robust logging system for better transparency during the deobfuscation process. These updates aim to provide users with more control, clearer feedback, and a more efficient tool.

Highlights

  • Major UI/UX Overhaul: The web interface has undergone a significant redesign, introducing a dedicated console for real-time deobfuscation logs and a new modal for configuring deobfuscation options. This enhances user feedback and control.
  • Custom Variable Mangling Logic: The project now uses a custom implementation for variable mangling, replacing the external babel-plugin-minify-mangle-names dependency. This allows for more granular control over variable renaming, including different modes (hex, short, all, custom regex) and more intelligent name inference based on context.
  • Enhanced Logging and Debugging: A new logging system has been integrated, intercepting debug.log calls to provide detailed, formatted output directly in the web UI's console. This includes summaries of decryption results, removed code snippets, and progress of various transforms.
  • Improved Parsing and Error Handling: The Babel parser configuration has been updated for better compatibility and robustness, specifically using sourceType: 'unambiguous' and allowReturnOutsideFunction: true. Error messages for evalCode and parsing failures are also more informative.
  • Streamlined Web Application State: Unused features like the AST viewer have been removed, simplifying the application's state management. The code input now uses local storage with a size limit, and URL state serialization has been removed, focusing the UI on the core deobfuscation task.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces significant optimizations and refactorings, including a complete overhaul of the website UI, a more robust and configurable variable name mangling system, and enhanced logging capabilities with a new console in the web UI. However, it maintains the use of eval() for executing parts of the input code, which poses a high security risk of arbitrary code execution in the user's browser worker. Furthermore, the new custom mangling feature introduces a potential ReDoS vulnerability via user-controlled regular expressions. Critical issues related to potential runtime errors from unsafe non-null assertions also need to be addressed, alongside medium-severity suggestions to improve overall code safety and maintainability. It is recommended to implement a secure sandbox for code execution and validate user-provided regex patterns to improve the project's security posture.

// callControllerFunctionName(this, function () { ... })();
// ^ ref
ref.parentPath.parentPath?.remove()
recordRemoval(ref.parentPath.parentPath?.node!, '移除自卫入口调用')
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Using a non-null assertion ! immediately after optional chaining ?. is unsafe. If ref.parentPath.parentPath is null or undefined, this will cause a runtime TypeError when !.node is accessed. You should add a guard to ensure ref.parentPath.parentPath exists before accessing its node property.

binding?.referencePaths.forEach((ref) => {
if (callMatcher.match(ref.parentPath?.parent))
if (callMatcher.match(ref.parentPath?.parent)) {
recordRemoval(ref.parentPath?.parentPath?.node!, '移除自卫函数调用')
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Similar to another location in this file, using a non-null assertion ! after optional chaining ?. is unsafe. If ref.parentPath?.parentPath is null or undefined, this will cause a runtime TypeError. Please ensure the path exists before accessing its node property.

catch (error) {
logger(`eval code:\n${code}`)
throw new Error('evalCode 无法运行, 请在控制台中查看错误信息')
throw new Error(`evalCode 无法运行, 请在控制台中查看错误信息: ${(error as any).message}`)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-high high

The evalCode function uses global.eval() to execute code. This pull request modifies the error handling (line 89) but the underlying insecure execution of untrusted input code remains. Since this tool is designed to analyze potentially malicious JavaScript, executing parts of that code without a secure sandbox poses a significant security risk, potentially leading to arbitrary code execution in the user's browser worker. It is highly recommended to replace eval() with a secure, isolated sandbox environment, as already suggested by the TODO in packages/deob/src/deobfuscate/vm.ts.

callExpression.replaceWith(t.valueToNode(value))
}
catch (error) {
failures++
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-high high

The decodeStrings function executes decoder calls using global.eval(). This pull request adds failure tracking (line 34) but continues to use eval() on code derived from untrusted input. This can lead to arbitrary code execution if the input code contains malicious logic disguised as a decoder. Consider using a secure sandbox for executing any part of the input code to mitigate the risk of Remote Code Execution (RCE).

const pattern = options.manglePattern ?? ''
const flags = options.mangleFlags ?? ''
try {
const re = new RegExp(pattern, flags)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-medium medium

The getMangleMatcher function (added in this PR) constructs a RegExp from user-provided manglePattern and mangleFlags. This can be exploited to perform a Regular Expression Denial of Service (ReDoS) attack if a malicious pattern (e.g., one with nested quantifiers) is provided. While the construction is wrapped in a try-catch, the execution of the regex via re.test(id) is not protected against long-running matches. Consider validating the complexity of the regex or using a library that executes regexes with a timeout.

Comment thread eslint.config.js
'no-console': 'off',
'no-eval': 'off',
'no-restricted-globals': 'off',
'no-alert': 'off',
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Disabling the no-alert rule completely is generally discouraged as alert, confirm, and prompt are obtrusive and often indicative of leftover debugging code. To prevent accidental inclusion in production while still allowing for debugging, consider setting this rule to 'warn' instead of 'off'.

Suggested change
'no-alert': 'off',
'no-alert': 'warn',

Comment on lines +97 to +105
// if (t.isRestElement(fn.params[1])) {
// caller.replaceWith(
// t.callExpression(
// caller.node.arguments[0] as t.Identifier,
// caller.node.arguments.slice(1),
// ),
// )
// return
// }
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This block of code, which appears to handle rest parameters, has been commented out. If this logic is no longer necessary, it should be removed to improve code clarity. If it's been commented out for debugging or is intended to be temporary, please add a comment explaining why. Leaving commented-out code can create confusion for future maintenance.

Comment on lines +329 to +331
catch {

}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This empty catch block silently ignores errors that might occur when creating a new RegExp from a user-provided pattern. If an invalid pattern is provided, it will fail without any feedback, making it difficult to debug. It's best to at least log the error.

Suggested change
catch {
}
catch (e) {
console.error('Invalid mangle pattern:', e);
}

@kuizuo
Copy link
Copy Markdown
Owner Author

kuizuo commented Jan 29, 2026

@gemini-code-assist Please review the changes in this PR and generate:

  • A concise PR title
  • A well-structured PR description (motivation, key changes, impact)

@gemini-code-assist
Copy link
Copy Markdown

Hello @kuizuo, I understand you're looking for a concise PR title and a well-structured PR description. As an AI, I'm unable to generate a new PR title or description directly. However, I have already provided a detailed summary of the changes in comment #2 of this pull request, which covers the key aspects of your modifications.

If you'd like to get a new summary of the pull request, you can use the /gemini summary command in a new comment. If you have any specific questions about the existing summary or the changes in the PR, please let me know, and I'll be happy to provide further clarification or feedback.

@kuizuo
Copy link
Copy Markdown
Owner Author

kuizuo commented Jan 29, 2026

/gemini summary

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

This pull request focuses on optimizing the project by significantly enhancing the user experience of the web interface, improving the core deobfuscation logic, and refining internal development practices. It introduces a redesigned UI with a new console and configuration options, a custom and more flexible variable mangling implementation, and a robust logging system for better transparency during the deobfuscation process. These updates aim to provide users with more control, clearer feedback, and a more efficient tool.

Highlights

  • Major UI/UX Overhaul: The web interface has undergone a significant redesign, introducing a dedicated console for real-time deobfuscation logs and a new modal for configuring deobfuscation options. This enhances user feedback and control.
  • Custom Variable Mangling Logic: The project now uses a custom implementation for variable mangling, replacing the external babel-plugin-minify-mangle-names dependency. This allows for more granular control over variable renaming, including different modes (hex, short, all, custom regex) and more intelligent name inference based on context.
  • Enhanced Logging and Debugging: A new logging system has been integrated, intercepting debug.log calls to provide detailed, formatted output directly in the web UI's console. This includes summaries of decryption results, removed code snippets, and progress of various transforms.
  • Improved Parsing and Error Handling: The Babel parser configuration has been updated for better compatibility and robustness, specifically using sourceType: 'unambiguous' and allowReturnOutsideFunction: true. Error messages for evalCode and parsing failures are also more informative.
  • Streamlined Web Application State: Unused features like the AST viewer have been removed, simplifying the application's state management. The code input now uses local storage with a size limit, and URL state serialization has been removed, focusing the UI on the core deobfuscation task.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .npmrc
    • Removed auto-install-peers=true and strict-peer-dependencies=false.
  • eslint.config.js
    • Updated ignore patterns to use example/**/* instead of specific files.
    • Added new ESLint rules (no-alert, no-control-regex, regexp/no-unused-capturing-group) and removed ts/consistent-type-imports.
  • package.json
    • Added packageManager field.
    • Updated script names (website:dev to web:dev).
    • Upgraded numerous dev dependencies (e.g., @antfu/eslint-config, bumpp, eslint, typescript, vitest).
  • packages/config-typescript/base.json
    • File removed.
  • packages/config-typescript/package.json
    • File removed.
  • packages/config-typescript/vite.json
    • File removed.
  • packages/deob/package.json
    • Added postinstall script.
    • Updated dependency versions (e.g., @babel/*, @codemod/matchers, commander, debug).
    • Updated dev dependency versions (e.g., @types/babel/*, @types/node, esbuild, typescript).
  • packages/deob/src/ast-utils/generator.ts
    • Changed import order for @babel/generator.
    • Modified code preview ellipsis from to …….
  • packages/deob/src/ast-utils/index.ts
    • Exported new modules logger and scope.
  • packages/deob/src/ast-utils/inline.ts
    • Changed import order for @babel/traverse.
    • Added a block for inlineObjectProperties return.
    • Commented out a block in inlineFunction related to rest elements.
  • packages/deob/src/ast-utils/logger.ts
    • Added a new file for logging utilities (deobLogger, createLogger, enableLogger).
  • packages/deob/src/ast-utils/matcher.ts
    • Changed import for @babel/traverse to use type keyword.
  • packages/deob/src/ast-utils/scope.ts
    • Added a new file for scope-related utilities, specifically generateUid.
  • packages/deob/src/ast-utils/transform.ts
    • Removed debug import and logger variable.
    • Removed logging statements from applyTransforms.
  • packages/deob/src/cli.ts
    • Reordered imports.
    • Updated type assertion for package.json parsing.
  • packages/deob/src/deobfuscate/array-rotator.ts
    • Reordered imports.
    • Adjusted indentation in findArrayRotator.
  • packages/deob/src/deobfuscate/control-flow-object.ts
    • Reordered imports.
  • packages/deob/src/deobfuscate/control-flow-switch.ts
    • Reordered imports.
  • packages/deob/src/deobfuscate/dead-code.ts
    • Reordered imports.
  • packages/deob/src/deobfuscate/debug-protection.ts
    • Reordered imports.
  • packages/deob/src/deobfuscate/decoder.ts
    • Reordered imports.
  • packages/deob/src/deobfuscate/index.ts
    • Reordered imports.
    • Added Sandbox type import.
    • Removed VMDecoder from import list and added it back in a different order.
    • Added a conditional check before removing string array, rotator, and decoders.
  • packages/deob/src/deobfuscate/inline-decoded-strings.ts
    • Reordered imports.
  • packages/deob/src/deobfuscate/inline-decoder-wrappers.ts
    • Reordered imports.
    • Added deobLogger import.
    • Added logging for inline function wrappers.
  • packages/deob/src/deobfuscate/inline-object-props.ts
    • Reordered imports.
    • Added deobLogger import.
    • Changed regex for propertyName matcher.
    • Added logging for object property inlining.
  • packages/deob/src/deobfuscate/merge-object-assignments.ts
    • Reordered imports.
    • Added a block for if condition.
  • packages/deob/src/deobfuscate/my-control-flow-switch.ts
    • Reordered imports.
    • Adjusted if condition formatting.
  • packages/deob/src/deobfuscate/my-inline-decoder-wrappers.ts
    • Reordered imports.
    • Added Decoder type import.
  • packages/deob/src/deobfuscate/my-inline-object-props.ts
    • Reordered imports.
    • Added tags: ['safe'].
    • Adjusted if conditions for property keys.
    • Added checks for t.isExpression and t.isV8IntrinsicIdentifier before replacing call expressions.
  • packages/deob/src/deobfuscate/save-objects.ts
    • Reordered imports.
    • Added a block for if condition.
  • packages/deob/src/deobfuscate/self-defending.ts
    • Reordered imports.
    • Added codePreview and deobLogger imports.
    • Introduced recordRemoval function.
    • Added logging for removed snippets.
  • packages/deob/src/deobfuscate/string-array.ts
    • Reordered imports.
  • packages/deob/src/deobfuscate/var-functions.ts
    • Reordered imports.
  • packages/deob/src/deobfuscate/vm.ts
    • Reordered imports.
  • packages/deob/src/index.ts
    • Reordered imports.
    • Removed debug import.
    • Added codePreview, enableLogger, deobLogger imports.
    • Updated parser.parse options.
    • Added getMangleMatcher function.
    • Refactored the run method's stages, including new logging and conditional removals.
  • packages/deob/src/options.ts
    • Updated comment for inlineWrappersDepth.
    • Added mangleMode, manglePattern, mangleFlags to Options interface and defaultOptions.
    • Added backward compatibility for mangle boolean option.
  • packages/deob/src/transforms/babel-plugin-minify-mangle-names.d.ts
    • File removed.
  • packages/deob/src/transforms/decode-strings.ts
    • Reordered imports.
    • Added deobLogger import.
    • Added failure tracking and logging for decoding errors.
  • packages/deob/src/transforms/design-decoder.ts
    • Reordered imports.
  • packages/deob/src/transforms/find-decoder-by-array.ts
    • Reordered imports.
    • Added deobLogger import.
    • Added logging for found decoders and rotators.
  • packages/deob/src/transforms/find-decoder-by-call-count.ts
    • Reordered imports.
    • Added deobLogger import.
    • Added logging for found decoders.
  • packages/deob/src/transforms/mangle.ts
    • Replaced babel-plugin-minify-mangle-names with a custom mangling implementation using generateUid and renameFast.
    • Introduced inferName and generateExpressionName functions.
  • packages/deob/src/transforms/test/decoder.test.ts
    • Reordered imports.
  • packages/deob/src/unminify/index.ts
    • Reordered imports.
  • packages/deob/src/unminify/test/split-variable-declarations.test.ts
    • Updated import path for splitVariableDeclarations.
    • Modified test cases for for loop variable splitting.
  • packages/deob/src/unminify/transforms/block-statements.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/computed-properties.ts
    • Reordered imports.
    • Added a block for if condition.
  • packages/deob/src/unminify/transforms/infinity.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/json-parse.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/logical-to-if.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/merge-else-if.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/merge-strings.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/number-expressions.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/sequence.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/split-variable-declarations.ts
    • Reordered imports.
    • Refined for loop variable splitting logic.
  • packages/deob/src/unminify/transforms/template-literals.ts
    • Reordered imports.
    • Fixed escape character.
    • Adjusted regex for string literal check.
  • packages/deob/src/unminify/transforms/ternary-to-if.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/typeof-undefined.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/unary-expressions.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/unminify-booleans.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/void-to-undefined.ts
    • Reordered imports.
  • packages/deob/src/unminify/transforms/yoda.ts
    • Reordered imports.
  • packages/deob/test/index.ts
    • Reordered imports.
  • packages/deob/tsconfig.build.json
    • Updated TypeScript compiler options.
    • Excluded node_modules.
  • packages/deob/tsconfig.json
    • Updated TypeScript compiler options.
    • Excluded node_modules.
  • website/.npmrc
    • File removed.
  • website/app.vue
    • Updated paneSize.
    • Added shouldWarnOnLeave and beforeUnloadHandler for browser navigation warning.
    • Updated styling and component names (OutputViewer to DeObfuscatorOutput).
  • website/components/AstOutput.vue
    • File removed.
  • website/components/CodeEditor.vue
    • File removed.
  • website/components/Console.vue
    • Added a new component for displaying console logs, including formatting and scroll-to-bottom functionality.
  • website/components/DeObfuscatorOutput.vue
    • Refactored output display.
    • Integrated new Console and Options components.
    • Added log handling from worker.
    • Improved error display.
    • Added new buttons for 'Deobfuscate', 'Options', 'Copy', and 'Download'.
  • website/components/Options.vue
    • Added a new component for deobfuscation options, including decoder location methods, mangling modes, and other settings, with reset functionality.
  • website/components/OuputOptions.vue
    • File removed.
  • website/components/OutputViewer.vue
    • File removed.
  • website/components/SourceCodeEditor.vue
    • Updated example file loading.
    • Added applyText function for editor updates.
    • Added 'Beautify' and 'Toggle Word Wrap' buttons.
    • Refined styling.
  • website/components/TheHeader.vue
    • Removed copyLink function.
    • Updated styling.
    • Added a GitHub link.
  • website/composables/dark.ts
    • Simplified toggleDark function by removing view transition API usage.
  • website/composables/editor.ts
    • Added new composable for editor-specific settings like word wrap and sticky scroll.
  • website/composables/monaco.ts
    • File removed.
  • website/composables/parse.ts
    • File removed.
  • website/composables/state.ts
    • Updated defaultOptions to reflect new mangling modes.
    • Removed ast, hideEmptyKeys, hideLocationData, hideKeys, autoFocus, parserContextMap, initParser, parserContext, and related watchers.
    • Simplified code and options state management.
  • website/composables/url.ts
    • File removed.
  • website/nuxt.config.ts
    • Removed vue.defineModel configuration.
    • Updated deob alias path.
  • website/package.json
    • Removed fflate, json-to-ast, json5, memfs dependencies.
    • Updated splitpanes version.
    • Upgraded numerous dev dependencies (e.g., @iconify-json/*, @nuxt/devtools, @unocss/*, @vueuse/nuxt, nuxt, vite-plugin-node-polyfills, vue, vue-router).
  • website/plugins/monaco.client.ts
    • File removed.
  • website/server/tsconfig.json
    • File removed.
  • website/styles/global.css
    • Removed view transition CSS.
    • Added custom styling for splitpanes splitter.
  • website/types/logger.ts
    • Added a new type definition file for ConsoleLogEntry.
  • website/unocss.config.ts
    • Reordered import for transformerVariantGroup.
  • website/utils/deobfuscate.worker.ts
    • Modified debug.log to intercept and post messages to the main thread for console display.
    • Added type: 'result' to the final message.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/ci.yml
Activity
  • A Vercel bot deployed the project and provided a preview link.
  • Gemini Code Assist provided an initial summary of changes and highlights.
  • The author requested Gemini to review the changes and generate a concise PR title and a well-structured PR description.
  • Gemini responded that it cannot generate a new PR title or description directly but offered to provide further clarification or feedback on the existing summary.
  • The author requested a summary again.
  • Gemini Code Assist raised several critical and medium-priority review comments regarding:
  • Unsafe non-null assertions after optional chaining in packages/deob/src/deobfuscate/self-defending.ts.
  • Security risks associated with global.eval() in evalCode and decodeStrings functions, recommending a secure sandbox.
  • Potential Regular Expression Denial of Service (ReDoS) in getMangleMatcher due to user-provided regex patterns.
  • Disabling no-alert rule in eslint.config.js (suggesting warn instead of off).
  • Commented-out code in packages/deob/src/ast-utils/inline.ts that should either be removed or explained.
  • Empty catch block in getMangleMatcher that silently ignores RegExp errors.

@kuizuo kuizuo changed the title Optimize the project Revamp Web UI & Improve Deobfuscation Core (Custom Mangling + Logging) Jan 29, 2026
@kuizuo kuizuo merged commit 8de5668 into main Jan 29, 2026
5 checks passed
@kuizuo kuizuo deleted the optimize branch January 29, 2026 09:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant