Commit 58f9486c authored by Medicean's avatar Medicean

(Fix: Backend) 修复 Chunk 发包下 Download 异常问题 #272 (thx @c2xusnpq6)

parent 8a561278
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
### 后端模块 ### 后端模块
* 修改发包默认 UserAgent 为 随机 User-Agent * 修改发包默认 UserAgent 为 随机 User-Agent
* 修复 Chunk 发包下 Download 异常问题 #272 (thx @c2xusnpq6)
* 修复 Download 在 chunk 和 multipart 发包模式下 asunescape 不生效的问题
## 2021/02/06 `v(2.1.10)` ## 2021/02/06 `v(2.1.10)`
### 核心 ### 核心
......
...@@ -307,19 +307,22 @@ class Request { ...@@ -307,19 +307,22 @@ class Request {
let _postarr = []; let _postarr = [];
for (var key in _postData) { for (var key in _postData) {
if (_postData.hasOwnProperty(key)) { if (_postData.hasOwnProperty(key)) {
_postarr.push(`${key}=${_postData[key]}`); let _tmp = encodeURIComponent(_postData[key]).replace(/asunescape\((.+?)\)/g, function ($, $1) {
return unescape($1);
}); // 后续可能需要二次处理的在这里追加
_postarr.push(`${key}=${_tmp}`);
} }
} }
let antstream = new AntRead(_postarr.join("&"), { let antstream = new AntRead(_postarr.join("&"), {
'step': parseInt(opts['chunkStepMin']), 'step': parseInt(opts['chunkStepMin']),
'stepmax': parseInt(opts['chunkStepMax']) 'stepmax': parseInt(opts['chunkStepMax'])
}); });
let _datasuccess = false; // 表示是否是 404 类shell
_request _request
.proxy(APROXY_CONF['uri']) .proxy(APROXY_CONF['uri'])
.type('form') .type('form')
.ignoreHTTPS(opts['ignoreHTTPS']) .ignoreHTTPS(opts['ignoreHTTPS'])
.pipe(through((chunk) => { .parse((res, callback) => {
res.pipe(through((chunk) => {
// 判断数据流中是否包含后截断符?长度++ // 判断数据流中是否包含后截断符?长度++
let temp = chunk.indexOf(opts['tag_e']); let temp = chunk.indexOf(opts['tag_e']);
if (temp !== -1) { if (temp !== -1) {
...@@ -345,7 +348,11 @@ class Request { ...@@ -345,7 +348,11 @@ class Request {
.send('download-' + opts['hash'], finalData.length); .send('download-' + opts['hash'], finalData.length);
// 删除内存数据 // 删除内存数据
finalData = tempDataBuffer = tempData = null; finalData = tempDataBuffer = tempData = null;
})); }))
})
.on('error', (err) => {
return event.sender.send('download-error-' + opts['hash'], err);
});
antstream.pipe(_request); antstream.pipe(_request);
} else { } else {
// 通过替换函数方式来实现发包方式切换, 后续可改成别的 // 通过替换函数方式来实现发包方式切换, 后续可改成别的
...@@ -353,9 +360,16 @@ class Request { ...@@ -353,9 +360,16 @@ class Request {
let _postarr = []; let _postarr = [];
if (opts['useMultipart'] == 1) { if (opts['useMultipart'] == 1) {
_request.send = _request.field; _request.send = _request.field;
_postarr = _postData; for (var key in _postData) {
if (_postData.hasOwnProperty(key)) {
let _tmp = (_postData[key]).replace(/asunescape\((.+?)\)/g, function ($, $1) {
return unescape($1)
});
_postarr[key] = _tmp;
}
}
} else { } else {
if(opts['addMassData']==1){ if(opts['addMassData'] == 1){
for (let i = 0; i < randomInt(num_min, num_max); i++) { //将混淆流量放入到payload数组中 for (let i = 0; i < randomInt(num_min, num_max); i++) { //将混淆流量放入到payload数组中
_postData[randomString(randomInt(varname_min, varname_max))] = randomString(randomInt(data_min, data_max)); _postData[randomString(randomInt(varname_min, varname_max))] = randomString(randomInt(data_min, data_max));
} }
...@@ -405,7 +419,10 @@ class Request { ...@@ -405,7 +419,10 @@ class Request {
.send('download-' + opts['hash'], finalData.length); .send('download-' + opts['hash'], finalData.length);
// 删除内存数据 // 删除内存数据
finalData = tempDataBuffer = tempData = null; finalData = tempDataBuffer = tempData = null;
})); }))
.on('error', (err) => {
return event.sender.send('download-error-' + opts['hash'], err);
});;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment