【JS逆向学习】代码混淆之三目运算符多层嵌套

背景

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;

现在,我们可以按照从左到右的顺序逐层解析这个表达式。

  1. 首先,根据 a 的值判断条件:
    • 如果 a 为真,则继续解析下一层三目运算符;
    • 如果 a 为假,则直接返回结果 j
  2. 接下来,根据 b 的值判断条件:
    • 如果 b 为真,则继续解析下一层三目运算符;
    • 如果 b 为假,则直接返回结果 i
  3. 继续类似地,根据 cde 的值,依次判断条件并解析下一层三目运算符。
  4. 最后,根据 fg 的值判断条件,并返回相应的结果:
    • 如果 f 为真,则返回结果 e
    • 如果 f 为假,则返回结果 g

综上所述,如果每个条件的结果都是布尔类型(true 或 false),那么根据 JavaScript 运算符优先级规则,我们可以按照从左到右的顺序解析表达式。

你可能感兴趣的:(学习)