混淆目的与jsvmp简述

发布于:2024-04-27 ⋅ 阅读:(30) ⋅ 点赞:(0)

同步跟值,核心找来源,在断点处看到了要跟的值,向上看.上面也没有定义.是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实现方法:自己写了一段代码解释器,用来解释自己的代码,这个自己的代码,可以是密文,也可以是所谓的明文.
执行栈, 寄存器 , 全局变量管.
主要是用自己的一套逻辑来设置.


网站公告

今日签到

点亮在社区的每一天
去签到