So verschleiern Sie Code in React-Native für IOS
Ich habe versucht, den Code für eine Weile zu verschleiern, indem ich den React -Native-Obfuscating-Transformator verwende . Alles scheint in Ordnung zu sein, aber wenn ich die bundle.js überprüfe. Ich kann keinen verschleierten Code sehen.
PS: Derzeit versuche ich nur für IOS.
Hier sind meine Konfigurationsdateien.
metro.config.js
module.exports = {
transformer: {
babelTransformerPath: require.resolve('./transformer'),
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
},
}),
},
};
transformator.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,
},
});
Antworten
Nach mehreren Tests habe ich endlich herausgefunden, wie es funktioniert.
meine native Version reagieren und reagieren:
"react": "16.9.0",
"react-native": "0.61.5",
Installieren Sie andere benötigte Abhängigkeiten:
npm install babylon --save
npm install --save babel-traverse
transformator.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
},
};
HINWEIS:
Setzen Sie emitObfuscatedFiles in obfuscatorOptions auf true, um die verschleierten Versionen von Dateien zum Vergleich neben ihren Originalen auszugeben.
Wenn Sie ein Release erstellen , können Sie auch das generierte index.android.bundle (in \ android \ app \ build \ generate \ assets \ react \ release) mit und ohne Verwendung des React-Native-Obfuscating-Transformators mit vergleichen Online-Diff-Tool, um den Unterschied zu sehen