我可以混淆离子应用程序吗?如果是怎么办?

Can i obfuscate an ionic app? if yes how?

任何 cordova 应用程序只是一个本机 Web 视图和一个 www 文件夹,其中包含 HTML javascript 和 css 中的全部功能,因此该应用程序是完全公开的,怎么可能我让任何人都很难阅读应用程序源代码吗?

您真的很担心我的建议是使用专业服务来保护您的代码。例如。 Jscrambler

是的,你可以。有一个 cordova-plugin 可以加密 html、js 和 css 文件。您可以在这里找到它:Cordova crypt file plugin

我发现了,angular 缩小时的问题是缩小会破坏依赖注入。

一种解决方案是使用基于字符串注入的语法,将每个注入的参数映射到一个永远不会受到缩小影响的字符串。

示例:

angular.module('app', []).controller(['$scope', function($scope) { 
   //code
}]);

另一个解决方案,是使用 ngAnnotate 我更喜欢将它与 gulp task runner

一起使用
var gulp = require('gulp');
var ngAnnotate = require('gulp-ng-annotate');
var concat = require('gulp-concat');
var uglify= require('gulp-uglify');

gulp.task('task1', function () {
   return gulp.src('src/js/*.js')
   .pipe(concat('bundle.js'))
   .pipe(ngAnnotate())
   .pipe(uglify())
   .pipe(gulp.dest('dist'));
});

另一个不错的功能是隐藏重要脚本的位置路径。我为此 https://www.npmjs.com/package/location-hide

找到了一个很棒的 npm 插件

<script src="test/folder/sample.js" type="text/javascript"></script>  
<link href="test/stylesheet/perfect-scrollbar.css" rel="stylesheet">

进入

<script src="TNANIuTOLZfmLYwaPDIYhcZDVOWKodqYhysaTeQHFPDhYlDLCOtxZqYmkKAhaSwSgbsYOWlpBzVSBtMZKSfwRqvPSqWVlBBuzHR" type="text/javascript"></script>  
<link href="gyXeFnOEvZbgTjLvdZRnsyrfhaXqffkDjcdATTouqpIenCalLRXKamuXEtiKbPGCsNrdQIaqTMTNWsLyLFuxygKytaruWzSjKYMq" rel="stylesheet">  

它会生成新的 jquery 包含这样的代码,以在外部文件 javascript 中包含您的脚本

$('[src=\'TNANIuTOLZfmLYwaPDIYhcZDVOWKodqYhysaTeQHFPDhYlDLCOtxZqYmkKAhaSwSgbsYOWlpBzVSBtMZKSfwRqvPSqWVlBBuzHR\']').attr("src", "test/folder/sample.js")  
$('[href=\'gyXeFnOEvZbgTjLvdZRnsyrfhaXqffkDjcdATTouqpIenCalLRXKamuXEtiKbPGCsNrdQIaqTMTNWsLyLFuxygKytaruWzSjKYMq\']').attr("src", "test/stylesheet/perfect-scrollbar.css") 

此外,我建议您将所有外部 javascript 代码包含在 1 个 js 文件中。这个文件你放在你的索引文件的根目录下,你可以做这个

<script src="./allinone_external_file.js" type="text/javascript"></script>

然后对htaccess 进行权限设置,使任何人都无法访问该文件。您还可以为每个人都可以看到的源代码制作一个伪造的导入脚本。但是这个文件只是真正的外部js文件的重定向。您多次使用此示例+使用其他混淆工具。这将保护您免受使用您的 javascript 代码搜索漏洞利用的人的侵害。我知道这没什么大不了的,如果你知道的话,也许你可以看到 jquery 包含代码。但无论如何,这是一个很好的保护。

我建议使用 babili 库 (https://github.com/babel/babili) 并构建您的应用程序,以便使用 electron 的分发是由混淆代码而不是源代码进行的。

例如 package.json 包含这样的脚本:

"main": "release/app.js",
"scripts": {
    "debug": "node ./node_modules/electron/cli.js ./app/app.js",
    "build": "./node_modules/.bin/babili app -d release -D",
    "test": "./node_modules/.bin/electron ./release/app.js",
    "pack": "./node_modules/.bin/build --dir --ia32"
  }

.babelrc

{
  "presets": ["es2015"]
}

顺便说一句,babel 还支持ES6/7 混淆