爬虫js逆向基础——06常见开源代码破解方案

补充

Nodejs` 里全局对象可重写,删除,而浏览器里面不行

浏览器:
delete window ->false
delete document ->false
而这个操作在`Nodejs`里可以执行

1.ob

ob混淆有众多参数,但是玩遍不离其宗

结构如下:

  1. 大数组

  2. 数组移位(有内存泄露风险,建议不格式化)

  3. 解密函数(有内存泄露风险,建议不格式化)

    可能有定时器,看加密开关开启数量

  4. 实际代码加控制流平坦化,(整体ob的强度几乎完全取决于这段代码的强度,这里面是加密前的逻辑)

  5. 控制流平坦化+无限debugger自执行函数+死代码注入。一般情况下不会有业务逻辑

2.jsfuck

在控制台执行,如果报错可以直接看到源码,

看到源码后,还报错,可以在这段代码后加上jsfuck后的alert(1),在控制台输入,回车可以运行了,但是看不到源码, 这时候最后有一个括号,里面+"a",回车后会报错,然后可以看到源码

3.表情包

表情包直接复制到控制台的话,回车会报错,无法运行,最后会有一个括号括起来的笑脸,把那个笑脸删掉就可以运行了。

补充

function a(){
     console.log('a');return true}
function b(){
     console.log('b');return false}
function c(){
     console.log('c');return undefined}
function d(){
     console.log('d');return null}

result = a() || b() && c() || d() //true a()返回true后面就不执行了,会先打印出a,然后返回true
result = a() && b() || c() //打印出abc undefined
result = (a()||b())&& c()|| d()//acb  null

const {
     productSub} = navigator 等同于 const productSub = navigator.productSub
直接在nodejs里执行很危险,
他可能这样写
try{
	eval('fs = require("fs")');
	fs.readFile('./1.txt', 'utf8', function(err, data){
		console.log(data)
	})
}
catch(e){
	console.log('这是正常执行的代码')
}
开头加上

require = function(){
     }
delate require

浏览器指纹

如果从安全开发者的角度来看,找到`node`与`web`的异常的地方, 就可以实现逻辑检测

- 全局变量`global`
- 导包引擎`require`[很危险]
- 可被重写的全局
- 绝大多数的`webapi`
- 全部的`dom`节点


你可能感兴趣的:(爬虫进阶)