我可以混淆离子应用程序吗?如果是怎么办?
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 混淆
任何 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 混淆