js逆向_webpack讲解加载器&酷某音乐案例


简单的导出导入

env.js模块

javascript 复制代码
function check_env(){
    return (typeof window) === "undefined" ? "fuck_env": "ok_env";
}

// 定制导出的内容
// module.exports = check_env
// 你这边module.exports导出的东西,是那边导入的东西
module.exports = {
    check : check_env()
}

qiao_enc模块

javascript 复制代码
var CryptoJS = require("crypto-js");

function encrypt(s){
    var key = CryptoJS.enc.Utf8.parse("1234567887654321");
    var iv = CryptoJS.enc.Utf8.parse("0000000000000000");
    var cif = CryptoJS.enc.Utf8.parse(s);
    return CryptoJS.AES.encrypt(cif, key, {
        iv: iv,
        mode:CryptoJS.mode.CBC,
        packing: CryptoJS.pad.Pkcs7
    }).toString();
}

module.exports = {
    encrypt
}

// name = "qiao"
// age = 18
//
// obj = {
//     name,
//     age
// }
// // 13
// console.log(obj)

将env.js模块的函数,导入http.js模块

javascript 复制代码
// 导入外部模块
var mm = require("./env");
var enc = require("./qiao_enc");


function send_req() {
    // 先拿到浏览器环境,然后发出去
    var v = mm.chenv();
    var mi = enc.encrypt(v)
    console.log("我发请求了",mi)
}
window.send_req = send_req;
module.exports = send_req;

完成webpack.config.js的编写!

javascript 复制代码
module.exports = {
    entry: "./qiaofu/http.js",  // 入口
    output:{
        filename: "./qiaofu/js/app.js" // 打包后的文件输出到哪里
    }
}

独立将打包的app.js复制出来另一个文件,图中这个r就是加载器

webpack介绍:

webpack并不是为了防爬虫,而是为了让每个不同模块的代码压缩!遇到这个必定会伴随闭包!

安装webpack命令:npn install webpack

如下是某个编号的函数在被导出,导出后被call运行!


javascript 复制代码
// 所有准备被导入的模块
        // t => {序号:func,序号: func}  77 99
      , e = {}; // 有个e -> 存放已经被导入过的模块

    // 创建了个函数
    function r(i) {  // i = 482
        var n = e[i]; // e[482]  => 第一次运行. n是空的 e也是空的, 第二次运行. e里面有482号

        if (n !== undefined){
            return n.exports;  // 如果n有东西. e[482]有东西. 就返回它的exports
        } else {
            var o = e[i] = {  //  o  =>  e[482] => {exports: {}}
                exports: {}
            };
            console.log(e);
            // 此时:
            /**
             *  e => {
             *      482 : {exports: {}}  =>> o
             *  }
             * 7 9
             */
            // t[i] 内部的this => o.exports
            // o => t[i]函数的第一个参数  => 刚刚创建的大对象
            // o.exports  => t[i]函数的第二个参数  => 刚刚创建大对象中的小对象
            // r => t[i]函数的第三个参数  => r函数
            // o.exports -> this传递给函数
            // t[i](o, o.exports, r)
            t[i].call(o.exports, o, o.exports, r);
            // t是那个大对象 {exports:函数o}
            return o.exports; // 返回  函数_o //13 9

            // 第一次运行完后, e => {
            //        482 : {exports: 函数_o}
            // }
        }
    }
    r.g = function() {  // r.g放的是全局对象
        if ("object" == typeof globalThis)
            return globalThis;
        try {
            return this || new Function("return this")()
        } catch (t) {
            if ("object" == typeof window)
                return window
        }
    }(); // 到这里. 还是什么都没干 7777 999
    var mmmm = r(482); // r的作用是吧482号大函数. export的东西拿到
    mmmm();
    // 结论 r(482)  => 得到的是t中482号函数里面exports的东西
    // r在这里的作用. 是用来获取 编号下函数被导出的内容, r被称为加载器
    r(482);
}
)();

那么r怎么导出去被调用的?

酷我音乐案例

https://www.kuwo.cn/search/list?key=T.R.Y

目标是搜索蓝框,给出的包

这里有疑问。o.a就是发请求

答案直接揭晓在下面!

直接点进去l()()是不对的!鼠标选中l(),鼠标点击进去

应该是如下才对!



如果加载器代码量不大,整个加载器复制出去即可!如果是几万行那就要谨慎了!

第一个问题window,千万不要换this

window在浏览器是顶级对象,而node的顶级对象是global!

将加载器怼出去(往外声明)

【提取加载器报错提示!】有时候运行会报错,那么就是加载器提示却模块了,但是并没有说却什么。如下图

等pycharm提示缺什么,那缺啥补啥就可以了

缺啥补啥

最后运行即可

相关推荐
CryptoPP44 分钟前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫1 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
凌云拓界1 小时前
文件管理:让AI安全操作你的电脑 ——CogitoAgent开发实战(三)
javascript·人工智能·架构·开源·node.js
凌云拓界2 小时前
联网能力:让AI看见更广阔的世界 ——CogitoAgent开发实战(四)
javascript·人工智能·架构·node.js·创业创新
阳区欠2 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Jinkxs2 小时前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
HYCS3 小时前
用pixi.js实现fabric.js(六):从线性代数的角度理解编辑器交互
前端·javascript·canvas
晨曦中的暮雨3 小时前
Golang速通(Javaer版)
java·开发语言·后端·golang
小小编程路3 小时前
Python 还有容器类型互转、进制转换、字符编码转换
开发语言·windows·python
you45804 小时前
学成在线--day02 CMS前端开发(含Vue基础知识得回顾)
前端·javascript·vue.js