Skip to content

Parenthesis removed, resulting in altered execution #26

Open

Description

@greg00000

var obj = {val:true}
alert( true  ||  (true &&  obj.value == true))  //true
alert( true  ||  true &&  obj.value == true)  //false
 
 becomes
 
var obj = { 'val': !![] };
alert(!![] || !![] && obj['value'] == !![]); //false
alert(!![] || !![] && obj['value'] == !![]); //false

Tested in Adobe ESTK after running Gulp with the following options:
{
compact: false,
controlFlowFlattening: false, //KILLS JSX
deadCodeInjection: false, //KILLS JSX
disableConsoleOutput: false,
identifierNamesGenerator: 'mangled',
renameGlobals: false,
selfDefending: false,
sourceMap: false,
stringArray: false,
rotateStringArray: false,
stringArrayEncoding: false,
splitStrings: false,
transformObjectKeys: false,
unicodeEscapeSequence: false
}

Activity

  1. greg00000 commented on Jan 8, 2020

    @greg00000
    Author

    Here's another example where removal of parenthesis causes nested ternary to fail...

    Original:
    var shouldBeTrue = true ? (true? true : false) : false
    alert( shouldBeTrue ) //true

    Obfuscated:
    var shouldBeTrue = !![] ? !![] ? !![] : ![] : ![];
    alert(shouldBeTrue); //error

    Thanks!

  2. greg00000 commented on Jan 8, 2020

    @greg00000
    Author

    Also tested this at https://obfuscator.io/ and the removal of the parenthesis there is ok. Again, probably a matter of older ECMAscript, but without at least an option to leave the parenthesis alone during obfuscation, a lot of code will fail with Adobe products.

    Also, my example would probably be more clear as:
    alert( true || (true && "undefined" == true)) //true in ESTK
    alert( true || true && "undefined" == true) //false in ESTK,

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions