aaronchen2k aaronchen2k - 2 months ago 39
AngularJS Question

How can I obfuscate AngularJS codes?

How can I obfuscate AngularJS codes?
We have tried gulp-obfuscate, but it does not work. Anyone can help us? Thanks a lot!

We have done like this

someModule.controller('MyController',[ '$scope', function($scope) {",


but after success to get the obfuscated codes like this

function H͇̬͔̳̖̅̒ͥͧẸ̖͇͈͍̱̭̌͂͆͊_C͈OM̱̈́͛̈ͩ͐͊ͦEͨ̓̐S̬̘͍͕͔͊̆̑̈́̅4() {
var H͇̬͔̳̖̅̒ͥͧẸ̖͇͈͍̱̭̌͂͆͊_C͈OM̱̈́͛̈ͩ͐͊ͦEͨ̓̐S̬̘͍͕͔͊̆̑̈́̅1, H͇̬͔̳̖̅̒ͥͧẸ̖͇͈͍̱̭̌͂͆͊_C͈OM̱̈́͛̈ͩ͐͊ͦEͨ̓̐S̬̘͍͕͔͊̆̑̈́̅2, H͇̬͔̳̖̅̒ͥͧẸ̖͇͈͍̱̭̌͂͆͊_C͈OM̱̈́͛̈ͩ͐͊ͦEͨ̓̐S̬̘͍͕͔͊̆̑̈́̅3;
...
H͇̬͔̳̖̅̒ͥͧẸ̖͇͈͍̱̭̌͂͆͊_C͈OM̱̈́͛̈ͩ͐͊ͦEͨ̓̐S̬̘͍͕͔͊̆̑̈́̅3 = H͇̬͔̳̖̅̒ͥͧẸ̖͇͈͍̱̭̌͂͆͊_C͈OM̱̈́͛̈ͩ͐͊ͦEͨ̓̐S̬̘͍͕͔͊̆̑̈́̅1 + H͇̬͔̳̖̅̒ͥͧẸ̖͇͈͍̱̭̌͂͆͊_C͈OM̱̈́͛̈ͩ͐͊ͦEͨ̓̐S̬̘͍͕͔͊̆̑̈́̅2;
return H͇̬͔̳̖̅̒ͥͧẸ̖͇͈͍̱̭̌͂͆͊_C͈OM̱̈́͛̈ͩ͐͊ͦEͨ̓̐S̬̘͍͕͔͊̆̑̈́̅3;


}

all angularjs codes in app-52143d391a.js not worked, it return

Uncaught Error: [$injector:nomod] Module 'client' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.


After run

gulp.task('obfuscate', function () {
return gulp.src('../webapp/scripts/app-*.js')
.pipe(ngAnnotate())
.pipe(obfuscate())
.pipe(gulp.dest('dist'));


});

all are ok, and get below codes:

http://pan.baidu.com/s/1ntXuGbB


then run with below error:

Uncaught TypeError:  _ 206. _ 252 is not a function(anonymous function) @ app-6c38d9a2fc.js:2
generated.js:9279Uncaught Error: [$injector:modulerr] Failed to instantiate module client due to:
Error: [$injector:nomod] Module 'client' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
http://errors.angularjs.org/1.4.7/$injector/nomod?p0=client

Answer

From the ngDocs:

Careful: If you plan to minify your code, your service names will get renamed and break your app.

To make your code work after minification you have to use the inject property, every-time you use dependancy injection, to annotate your components. So even if the variable names change angular will know how to map the mangled variables with the proper service.

e.g:

Here we pass the $scope with dependency injection:

someModule.controller('MyController', function($scope) {

For this line to work you have to change to this:

someModule.controller('MyController',[ '$scope', function($scope) {

Or:

MyController.$inject = ['$scope'];
someModule.controller('MyController', function($scope) {

Or even better.
Use gulp-ng-annotate before the obsfucate task which does all that work for you.

UPDATE

After Obsfucation you should see the $inject string as they where, instead this plugin obsufucates them also. Meaning:

['$http', function($http) {

becomes:

[ "ಠ_ಠ727", function( ಠ_ಠ727 ) 

instead of:

[ "$http", function( ಠ_ಠ727 ) 

There is a relevant issue on github

I would suggest you use another plugin. With gulp-uglify I didn't have any issue.

Comments