在一些半处理过后的混淆代码,经常会看到一些不是很规范的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: