Skip to content

transformObjectKeys: true causes TypeError: Cannot read property 'call' of undefined #498

Closed

Description

@ddzobov

Raw Script:
console.log('test');

Script after build with webpack:

/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "/";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({

/***/ "./resources/js/loader.js":
/*!********************************!*\
  !*** ./resources/js/loader.js ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports) {

console.log('test');

/***/ }),

/***/ 0:
/*!**************************************!*\
  !*** multi ./resources/js/loader.js ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! /Users/zobov/Desktop/projects/test/resources/js/loader.js */"./resources/js/loader.js");


/***/ })

/******/ });

Obfuscator Config:

{
     transformObjectKeys: true
}

After build with obfuscator:
var _0x37ba=['value','Module','defineProperty','object','__esModule','default','hasOwnProperty','call','test','exports','enumerable','get','undefined','toStringTag'];(function(_0x5a6433,_0x3dd879){var _0x2da372=function(_0x283e2e){while(--_0x283e2e){_0x5a6433['push'](_0x5a6433['shift']());}};_0x2da372(++_0x3dd879);}(_0x37ba,0xcc));var _0x3396=function(_0x5a6433,_0x3dd879){_0x5a6433=_0x5a6433-0x0;var _0x2da372=_0x37ba[_0x5a6433];return _0x2da372;};var _0x5dedd7={};_0x5dedd7['./resources/js/loader.js']=function(_0x393828,_0x52fc40){console['log'](_0x3396('0x0'));};(function(_0x57f0fc){var _0x227dcd={};function _0xddb5a0(_0x3e3dee){if(_0x227dcd[_0x3e3dee]){return _0x227dcd[_0x3e3dee][_0x3396('0x1')];}var _0x3dcbf2=_0x227dcd[_0x3e3dee]={};_0x227dcd[_0x3e3dee]['i']=_0x3e3dee;_0x227dcd[_0x3e3dee]['l']=![];_0x227dcd[_0x3e3dee][_0x3396('0x1')]={};_0x57f0fc[_0x3e3dee]['call'](_0x3dcbf2[_0x3396('0x1')],_0x3dcbf2,_0x3dcbf2[_0x3396('0x1')],_0xddb5a0);_0x3dcbf2['l']=!![];return _0x3dcbf2[_0x3396('0x1')];}_0xddb5a0['m']=_0x57f0fc;_0xddb5a0['c']=_0x227dcd;_0xddb5a0['d']=function(_0x16380c,_0x248174,_0x356b08){if(!_0xddb5a0['o'](_0x16380c,_0x248174)){var _0x38e7ab={};_0x38e7ab[_0x3396('0x2')]=!![];_0x38e7ab[_0x3396('0x3')]=_0x356b08;Object['defineProperty'](_0x16380c,_0x248174,_0x38e7ab);}};_0xddb5a0['r']=function(_0x59b0c4){if(typeof Symbol!==_0x3396('0x4')&&Symbol[_0x3396('0x5')]){var _0x29215d={};_0x29215d[_0x3396('0x6')]=_0x3396('0x7');Object['defineProperty'](_0x59b0c4,Symbol[_0x3396('0x5')],_0x29215d);}var _0x4df37a={};_0x4df37a[_0x3396('0x6')]=!![];Object[_0x3396('0x8')](_0x59b0c4,'__esModule',_0x4df37a);};_0xddb5a0['t']=function(_0x56e782,_0xbe6a9c){if(_0xbe6a9c&0x1)_0x56e782=_0xddb5a0(_0x56e782);if(_0xbe6a9c&0x8)return _0x56e782;if(_0xbe6a9c&0x4&&typeof _0x56e782===_0x3396('0x9')&&_0x56e782&&_0x56e782[_0x3396('0xa')])return _0x56e782;var _0x249096=Object['create'](null);_0xddb5a0['r'](_0x249096);var _0x48fc31={};_0x48fc31[_0x3396('0x2')]=!![];_0x48fc31[_0x3396('0x6')]=_0x56e782;Object[_0x3396('0x8')](_0x249096,'default',_0x48fc31);if(_0xbe6a9c&0x2&&typeof _0x56e782!='string')for(var _0x528be5 in _0x56e782)_0xddb5a0['d'](_0x249096,_0x528be5,function(_0x528be5){return _0x56e782[_0x528be5];}['bind'](null,_0x528be5));return _0x249096;};_0xddb5a0['n']=function(_0x12db92){var _0x47d618=_0x12db92&&_0x12db92[_0x3396('0xa')]?function getDefault(){return _0x12db92[_0x3396('0xb')];}:function getModuleExports(){return _0x12db92;};_0xddb5a0['d'](_0x47d618,'a',_0x47d618);return _0x47d618;};_0xddb5a0['o']=function(_0xd22169,_0x583027){return Object['prototype'][_0x3396('0xc')][_0x3396('0xd')](_0xd22169,_0x583027);};_0xddb5a0['p']='/';return _0xddb5a0(_0xddb5a0['s']=0x0);}(_0x5dedd7));

