Skip to content

Commit

Permalink
更新
Browse files Browse the repository at this point in the history
  • Loading branch information
Iceland-monsoon committed Jul 26, 2023
1 parent b8c5f26 commit 679f61f
Show file tree
Hide file tree
Showing 202 changed files with 48,728 additions and 55,932 deletions.
Empty file added .gitignore
Empty file.
52 changes: 32 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,38 @@
## qxVm补环境框架(历史)
# qxVm补环境框架简介

- 个人微信 y2783693683

- 微信公众号: y小白的笔记(https://mp.weixin.qq.com/s/GGqecHvqN54IzL3ap5c28A)
- git: https://github.com/ylw00/qxVm
- 基于 `node16`
- 基于`vm2`模块纯js设计一个补环境框架
- `没有完全补完`, 主要提供思路以及壳子的设计, 剩下的就是重复性的工作,
- 目前的设计思路以及实现的方式,检测点相对来说是比较少的
- 因为是前期版本, 所以并没有加入`dom解析`,属性的方法实现
- 内部使用`弱引用`, 不会影响内存回收问题
- 优化实例产生的方式



## 声明

- 不会在已有的基础之上添加新的api功能
- 框架内部的dom操作不可信, 需要重写(详情见/z_working/rs4.js)



## 2023-07-26更新

- 添加完善的日志功能, 替代之前的debugger功能, 使得调试更加舒服
- 新增`QXVM_GENERATE.help` 方法, 打印帮助信息
- 添加`默认导出函数 printLog` (runConfig.logOpen=true), 一键导出
- 删除一些不必要的配置参数
- 为了避免一些问题, 框架内部`qxVm`字眼`更改``lwVm`
- 隐藏环境代码, 更加简洁
- 封装事件调用函数 `lw.callListener` // lw.callListener("load")
- 字符串处理 (./qxVm_sanbox/tools/updateDbugger.py)



## 调用方式(z_working目录)
```js
const QXVM_GENERATE = require('../qxVm_sanbox/qxVm.sanbox');
Expand All @@ -17,7 +41,7 @@ const js_code = "function get_form (){ return '' }"; // 导出函数是一定
const user_config = { // 用户配置
isTest: true, // 是不是测试状态, 如果是, 则会固定时间戳, 随机数
compress: false, // 是否压缩js, 准对检测格式化的网站
proxy_config: { proxy: false, proxy_proto: false, print_log: true }, // 是否挂代理
runConfig: { proxy: false, proxy_proto: false, logOpen: true }, // 是否挂代理
window_attribute: {},
env: { // 浏览器环境
canvas: "",
Expand All @@ -42,21 +66,9 @@ console.log(result.get_form())
- 浏览器中组成字符串, 保存到本地, 具体可以看 (https://mp.weixin.qq.com/s/lDlylUGWS2qtCGBh-1RKFQ)
- 半自动方式可以看(qxVm_sanbox\tools\create_ptototype_js.py)

## qxVm优化方向(当然新版都是已经实现的)
- debugger改为日志打印,加入日志开关, 并且避免使用`proxy`代理
- 加入dom解析 可以套壳jsdom, 我是使用了cheerio
- 优化堆栈替换, 防止检测堆栈
- 加入动态更换框架内浏览器环境的逻辑, 保证框架只加载一次
- 加入内部指纹库, 可以随意更改指纹
- 套壳 canvas, 实现canvas指纹生成
- 随机浏览器环境

## qxVm(最新)
- 暂时没开源
- 框架加载速度 100ms左右
- dom解析
- form特性
- 瑞数, 阿里,腾讯

![](https://files.mdnice.com/user/23430/b583c38d-b2e2-454b-960d-657d15d0b101.png)
## qxVm最新

- 瑞数, 阿里, 腾讯,
- https://mp.weixin.qq.com/s/Py7I6RG7UT9EtdpXlV98aA
- https://mp.weixin.qq.com/s/SSlZEMQhNxOlA3rzSNY37w

Binary file removed qxVm_sanbox/.DS_Store
Binary file not shown.
2 changes: 0 additions & 2 deletions qxVm_sanbox/env/BASE_CONFIG/Del_attribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,3 @@
})

})();

// debugger;
9 changes: 8 additions & 1 deletion qxVm_sanbox/env/BASE_CONFIG/_qxVm.BASE_CONFIG.node.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ function Get_baseConfig_node_code() {
return code;
};

function Get_frameEnd_code(){
let code = ""
code += ReadCode("vm_frameLoadEnd.js");
return code;
}

module.exports = {
Get_baseConfig_node_code
Get_baseConfig_node_code,
Get_frameEnd_code
}
8 changes: 8 additions & 0 deletions qxVm_sanbox/env/BASE_CONFIG/vm_frameLoadEnd.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/**
* 设置为用户的配置
*/
lwVm.config['logOpen'] = lwVm_module.nodeConfig.logOpen
lwVm.config['proxy'] = lwVm_module.nodeConfig.proxy

lwVm.memory.finish = true;
lwVm.console_log('框架代码加载完毕 !!!')
Binary file removed qxVm_sanbox/env/BASE_CONFIG/环境_1.png
Binary file not shown.
Binary file removed qxVm_sanbox/env/BASE_CONFIG/环境_2.png
Binary file not shown.
17 changes: 9 additions & 8 deletions qxVm_sanbox/env/BOM/Audio/AudioDestinationNode.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
AudioDestinationNode = function AudioDestinationNode(createObj_key, channelCountMode) {
if (createObj_key !== qxVm.memory.$createObj_key) {
if (createObj_key !== lwVm.memory.$createObj_key) {
throw new TypeError("Illegal constructor");
}
qxVm.memory.private_data.set(this, {
lwVm.memory.private_data.set(this, {
channelCountMode:channelCountMode,
maxChannelCount: 1
})
}; qxVm.safefunction(AudioDestinationNode);
}; lwVm.safefunction(AudioDestinationNode);

; (function () {
const $safe_get_attribute = ['maxChannelCount'];
Expand All @@ -15,14 +15,15 @@ AudioDestinationNode = function AudioDestinationNode(createObj_key, channelCount

AudioDestinationNode.prototype = {
get maxChannelCount() {
debugger;
if (!AudioDestinationNode.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
return qxVm.memory.private_data.get(this).maxChannelCount;
let result = lwVm.memory.private_data.get(this).maxChannelCount;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioDestinationNode', 'maxChannelCount', arguments, result);
return result;
},
}
qxVm.rename(AudioDestinationNode.prototype, "AudioDestinationNode");
qxVm.safeDescriptor_addConstructor(AudioDestinationNode);
qxVm.safe_Objattribute(AudioDestinationNode, $safe_get_attribute, $safe_set_attribute, $safe_func_attribute);
lwVm.rename(AudioDestinationNode.prototype, "AudioDestinationNode");
lwVm.safeDescriptor_addConstructor(AudioDestinationNode);
lwVm.safe_Objattribute(AudioDestinationNode, $safe_get_attribute, $safe_set_attribute, $safe_func_attribute);

Object.setPrototypeOf(AudioDestinationNode.prototype, AudioNode.prototype);
Object.setPrototypeOf(AudioDestinationNode, AudioNode);
Expand Down
119 changes: 66 additions & 53 deletions qxVm_sanbox/env/BOM/Audio/AudioListener.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
AudioListener = function AudioListener(createObj_key) {
if (createObj_key !== qxVm.memory.$createObj_key) {
if (createObj_key !== lwVm.memory.$createObj_key) {
throw new TypeError("Illegal constructor");
}
qxVm.memory.private_data.set(this, {})
}; qxVm.safefunction(AudioListener);
lwVm.memory.private_data.set(this, {})
}; lwVm.safefunction(AudioListener);

; (function () {
const $safe_get_attribute = ['forwardX', 'forwardY', 'forwardZ', 'positionX', 'positionY', 'positionZ', 'upX', 'upY', 'upZ'];
Expand All @@ -12,106 +12,119 @@ AudioListener = function AudioListener(createObj_key) {

AudioListener.prototype = {
get forwardX() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).forwardX;
let ele = lwVm.memory.private_data.get(this).forwardX;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
qxVm.memory.private_data.get(this).forwardX = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
lwVm.memory.private_data.get(this).forwardX = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'forwardX', arguments, result);
return result;
},
get forwardY() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).forwardY;
let ele = lwVm.memory.private_data.get(this).forwardY;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
qxVm.memory.private_data.get(this).forwardY = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
lwVm.memory.private_data.get(this).forwardY = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'forwardY', arguments, result);
return result;
},
get forwardZ() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).forwardZ;
let ele = lwVm.memory.private_data.get(this).forwardZ;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", -1, 3.4028234663852886e+38, -3.4028234663852886e+38);
qxVm.memory.private_data.get(this).forwardZ = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", -1, 3.4028234663852886e+38, -3.4028234663852886e+38);
lwVm.memory.private_data.get(this).forwardZ = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'forwardZ', arguments, result);
return result;
},
get positionX() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).positionX;
let ele = lwVm.memory.private_data.get(this).positionX;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
qxVm.memory.private_data.get(this).positionX = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
lwVm.memory.private_data.get(this).positionX = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'positionX', arguments, result);
return result;
},
get positionY() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).positionY;
let ele = lwVm.memory.private_data.get(this).positionY;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
qxVm.memory.private_data.get(this).positionY = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
lwVm.memory.private_data.get(this).positionY = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'positionY', arguments, result);
return result;
},
get positionZ() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).positionZ;
let ele = lwVm.memory.private_data.get(this).positionZ;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
qxVm.memory.private_data.get(this).positionZ = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
lwVm.memory.private_data.get(this).positionZ = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'positionZ', arguments, result);
return result;
},
setOrientation() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let result = undefined;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Func', 'AudioListener', 'setOrientation', arguments, result);
return result;
},
setPosition() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let result = undefined;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Func', 'AudioListener', 'setPosition', arguments, result);
return result;
},
get upX() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).upX;
let ele = lwVm.memory.private_data.get(this).upX;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
qxVm.memory.private_data.get(this).upX = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38, -3.4028234663852886e+38);
lwVm.memory.private_data.get(this).upX = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'upX', arguments, result);
return result;
},
get upY() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).upY;
let ele = lwVm.memory.private_data.get(this).upY;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", 1, 3.4028234663852886e+38, -3.4028234663852886e+38);
qxVm.memory.private_data.get(this).upY = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", 1, 3.4028234663852886e+38, -3.4028234663852886e+38);
lwVm.memory.private_data.get(this).upY = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'upY', arguments, result);
return result;
},
get upZ() {
debugger;
if (!AudioListener.prototype.isPrototypeOf(this)) { throw new TypeError("Illegal constructor"); };
let ele = qxVm.memory.private_data.get(this).upZ;
let ele = lwVm.memory.private_data.get(this).upZ;
if (ele === undefined) {
ele = new AudioParam(qxVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38);
qxVm.memory.private_data.get(this).upZ = ele;
ele = new AudioParam(lwVm.memory.$createObj_key, "a-rate", 0, 3.4028234663852886e+38);
lwVm.memory.private_data.get(this).upZ = ele;
}
return ele;
let result = ele;;
if (lwVm.config.logOpen=== true) lwVm.logAdd('Get', 'AudioListener', 'upZ', arguments, result);
return result;
},
}
qxVm.rename(AudioListener.prototype, "AudioListener");
qxVm.safeDescriptor_addConstructor(AudioListener);
qxVm.safe_Objattribute(AudioListener, $safe_get_attribute, $safe_set_attribute, $safe_func_attribute);
lwVm.rename(AudioListener.prototype, "AudioListener");
lwVm.safeDescriptor_addConstructor(AudioListener);
lwVm.safe_Objattribute(AudioListener, $safe_get_attribute, $safe_set_attribute, $safe_func_attribute);
})();

Loading

0 comments on commit 679f61f

Please sign in to comment.