吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1503|回复: 19
收起左侧

[Web逆向] 【入门】webpack 补环境

  [复制链接]
就往丶 发表于 2025-3-15 01:02
本帖最后由 就往丶 于 2025-3-15 11:12 编辑

网址: aHR0cHM6Ly95LnFxLmNvbS9uL3J5cXEvcGxheWVy


1.接口分析

接口:cgi-bin/musics.fcg​  

参数:sign是加密的

image

2.代码分析

进入调用栈

image

先在send位置打上断点,页面刷新

image

往上一个栈找

image

可以看到上面就有一个关键词sign​是从i​变量获取到的,i​变量就在上面 get请求走前面的部分 post 走后面的部分 我们的接口是post 所以我们需要分析后面的o​函数 。

o​函数在上面 o = n(350).default​ 赋值得到 ,一看这种格式大概率是webpack 可以在往上面和下面看看

image

在n位置打上断点,进入n函数  找到构造器 ,那个d​函数就是构造器了  把这个页面的代码全部都复制出来

image

image

扣出来代码运行一下,出现下面的错误,在最上面补一个 window = global;

ReferenceError: window is not defined

image

image

把构造器导出

`image

1 .t.type.toUpperCase(): 将这个字符串转换为大写。例如,"get" 变为 "GET"。

2.   "GET" === t.type.toUpperCase(): 这部分比较转换后的 t.type​ 是否严格等于字符串 "GET"。​===​ 是严格相等运算符,它不仅比较值,还比较类型。

3.  o(t.data.data):  如果 t.type​ 是 "GET"(忽略大小写),则执行这部分。

4.  o(t.data):  如果 t.type​ 不是 "GET"(忽略大小写),则执行这部分。

image

把网站里面的代码复刻进去

image

在重新运行一下 会发现下面的错误 缺少函数  我们得继续补齐这个代码

image

回到网站中,在构造器的位置下一个条件断点 t=350​,在重新刷新网页

image

image

就会重新断在这个位置,进入这个函数

image

可以在这个里面看到很多这样的函数,我们可以把他们拿出来,避免我们后面还要一直添加

image

可以下载一个 notepad++ 软件,把代码复制进去调整语音 ,把层级全部都缩起来

image

image

打开第一层的时候会发现下面都是函数定义,然后在最上面有一个·​ 跟最下面的​是对应的 可以表示那些函数都是一个数组里面 都扣出来

image

image

image

把代码放在之前的函数里面

image

image

在重新运行一下,发现出结果了没有报错

image

我们在重新断到加密的位置然后输出一下o(t.data)​发现跟我们代码加密的不一样,我们要猜测是不是有环境检测

image

在 JavaScript 逆向工程中,我们的目标通常是获取目标网站的加密或解密函数,或者特定值的生成算法。在理想情况下,我们可以直接提取这些算法并在本地执行。然而,许多网站会实施浏览器指纹检测,这使得直接执行变得困难。为了解决这个问题,我们需要进行“环境补全”,即模拟目标网站的浏览器环境。

传统的环境补全方法往往依赖于逐步调试,通过观察程序运行时的 undefined​ 错误,逐个补充缺失的环境变量。这种方法繁琐且耗时。

为了提高效率,我们可以利用 Proxy​ 技术。Proxy​ 允许我们拦截对 window​、document​、navigator​ 等全局对象的访问和函数调用,这些对象通常是浏览器指纹检测的重点。通过代理这些对象,我们可以实时记录网站尝试访问的环境信息,并将其输出到控制台。这种“环境自吐”的方法使我们能够快速了解网站的环境检测机制,并集中进行环境补全,从而大大简化了逆向工程的流程。

对于JS逆向来说,我们扣完代码的目的就是调用目标网站的加/解密函数或某个值的算法,一般情况下我们把他的算法扣下来能够直接执行,但是如果检测了浏览器指纹,那就比较难了,只能够去深入分析进行补环境。

一般的补环境的是通过运行程序后的undefined报错去一点一点分析,一点一点的去补一些环境,是非常掉头发的。

所以我们使用 Proxy 对全局遍历window、document、navigator等常见环境检测点进行代理,拦截代理对象的读取、函数调用等操作,并通过控制台输出,这样的话我们就能够实现检测环境自吐的功能,后续我们再针对吐出来的环境统一的进行补环境,这样就会方便的多。

代码如下

function getEnv(proxy_array) {
    for(let i=0; i<proxy_array.length; i++){
        handler = `{
            get: function(target, property, receiver) {
                   console.log('方法:get','    对象:${proxy_array[i]}','    属性:',property,'    属性类型:',typeof property,'    属性值类型:',typeof target[property]);
                   return target[property];
            },
            set: function(target, property, value, receiver){
                    console.log('方法:set','    对象:${proxy_array[i]}','    属性:',property,'    属性类型:',typeof property,'    属性值类型:',typeof target[property]);
                    return Reflect.set(...arguments);
            }
        }`;
        eval(`
            try{
                ${proxy_array[i]};
                ${proxy_array[i]} = new Proxy(${proxy_array[i]},${handler});
            }catch(e){
                ${proxy_array[i]}={};
                ${proxy_array[i]} = new Proxy(${proxy_array[i]},${handler});
            }
        `);
    }
}
proxy_array = ['window','document','location', 'navigator', 'history', 'screen', 'history']
getEnv(proxy_array);

在代码最上面添加,在重新运行一下代码

navigator = {}
location= {}
document = {}

image

可以看到在navigator​对象缺少 userAgent​ 值,我们在浏览器中获取然后填写到代码里面

image

image

image

继续运行location​ 的host​属性没有 ,继续从浏览器中获取

image

image

image

重新生成好了,在跟网站里面的对比一下,

image

image


本文档所涉逆向分析内容仅为个人技术研究及学习交流之用,所有技术细节均基于公开可见信息整理。 技术研究应遵守国家法律法规及行业规范,使用者需对自身行为承担全部法律责任。如权利人认为存在侵权内容,请及时联系处理。

免费评分

参与人数 10威望 +2 吾爱币 +108 热心值 +8 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
jingzhige + 1 + 1 谢谢@Thanks!
meet52 + 1 + 1 我很赞同!
gsh123china + 1 用心讨论,共获提升!
Aa666666999 + 1 用心讨论,共获提升!
少轻丶狂 + 2 热心回复!
过林黑马 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
geo1996 + 1 我很赞同!
wolfstudio + 1 + 1 用心讨论,共获提升!
涛之雨 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

KaliHt 发表于 2025-3-16 09:32
模块全扣之后发现只调用了两个模块,可以仅仅把这两个模块以键值对的方式放到加载器模块里,全扣的话可能会加大补环境难度。以上只是个人理解,希望大佬指正。
 楼主| 就往丶 发表于 2025-3-16 14:15
KaliHt 发表于 2025-3-16 09:32
模块全扣之后发现只调用了两个模块,可以仅仅把这两个模块以键值对的方式放到加载器模块里,全扣的话可能会 ...

是的 你可以这样理解 用到什么补什么就可以了,只是有时候就会用很多提取把全部扣进去可以方便一点
KaliHt 发表于 2025-3-16 08:18
涛之雨 发表于 2025-3-16 21:35
初窥门庭,优秀鼓励
linix 发表于 2025-3-17 13:40
感谢分享,写的很详细
TaoTaoZhu 发表于 2025-3-17 15:10
学习到了不少知识,感谢感谢。
fa50651 发表于 2025-3-17 21:49
犀利,WEB还可以这样玩
过林黑马 发表于 2025-3-18 11:13
很强大啊,js逆向
czb2 发表于 2025-3-19 10:17
很难学。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-16 16:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表