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

7 months ago
  1. const express = require("express");
  2. const bodyParser = require("body-parser");
  3. const multer = require('multer'); // 接受视频流
  4. const fs = require('fs');
  5. var captcha = require("./kuaishou/ks_slid"); // 快手滑块
  6. var hn = require("./hnw/hn"); // 惠农网 headers
  7. var dy_signature = require("./douyin/_ac_signature"); // 抖音主页signature
  8. var wx_func = require("./wx_video/wasm_video_decode"); // 微信视频号算法生成
  9. var wx_tool = require("./wx_video/tools"); // 微信视频号解密
  10. var xhs = require("./xhs/xs-commen"); // 小红书x-comment
  11. let Module; // 保存对象存留
  12. var app = express();
  13. // 调整参数大小限制
  14. app.use(bodyParser.json());
  15. app.use(bodyParser.urlencoded({extended: true}));
  16. // 设置multer来处理上传的文件
  17. const storage = multer.memoryStorage();
  18. const upload = multer({ storage: storage });
  19. app.post("/kuaishou/get_verifyParam", function(req, res){
  20. try{
  21. var info = req.body["info"]
  22. var result = captcha.getJose(info);
  23. res.send(result);
  24. console.log("[kuaishou-verify_fp] 请求成功");
  25. }catch(e){
  26. console.log(e);
  27. res.send("[kuaishou-verify_fp] verify fp error");
  28. }
  29. });
  30. app.get("/hn/get_signature", function(req, res){
  31. try{
  32. var noce = req.query.nonce;
  33. var result = hn.getS(noce);
  34. res.send(result);
  35. console.log("[hn-get_header] 请求成功");
  36. }catch(e){
  37. console.log(e);
  38. res.send("[hn-get_header] get header error");
  39. }
  40. });
  41. app.get("/douyin/get_signature", function(req, res){
  42. try{
  43. var noce = req.query.nonce;
  44. var result = dy_signature.get_ac_signature(noce);
  45. res.send(result);
  46. console.log("[douyin-get_signature] 请求成功");
  47. }catch(e){
  48. console.log(e);
  49. res.send("[douyin-get_signature] get signature error");
  50. }
  51. });
  52. app.post("/wx/decode", upload.single('file'), async (req,res) =>{
  53. if(Module == undefined){
  54. Module = await wx_func.createWasm(); // 创建modul实例
  55. console.log("[wx] 初始化 wasm 模块!");
  56. }
  57. try{
  58. if(req.file){
  59. var buffer = req.file.buffer; // 视频流
  60. var decodekey = req.query.decodekey; // 视频buffer
  61. var local_path = "wx_video/tmp/".concat(decodekey).concat(".mp4");
  62. console.log("[wx] 获取到的 decodekey:", decodekey,);
  63. wx_func.p.decryptor = new Module["WxIsaac64"](decodekey);
  64. wx_func.p.decryptor.generate(131072);
  65. var video_res = await wx_tool.main1(local_path, buffer, decodekey, wx_func.p.decryptor_array);
  66. wx_func.p.decryptor.delete();
  67. console.log("[wx] ", video_res);
  68. res.send(video_res);
  69. }else{
  70. res.send({"status": 500, "msg": "未识别文件"});
  71. }
  72. }catch(e){
  73. console.log(e);
  74. res.send("[wx] decode error");
  75. }
  76. });
  77. // 测试版
  78. app.post("/wx/decode1", upload.single('file'), async (req,res) =>{
  79. if(Module == undefined){
  80. Module = await wx_func.createWasm(); // 创建modul实例
  81. console.log("[wx] 初始化 wasm 模块!");
  82. }
  83. try{
  84. var buffer = req.file.buffer; // 视频流
  85. console.log(buffer);
  86. var decodekey = req.query.decodekey; // 视频buffer
  87. var local_path = "wx_video/tmp/".concat(decodekey).concat(".mp4");
  88. console.log("[wx] 获取到的 decodekey:", decodekey,);
  89. wx_func.p.decryptor = new Module["WxIsaac64"](decodekey);
  90. wx_func.p.decryptor.generate(131072);
  91. const video_res = await wx_tool.main2(local_path, buffer, decodekey, wx_func.p.decryptor_array);
  92. wx_func.p.decryptor.delete();
  93. // 将Uint8Array转换为Buffer
  94. const new_buffer = Buffer.from(video_res);
  95. // 设置响应类型为二进制
  96. res.setHeader('Content-Type', 'application/octet-stream');
  97. // 发送Buffer数据
  98. res.send(new_buffer);
  99. }catch(e){
  100. console.log(e);
  101. res.send("[wx] decode error");
  102. }
  103. });
  104. app.post("/xhs/get_comment", function(req, res){
  105. try{
  106. var a1 = req.body["a1"];
  107. var xs = req.body["xs"];
  108. var xt = req.body["xt"];
  109. var result = xhs.getCommon(a1, xs, xt);
  110. // console.log(result);
  111. res.send(result);
  112. // res.send(window.code);
  113. // console.log(window.code);
  114. // console.log(a);
  115. console.log("[xhs-comment] 请求成功");
  116. }catch(e){
  117. console.log(e);
  118. res.send("[xhs-comment] verify fp error");
  119. }
  120. // res.send(result.toString());
  121. });
  122. app.listen(3000, ()=>{
  123. console.log("开启服务,端口3000", new Date().toString());
  124. })