同步跟值,核心找来源,在断点处看到了要跟的值,向上看.上面也没有定义.是arguments传进来的就一定向上找堆栈.
异步同理,容易跟丢,在凭空产生的位置下断点,然后step调试进异步,看微队列里执行.
特殊跟值技巧:
1.看到了一个含有密文的内容a,是一个构造函数A的实例化对象.通过a的构造函数找到接口.
2.数组 [1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214]是SM3.
3.函数名为:hex_md5,直接执行,去跟正常的md5进行对比
4.代码:很有可能是加密库rc4加密的,用rc4对其进行测试
o’toString’;
d0[‘RC4’][‘decrypt’](y, d1, {});
d0[‘enc’][‘Utf8’]‘parse’;
5.axios特征,一般情况大概率找请求拦截器.
6. $.ajax 找jquery beforesend
7. (!function(){*******})(“xxxxxxxxxxxxxx”) 可能是jsvmp a = n() b = n() c= n() 是webpack
8.大数组+数组移位+解密函数 ob或者是类ob的混淆.
混淆的基础与目的:
增加代码的阅读难度和调试难度,增加对抗的强度.
主要方法,把一段代码变得难以理解,用肉眼难以看出.
1.变量名与变量不可视
abcd 混淆 eval(String.fromCharCode(‘xxx’)+ ‘=200’
2.控制流平坦化,调试难度和观看难度会加大.
下列二者是等价的
a = 10;
b = 50;
c = 100;
d = a+b+c;
while (1) {
if (_ip === 1) {
b = 50;
_ip++
}
;if (_ip === 0) {
a = 10;
_ip++
}
;if (_ip === 3) {
d = a + b + c;
break;
}
;if (_ip === 2) {
c = 100;
_ip++
}
;
}
3.花指令,通常指的是增加一些无意义的低耗能运算在逻辑中,增加调试复杂度
a = 10;
b = 50;
e = 212651
c = b * 2 - b;
f = 654165
d = a+b+c+e-f-11;
delete e
delete f
4.死代码,
指不运行的代码,p函数什么用也没有,但是打断点的时候可能会打到无意义的代码
a = 10;
b = 50;
p = function(){
a = 10;
b = 50;
c = 100;
d = a+b+c;
}
c = 100;
d = a+b+c;
cdelete d
5.三目表达式干扰
6.代码压缩成一行+格式化检测(toString)
jsvmp,上述方法上下文的顺序没有被干扰 js代码虚拟保护方案.
常见的jsvmp实现方法:自己写了一段代码解释器,用来解释自己的代码,这个自己的代码,可以是密文,也可以是所谓的明文.
执行栈, 寄存器 , 全局变量管.
主要是用自己的一套逻辑来设置.