背景
Javascript
逆向分析过程中,经常会碰到混淆后的多层嵌套的三目运算符,这里我们给出一个案例来具体分析下
目标表达式
var result = a ? b ? c ? d ? e ? f : g : h : i : j ? k ? l ? m ? n : o : p : q;
大家先思考一下,a 为假的时候返回什么?为真又返回什么?
分析过程
为了便于分析,我们先将其重新格式化以更清晰地展示嵌套关系:
var result = a
? b
? c
? d
? e
? f
: g
: h
: i
: j
? k
? l
? m
? n
: o
: p
: q;
现在,我们可以按照从左到右的顺序逐层解析这个表达式。
- 首先,根据
a
的值判断条件:- 如果
a
为真,则继续解析下一层三目运算符; - 如果
a
为假,则直接返回结果j
。
- 如果
- 接下来,根据
b
的值判断条件:- 如果
b
为真,则继续解析下一层三目运算符; - 如果
b
为假,则直接返回结果i
。
- 如果
- 继续类似地,根据
c
、d
、e
的值,依次判断条件并解析下一层三目运算符。
综上所述,如果每个条件的结果都是布尔类型(true 或 false),那么根据 JavaScript
运算符优先级规则,我们可以按照从左到右的顺序解析表达式。