In versions up to 0.20.4 error not appears.

Your Environment

  • Obfuscator version used: > 0.20.4
  • Node version used: 10.18.0

Stack trace

/Users/zobov/Desktop/projects/test/public/js/loader.js:1
var _0x37ba=['value','Module','defineProperty','object','__esModule','default','hasOwnProperty','call','test','exports','enumerable','get','undefined','toStringTag'];(function(_0x5a6433,_0x3dd879){var _0x2da372=function(_0x283e2e){while(--_0x283e2e){_0x5a6433['push'](_0x5a6433['shift']());}};_0x2da372(++_0x3dd879);}(_0x37ba,0xcc));var _0x3396=function(_0x5a6433,_0x3dd879){_0x5a6433=_0x5a6433-0x0;var _0x2da372=_0x37ba[_0x5a6433];return _0x2da372;};var _0x5dedd7={};_0x5dedd7['./resources/js/loader.js']=function(_0x393828,_0x52fc40){console['log'](_0x3396('0x0'));};(function(_0x57f0fc){var _0x227dcd={};function _0xddb5a0(_0x3e3dee){if(_0x227dcd[_0x3e3dee]){return _0x227dcd[_0x3e3dee][_0x3396('0x1')];}var _0x3dcbf2=_0x227dcd[_0x3e3dee]={};_0x227dcd[_0x3e3dee]['i']=_0x3e3dee;_0x227dcd[_0x3e3dee]['l']=![];_0x227dcd[_0x3e3dee][_0x3396('0x1')]={};_0x57f0fc[_0x3e3dee]['call'](_0x3dcbf2[_0x3396('0x1')],_0x3dcbf2,_0x3dcbf2[_0x3396('0x1')],_0xddb5a0);_0x3dcbf

TypeError: Cannot read property 'call' of undefined
    at _0xddb5a0 (/Users/zobov/Desktop/projects/test/public/js/loader.js:1:872)
    at /Users/zobov/Desktop/projects/test/public/js/loader.js:1:2668
    at Object.<anonymous> (/Users/zobov/Desktop/projects/test/public/js/loader.js:1:2699)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)

Activity

  1. ddzobov commented on Jan 15, 2020

    @ddzobov
    Author

    Found problem with object key:

        0: <---- webpack generating this, causes error
        "0": <---- if 0 replace to "0" - error gone
    
  2. sanex3339 commented on Jan 15, 2020

    @sanex3339
    Member

    Yes, all numeric keys are deleted

    var s = {0: 'foo', '1': bar, 2: 'baz'};
    

    Output:

    var _0x2c539f = {};
    var s = _0x2c539f;
    s['1'] = bar
    
  3. sanex3339 commented on Jan 15, 2020

    @sanex3339
    Member

    Thank you for the issue, will fix it in a few days, maybe today.

  4. sanex3339 commented on Jan 15, 2020

    @sanex3339
    Member

    Will fixed in #502

  5. sanex3339 commented on Jan 15, 2020

    @sanex3339
    Member

    Merged. I will release a new version this week.

  6. ddzobov commented on Jan 18, 2020

    @ddzobov
    Author

    Error appearing again with your example code:

    var s = {0: 'foo', '1': bar, 2: 'baz'};

    const options = {
        log: true,
        transformObjectKeys: true
    };
    
    [javascript-obfuscator] Version: 0.23.0
    
    [javascript-obfuscator] Obfuscation started... 
    
    [javascript-obfuscator] Random generator seed: 285911518...
    
    [javascript-obfuscator] Transformation stage: Initializing...
    
    [javascript-obfuscator] Transformation stage: Preparing...
    
    [javascript-obfuscator] Transformation stage: Converting...
    
    [javascript-obfuscator] Transformation stage: Obfuscating...
    
    [javascript-obfuscator] Transformation stage: Finalizing...
    
    [javascript-obfuscator] Obfuscation completed. Total time: 0.104 sec.
    
    

    var _0x24c3=['string','undefined','Module','__esModule','hasOwnProperty','enumerable','value','bind','call','get','defineProperty','./resources/js/loader.js','toStringTag','default','create','exports','object'];(function(_0x3bd5a3,_0x3c0d2e){var _0xd4239=function(_0x57ae34){while(--_0x57ae34){_0x3bd5a3['push'](_0x3bd5a3['shift']());}};_0xd4239(++_0x3c0d2e);}(_0x24c3,0xab));var _0x3aef=function(_0x3bd5a3,_0x3c0d2e){_0x3bd5a3=_0x3bd5a3-0x0;var _0xd4239=_0x24c3[_0x3bd5a3];return _0xd4239;};var _0x15ed9a={};_0x15ed9a[_0x3aef('0xa')]=function(_0x4bdc3b,_0x20d0df){var _0x24a9c1={};var _0x224a24=_0x24a9c1;_0x224a24['1']=bar;};(function(_0x5c4cce){var _0x1e2ab5={};function _0x4ec399(_0x4daa80){if(_0x1e2ab5[_0x4daa80]){return _0x1e2ab5[_0x4daa80][_0x3aef('0xe')];}var _0x2d45f7=_0x1e2ab5[_0x4daa80]={};_0x1e2ab5[_0x4daa80]['i']=_0x4daa80;_0x1e2ab5[_0x4daa80]['l']=![];_0x1e2ab5[_0x4daa80][_0x3aef('0xe')]={};_0x5c4cce[_0x4daa80][_0x3aef('0x7')](_0x2d45f7[_0x3aef('0xe')],_0x2d45f7,_0x2d45f7[_0x3aef('0xe')],_0x4ec399);_0x2d45f7['l']=!![];return _0x2d45f7[_0x3aef('0xe')];}_0x4ec399['m']=_0x5c4cce;_0x4ec399['c']=_0x1e2ab5;_0x4ec399['d']=function(_0x262f1f,_0x180110,_0x4ccb53){if(!_0x4ec399['o'](_0x262f1f,_0x180110)){var _0x3ca6b8={};_0x3ca6b8[_0x3aef('0x4')]=!![];_0x3ca6b8[_0x3aef('0x8')]=_0x4ccb53;Object['defineProperty'](_0x262f1f,_0x180110,_0x3ca6b8);}};_0x4ec399['r']=function(_0x20ccef){if(typeof Symbol!==_0x3aef('0x0')&&Symbol[_0x3aef('0xb')]){var _0x2f359f={};_0x2f359f['value']=_0x3aef('0x1');Object[_0x3aef('0x9')](_0x20ccef,Symbol[_0x3aef('0xb')],_0x2f359f);}var _0x4f0ea7={};_0x4f0ea7[_0x3aef('0x5')]=!![];Object[_0x3aef('0x9')](_0x20ccef,'__esModule',_0x4f0ea7);};_0x4ec399['t']=function(_0x2921ff,_0x21eea1){if(_0x21eea1&0x1)_0x2921ff=_0x4ec399(_0x2921ff);if(_0x21eea1&0x8)return _0x2921ff;if(_0x21eea1&0x4&&typeof _0x2921ff===_0x3aef('0xf')&&_0x2921ff&&_0x2921ff[_0x3aef('0x2')])return _0x2921ff;var _0x1c7456=Object[_0x3aef('0xd')](null);_0x4ec399['r'](_0x1c7456);var _0x6aaea1={};_0x6aaea1['enumerable']=!![];_0x6aaea1['value']=_0x2921ff;Object[_0x3aef('0x9')](_0x1c7456,_0x3aef('0xc'),_0x6aaea1);if(_0x21eea1&0x2&&typeof _0x2921ff!=_0x3aef('0x10'))for(var _0x2a50d0 in _0x2921ff)_0x4ec399['d'](_0x1c7456,_0x2a50d0,function(_0x2a50d0){return _0x2921ff[_0x2a50d0];}[_0x3aef('0x6')](null,_0x2a50d0));return _0x1c7456;};_0x4ec399['n']=function(_0x2944fc){var _0xff330a=_0x2944fc&&_0x2944fc[_0x3aef('0x2')]?function getDefault(){return _0x2944fc['default'];}:function getModuleExports(){return _0x2944fc;};_0x4ec399['d'](_0xff330a,'a',_0xff330a);return _0xff330a;};_0x4ec399['o']=function(_0x1eae17,_0x286c15){return Object['prototype'][_0x3aef('0x3')]['call'](_0x1eae17,_0x286c15);};_0x4ec399['p']='/';return _0x4ec399(_0x4ec399['s']=0x0);}(_0x15ed9a));

    ➜  js git:(master) ✗ node loader.js
    /Users/zobov/Desktop/projects/test/public/js/loader.js:1
    var _0x24c3=['string','undefined','Module','__esModule','hasOwnProperty','enumerable','value','bind','call','get','defineProperty','./resources/js/loader.js','toStringTag','default','create','exports','object'];(function(_0x3bd5a3,_0x3c0d2e){var _0xd4239=function(_0x57ae34){while(--_0x57ae34){_0x3bd5a3['push'](_0x3bd5a3['shift']());}};_0xd4239(++_0x3c0d2e);}(_0x24c3,0xab));var _0x3aef=function(_0x3bd5a3,_0x3c0d2e){_0x3bd5a3=_0x3bd5a3-0x0;var _0xd4239=_0x24c3[_0x3bd5a3];return _0xd4239;};var _0x15ed9a={};_0x15ed9a[_0x3aef('0xa')]=function(_0x4bdc3b,_0x20d0df){var _0x24a9c1={};var _0x224a24=_0x24a9c1;_0x224a24['1']=bar;};(function(_0x5c4cce){var _0x1e2ab5={};function _0x4ec399(_0x4daa80){if(_0x1e2ab5[_0x4daa80]){return _0x1e2ab5[_0x4daa80][_0x3aef('0xe')];}var _0x2d45f7=_0x1e2ab5[_0x4daa80]={};_0x1e2ab5[_0x4daa80]['i']=_0x4daa80;_0x1e2ab5[_0x4daa80]['l']=![];_0x1e2ab5[_0x4daa80][_0x3aef('0xe')]={};_0x5c4cce[_0x4daa80][_0x3aef('0x7')](_0x2d45f7[_0x3a
    
    TypeError: Cannot read property 'call' of undefined
        at _0x4ec399 (/Users/zobov/Desktop/projects/test/public/js/loader.js:1:930)
        at /Users/zobov/Desktop/projects/test/public/js/loader.js:1:2729
        at Object.<anonymous> (/Users/zobov/Desktop/projects/test/public/js/loader.js:1:2760)
        at Module._compile (internal/modules/cjs/loader.js:778:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
        at Module.load (internal/modules/cjs/loader.js:653:32)
        at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
        at Function.Module._load (internal/modules/cjs/loader.js:585:3)
        at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
        at startup (internal/bootstrap/node.js:283:19)
    
  7. sanex3339 commented on Jan 18, 2020

    @sanex3339
    Member

    Will check later today

  8. sanex3339 commented on Jan 18, 2020

    @sanex3339
    Member

    Lol, looks like when i released 0.23.0 version, I forgot to pull origin/master branch.
    Will release 0.23.1 in a few hours.

  9. sanex3339 commented on Jan 18, 2020

    @sanex3339
    Member

    Released, try now please

  10. ddzobov commented on Jan 18, 2020

    @ddzobov
    Author

    Yes, now it works

  11. ahmetburakatli commented on Mar 19, 2020

    @ahmetburakatli

    sorry for bothering, but i'm facing the same issues at the 0.27.4 , how can i solve this? by the way, i'm facing this issue when transformObjectKeys is true or false, i think my problem doesn't depend on that variable

  12. sanex3339 commented on Mar 19, 2020

    @sanex3339
    Member

    Without code, i can't help

  13. sanex3339 commented on Mar 20, 2020

    @sanex3339
    Member

    @ahmetburakatli also, here is no 0.27.4 version. Latest version is 0.27.2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions