ximalaya webbpack逆向

声明

本文仅供参考学习,请勿用于其他途径,违者后果自负!

目标地址:

aHR0cHM6Ly9wYXNzcG9ydC54aW1hbGF5YS5jb20vcGFnZS93ZWIvbG9naW4/ZnJvbVVyaT1odHRwcyUzQSUyRiUyRnN0dWRpby54aW1hbGF5YS5jb20=

一、逆向分析

其中account、nonce、password、signature四个需要逆向。

二、关键字搜索

搜password或者signature,加断点后定位

分析 a.getEncryptPwd即可。 

往上翻页,可以找到a赋值的代码。

这一层没有,所以继续往上翻页,找父级。

很明显是webpack。加断点后刷新页面。分析webpack

三、webpack

找到r加载加载器后,ctrl c+v全部复制。新建四个js文件, 分别是01env,02loader,03mode,04index 作用是补环境、加载器、模块和执行 

在加载器中打印调用的模块索引/键   本次webpack使用的是数组,所以需要打印索引。

并执行。

在补环境定义一个变量 xx={},并且在加载器中接收函数i   xx=i;

在index文件中导入前三个文件,然后执行,提示window不存在,在env中补上window=global。再次执行,提示没有模块。

直接复制整个模块,ctrl c+v到03mode中,再次执行

又报错了,直接全局搜索这个参数,第一个就是我们需要的

也是全选,ctrl c+v到03mode中, 放在上一串代码前面。(这里也可以新建),继续执行

接下来就是补环境,需要用环境代理。补环境流程不做讲解。

代码如下:

window = global;
xx = {}
window.addEventListener = function () {
}
document = {
    createElement: function (res) {
        if (res == 'canvas') {
            // console.log('document.createElement:::', res)
            return canvas
        }
        if (res == "div") {
            // console.log('document.createElement:::', res)
            return div
        } else {
            // console.log('document.createElement:::', res)
        }
    },
    addEventListener: function (res) {
        // console.log('document.addEventListener:::', res)
        return DOMContentLoaded
    },
    documentElement: {
        style: {
            fontSize: {}
        }
    },
    getElementById: function (res) {
        // console.log('document.getElementById:::', res)

    },
    body:{
        style:{
            fontSize:{}
        }
    }
}
DOMContentLoaded = {}
div = {
    style: {},
    setAttribute: function () {
    }
}

canvas = {
    toDataURL: function (res) {
        // console.log('document.createElement(canvas):::', res)
        return 'image/webp'
    }
}
navigator = {
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}

location={}

执行结果如下:

这里用execjs行不通,因为js是不自动结束的。

所以需要在04index.js中 使用params = process.argv 接收参数

然后再python中,使用

data = {
'account': phone, # 账号
'password': pwd, # 密码
'nonce': nonce,
}
ret = subprocess.check_output(f'node 04index.js {data}', shell=True) 传入参数并调用04index.js。

ret返回的是字符串,需要使用函数将其转换成字典。

def parse_custom_dict_string(s):
    # 使用正则表达式查找所有形如 "key: 'value'" 的子串
    # 注意:这个正则表达式假设值被单引号包围,且键不包含空格或特殊字符(除了下划线)
    # 如果键或值的格式可能更复杂,则需要调整正则表达式
    matches = re.findall(r'(\w+):\s*\'([^\']*)\'', s)
    # 将匹配结果转换成一个字典
    return {k: v for k, v in matches}

然后获取account、password、nonce、signature四个逆向值,并发起登录请求即可。

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值