基于目前市面上大多数的混淆变量名情况分析,主要恶心人的点是变量名无意义还不好看.
常见例子: _0x123123, O00oO , ill1il.
瑞数:_$aa
极验: $_aa
还有某些混淆是单个字母做变量,导致会有很多重命名但实际定义以及作用域不同的问题。
而众所周知变量名混淆是不可还原的,菜老板的文章已经说过。只能优化,
目前已知优化方案有:
1. 对变量名进行遍历,随机生成两个或三个字母组合进行作用域替换,优点: 观赏性提高了点 。缺点: 变量名还是一样无任何意义
2. 把js放gpt上直接优化。优点: 观赏性最高,且变量名有意义。 缺点: 一小段js还行,代码量大就不行。一段一段js放上去优化的话可能会有代码上下文不一致优化出来也有问题。
3.对变量名当前语句状态做模板匹配,给一个含有一定意义的词
所以我选择了3,作为一个居中的方案,既有点意义也能把变量名区分,也提高一点观赏性。
主要是以AST结构的语句类型做名字生成
github链接: GitHub - neverl805/AST_rename_iden: js混淆变量名优化
b站视频链接:js混淆逆向对抗之变量名优化_哔哩哔哩_bilibili
变量名映射表:
效果:
变量名解释:
loc开头代表此变量是一个局部变量.
glb开头代表此变量是一个全局变量
loc_call : 局部变量,代表值是调用函数返回的结果
loc_arr_fun:局部变量,代表值是箭头函数
Arr_arg: 箭头函数的形参
Exp_arg: 函数表达式形参
loc_id : 局部变量,代表值是一个变量名
loc_mem: 局部变量,代表是一个对象取属性值
loc_str: 局部变量,代表值是一个字符串
loc_num: 局部变量,代表值是一个数值
loc_bin: 局部变量, 代表值是一个运算表达式
loc_asgE: 局部变量,代表值是赋值表达式
更多的请看映射表.
主要文件是main.js,可自己修改使用,有什么建议也可以提一下呀