js逆向方法api调用(快手、抖音、wx、hnw、xhs)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

149 lines
4.6 KiB

const express = require("express");
const bodyParser = require("body-parser");
const multer = require('multer'); // 接受视频流
const fs = require('fs');
var captcha = require("./kuaishou/ks_slid"); // 快手滑块
var hn = require("./hnw/hn"); // 惠农网 headers
var dy_signature = require("./douyin/_ac_signature"); // 抖音主页signature
var wx_func = require("./wx_video/wasm_video_decode"); // 微信视频号算法生成
var wx_tool = require("./wx_video/tools"); // 微信视频号解密
var xhs = require("./xhs/xs-commen"); // 小红书x-comment
let Module; // 保存对象存留
var app = express();
// 调整参数大小限制
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
// 设置multer来处理上传的文件
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });
app.post("/kuaishou/get_verifyParam", function(req, res){
try{
var info = req.body["info"]
var result = captcha.getJose(info);
res.send(result);
console.log("[kuaishou-verify_fp] 请求成功");
}catch(e){
console.log(e);
res.send("[kuaishou-verify_fp] verify fp error");
}
});
app.get("/hn/get_signature", function(req, res){
try{
var noce = req.query.nonce;
var result = hn.getS(noce);
res.send(result);
console.log("[hn-get_header] 请求成功");
}catch(e){
console.log(e);
res.send("[hn-get_header] get header error");
}
});
app.get("/douyin/get_signature", function(req, res){
try{
var noce = req.query.nonce;
var result = dy_signature.get_ac_signature(noce);
res.send(result);
console.log("[douyin-get_signature] 请求成功");
}catch(e){
console.log(e);
res.send("[douyin-get_signature] get signature error");
}
});
app.post("/wx/decode", upload.single('file'), async (req,res) =>{
if(Module == undefined){
Module = await wx_func.createWasm(); // 创建modul实例
console.log("[wx] 初始化 wasm 模块!");
}
try{
if(req.file){
var buffer = req.file.buffer; // 视频流
var decodekey = req.query.decodekey; // 视频buffer
var local_path = "wx_video/tmp/".concat(decodekey).concat(".mp4");
console.log("[wx] 获取到的 decodekey:", decodekey,);
wx_func.p.decryptor = new Module["WxIsaac64"](decodekey);
wx_func.p.decryptor.generate(131072);
var video_res = await wx_tool.main1(local_path, buffer, decodekey, wx_func.p.decryptor_array);
wx_func.p.decryptor.delete();
console.log("[wx] ", video_res);
res.send(video_res);
}else{
res.send({"status": 500, "msg": "未识别文件"});
}
}catch(e){
console.log(e);
res.send("[wx] decode error");
}
});
// 测试版
app.post("/wx/decode1", upload.single('file'), async (req,res) =>{
if(Module == undefined){
Module = await wx_func.createWasm(); // 创建modul实例
console.log("[wx] 初始化 wasm 模块!");
}
try{
var buffer = req.file.buffer; // 视频流
console.log(buffer);
var decodekey = req.query.decodekey; // 视频buffer
var local_path = "wx_video/tmp/".concat(decodekey).concat(".mp4");
console.log("[wx] 获取到的 decodekey:", decodekey,);
wx_func.p.decryptor = new Module["WxIsaac64"](decodekey);
wx_func.p.decryptor.generate(131072);
const video_res = await wx_tool.main2(local_path, buffer, decodekey, wx_func.p.decryptor_array);
wx_func.p.decryptor.delete();
// 将Uint8Array转换为Buffer
const new_buffer = Buffer.from(video_res);
// 设置响应类型为二进制
res.setHeader('Content-Type', 'application/octet-stream');
// 发送Buffer数据
res.send(new_buffer);
}catch(e){
console.log(e);
res.send("[wx] decode error");
}
});
app.post("/xhs/get_comment", function(req, res){
try{
var a1 = req.body["a1"];
var xs = req.body["xs"];
var xt = req.body["xt"];
var result = xhs.getCommon(a1, xs, xt);
// console.log(result);
res.send(result);
// res.send(window.code);
// console.log(window.code);
// console.log(a);
console.log("[xhs-comment] 请求成功");
}catch(e){
console.log(e);
res.send("[xhs-comment] verify fp error");
}
// res.send(result.toString());
});
app.listen(3000, ()=>{
console.log("开启服务,端口3000", new Date().toString());
})