Cara mengaburkan kode di react-native untuk IOS

Oct 08 2020

Saya telah mencoba untuk mengaburkan kode untuk sementara waktu dengan menggunakan transformator react-native-obfuscating . Semuanya tampak baik-baik saja tetapi ketika saya memeriksa bundle.js. Saya tidak dapat melihat kode yang dikaburkan.

PS: Saat ini saya coba hanya untuk IOS.

Ini adalah file konfigurasi saya.

metro.config.js


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

transformer.js

const obfuscatingTransformer = require('react-native-obfuscating-transformer');

module.exports = obfuscatingTransformer({
    upstreamTransformer: require('metro-react-native-babel-transformer'),
    enableInDevelopment: true,
    obfuscatorOptions: {
        compact: true,
        controlFlowFlattening: true,
        controlFlowFlatteningThreshold: 0.75,
        deadCodeInjection: true,
        deadCodeInjectionThreshold: 0.4,
        debugProtection: false,
        debugProtectionInterval: false,
        disableConsoleOutput: true,
        identifierNamesGenerator: 'hexadecimal',
        log: false,
        numbersToExpressions: true,
        renameGlobals: false,
        rotateStringArray: true,
        selfDefending: true,
        shuffleStringArray: true,
        simplify: true,
        splitStrings: true,
        splitStringsChunkLength: 10,
        stringArray: true,
        stringArrayEncoding: ['base64'],
        stringArrayWrappersCount: 2,
        stringArrayWrappersChainedCalls: true,
        stringArrayWrappersType: 'variable',
        stringArrayThreshold: 0.75,
        transformObjectKeys: true,
        unicodeEscapeSequence: false,
    },
});

Jawaban

2 MuhammadNuman Oct 14 2020 at 13:06

Saya akhirnya menemukan cara membuatnya bekerja setelah beberapa tes.

saya bereaksi dan bereaksi versi asli:

 "react": "16.9.0",
 "react-native": "0.61.5",

instal dependensi lain yang diperlukan:

npm install babylon --save
npm install --save babel-traverse

transformer.js

const obfuscatingTransformer = require("react-native-obfuscating-transformer")
const filter = filename => { 
  return filename.startsWith("src");
};

module.exports = obfuscatingTransformer({
// this configuration is based on https://github.com/javascript-obfuscator/javascript-obfuscator
  obfuscatorOptions:{
    compact: true,
    controlFlowFlattening: false,
    deadCodeInjection: false,
    debugProtection: false,
    debugProtectionInterval: false,
    disableConsoleOutput: true,
    identifierNamesGenerator: 'hexadecimal',
    log: false,
    renameGlobals: false,
    rotateStringArray: true,
    selfDefending: true,
    shuffleStringArray: true,
    splitStrings: false,
    stringArray: true,
    stringArrayEncoding: false,
    stringArrayThreshold: 0.75,
    unicodeEscapeSequence: false
  },
  upstreamTransformer: require('metro-react-native-babel-transformer'),
  emitObfuscatedFiles: false,
  enableInDevelopment: true,
  filter: filter,
  trace: true
})

metro.config.js

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

CATATAN:

setel emitObfuscatedFiles ke true di obfuscatorOptions untuk mengeluarkan versi file yang dikaburkan bersama aslinya, untuk perbandingan.

Jika Anda sedang membuat dalam rilis, Anda juga dapat membandingkan index.android.bundle yang dihasilkan (terletak di \ android \ app \ build \ generated \ assets \ react \ release) dengan dan tanpa menggunakan react-native-obfuscating-transformer menggunakan alat diff online untuk melihat perbedaannya