El segundo problema de la antropología de los simios: detección dinámica de cookies confusa

No se escribirá documento simple.cookie, ubicación.recargar, etc.

1. Detección de formato de código

Esto debería aprovechar el bajo rendimiento de la coincidencia regular de cadenas y escribir maliciosamente expresiones que se adapten a más cadenas y se vean más "universales", lo que hace que el tiempo de coincidencia sea más largo y logra el efecto de estar atascado.

var _0x18813f = _0x5b4f47["constructor"]("return /\" + this + \"/")()["compile"]("^([^ ]+( +[^ ]+)+)+[^ ]}");

imagen-20230722221934099

Solución: código comprimido

2. Detectar global y navigator.vendorSub

imagen-20230722222135386

Solución:

Puede eliminar el global, dejar que ejecute la lógica de captura

3. Detectar setInterval

El setInterval en nodejs no es lo mismo que el navegador. El primer parámetro pasado por el setInterval del navegador puede ser una cadena, pero el primer parámetro en nodejs debe ser una función.

imagen-20230722222428075

Solución:

Establecer setInterval en vacío

setInterval = function (a,b){
   
}

pensar

El código original aquí es el siguiente, lo que hará que la función _0x4464ae se ejecute primero y luego pase el valor de retorno a setInterval, por lo que setInterval puede estar vacío

imagen-20230722225508527

Si es así el código fuente

setInterval(_0x4464ae, 1000);

Entonces no puede configurar directamente setInterval para que se vacíe aquí, necesita enganchar setInterval, el código de gancho es el siguiente

setInterval = function (a,b){
    if(typeof a ==='string'){
        return Function(a)()
    }
    a()
}

Esta lógica de código debe escribirse así (la función se ejecuta una vez), porque si setInterval inicia la ejecución del ciclo de tiempo, el programa no se detendrá, si está directamente en blanco, la función _0x4464ae no se ejecuta, la variable qz no existe , y hay otro párrafo Si el código hace un juicio sobre qz, seguirá la lógica incorrecta

imagen-20230722223112808

4. Detección de salida de Console.log

Uno de los evals ejecuta el siguiente código

console = new Object()
console.log = function (s) {
    while (1){
        for(i=0;i<1100000;i++){
        history.pushState(0,0,i)
            }
    }

}
console.toString = '[object Object]'
console.log.toString = 'ƒ toString() { [native code] }'

De esta manera, cuando llamamos console.logal método, continuamos agregando una gran cantidad de registros de historial, lo que provoca que el navegador se congele, y la llamada console.dirtambién indicará que no es una función.

Solución: Prestore al inicio del programaconsole.log

MyConsole = console.log

Complementar el medio ambiente

En este caso, puede obtenerlo directamente agregando el siguiente código, y no es necesario modificar el código devuelto por la primera página.

navigator = {
    vendorSub:''
}
MyConsole = console.log
document = {
    cookie:''
}
location = {
    reload:function(){}
}
delete global;
setInterval = function (a,b){
    if((typeof a)=='string'){
        return Function(a)()
    }
    a()
}

imagen-20230722224607200

Supongo que te gusta

Origin blog.csdn.net/dzdzdzd12347/article/details/131877282
Recomendado
Clasificación