react-native-obfuscator
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.0 • Public • Published

    react-native-obfuscator

    Obfuscate selected source files when building for React Native.

    The original package react-native-obfuscating-transformer seems to be broken. So I fixed it.

    Installation

    npm i git+https://github.com/AustinZuniga/react-native-obfuscator.git
    

    Install needed npm packages

    npm i babylon babel-traverse
    

    Usage

    React Native >= 0.59

    /metro.config.js

    module.exports = {
      transformer: {
        getTransformOptions: async () => ({
          transform: {
            experimentalImportSupport: false,
            inlineRequires: false,
          },
        }),
        babelTransformerPath: require.resolve("./transformer")
      },
    };

    /transformer.js

    best working obfuscatorOptions after several test.

    const obfuscatingTransformer = require("react-native-obfuscator")
    const filter = filename => { 
      return filename.startsWith("src");
    };
     
    module.exports = obfuscatingTransformer({
      obfuscatorOptions:{
        compact: true, // default true
        controlFlowFlattening: false, // default false
        controlFlowFlatteningThreshold: 0.75, // default 0.75
        deadCodeInjection: false, // default false
        deadCodeInjectionThreshold: 1, // default 0.4
        debugProtection: false,  // default false
        debugProtectionInterval: false, // default false
        disableConsoleOutput: true, 
        identifierNamesGenerator: 'hexadecimal', // default hexadecimal
        log: false,  // default false
        renameGlobals: true, // default false
        rotateStringArray: true, // default true
        seed: 0,// default 0
        selfDefending: false,  // default true: not working if true
        shuffleStringArray: true, // default true
        sourceMapMode: 'separate', // default seperate
        splitStrings: true,  // default false
        splitStringsChunckLength: 10, // default 10
        stringArray: true, // default true
        stringArrayEncoding: 'rc4', // default false
        stringArrayThreshold: 0.75, // default 0.8
        target: 'browser', // default browser
        transformObjectKeys: true, // default false
        unicodeEscapeSequence: true
      },
      upstreamTransformer: require('metro-react-native-babel-transformer'),
      emitObfuscatedFiles: false,
      enableInDevelopment: false,
      filter: filter,
      trace: true
    })

    React Native < 0.59

    /rn-cli.config.js

     module.exports = {
    +  transformer: {
    +    babelTransformerPath: require.resolve("./transformer")
    +  },
     }

    /transformer.js

    const obfuscatingTransformer = require("react-native-obfuscator")
     
    module.exports = obfuscatingTransformer({
      /* options */
    })

    Configuration

    Options are:

    upstreamTransformer: MetroTransformer

    Defines what the first pass of code transformation is. If you don't use a custom transformer already, you don't need to set this option.

    TypeScript example:

     const obfuscatingTransformer = require('react-native-obfuscator')
    + const typescriptTransformer = require('react-native-typescript-transformer')
     
     module.exports = obfuscatingTransformer({
    +  upstreamTransformer: typescriptTransformer
     })

    Default value: require('metro/src/transformer')

    filter: (filename: string, source: string) => boolean

    Returns true for any files that should be obfuscated and false for any files which should not be obfuscated.

    By default, it obfuscates all files in src/**/*

    obfuscatorOptions: ObfuscatorOptions

    Warning — Not all options are guaranteed to produce working code. In particular, stringArray definitely breaks builds.

    See the javascript-obfuscator docs for more info about what each option does.

    interface ObfuscatorOptions {
      compact?: boolean
      controlFlowFlattening?: boolean
      controlFlowFlatteningThreshold?: 0.75
      deadCodeInjection?: boolean
      deadCodeInjectionThreshold?: 0.4
      debugProtection?: boolean
      debugProtectionInterval?: boolean
      disableConsoleOutput?: boolean
      domainLock?: string[]
      identifierNamesGenerator?: "hexadecimal" | "mangled"
      log?: boolean
      renameGlobals?: boolean
      reservedNames?: string[]
      rotateStringArray?: boolean
      seed?: 0
      selfDefending?: boolean
      sourceMap?: boolean
      sourceMapBaseUrl?: string
      sourceMapFileName?: string
      shuffleStringArray?: boolean
      sourceMapMode?: "separate" | "inline"
      splitStrings?: boolean,
      splitStringsChunckLength: 10, // default 10
      stringArray?: boolean
      stringArrayEncoding?: boolean|string
      stringArrayThreshold?: 0.75
      target?: "browser" | "extension" | "node"
      transformObjectKeys?:boolean
      unicodeEscapeSequence?: boolean
    }

    trace: boolean

    if true, prints a list of files being obfuscated

    Default value: false

    emitObfuscatedFiles: boolean

    if true, emits the obfuscated versions of files alongside their originals, for comparison.

    Default value: false

    enableInDevelopment: boolean

    If true, enables obfuscation in development mode.

    Default value: false

    Known Issue

    Reference

    react-native-obfuscating-transformer

    Keywords

    none

    Install

    npm i react-native-obfuscator

    DownloadsWeekly Downloads

    100

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    30.9 kB

    Total Files

    28

    Last publish

    Collaborators

    • austinzuniga