AST反混淆实战篇二十四|if表达式语句的优化

在一些半处理过后的混淆代码,经常会看到一些不是很规范的if表达式,干扰分析,如:

1.没有加或者部分加大括号的代码:

if (a) b;else c;
if (a) {b;}else c;
if (a) b;else {c;}

2.if语句条件已知的代码:

if (1+1) b;else c;
if (1-1) b;else c;

3.if语句块包含空语句:

if (a) {} else b;
if (a) b;else {}

以上这些,都是可以进行再次优化的半垃圾代码。

一.插件名称

if表达式语句的优化。

二.还原实例

还原前:

if (a) b;else c;
if (a) {b;}else c;
if (a) b;else {c}
if (1+1) b;else c;
if (1-1) b;else c;
if (a) {} else b;
if (a) b;else {}

还原后:

if (a) {
  b;
} else {
  c;
}


if (a) {
  b;
} else {
  c;
}


if (a) {
  b;
} else {
  c;
}


b;
c;


if (!a) {
  b;
}


if (a) {
  b;
}

三.是否通用

是。

四.还原思路

  • 对于第一种没有加大括号的情况,给它加上即可,即重新生成一个 BlockStatement 节点再替换即可,注意其 参数 是一个Array类型,具体看我源代码里面的写法。

  • 对于第二种条件已知的情况,可以使用 evaluateTruthy 方法来判断test节点的值,从而得出到底会走哪个分支,替换即可。

  • 对于第三种空语句的情况,需要判断各自的body长度,详细思路可参加代码,不懂的可留言提问。

五.插件源代码

星友们可以访问这里获取插件源代码:

https://t.zsxq.com/Em2baII

AD:

fb185f409b770957569e16c7598321a2.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值