首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
WEB安全
发新帖
0
11
自己摸索并记录的webpack逆向案例
发表于: 2026-2-7 14:25
2714
自己摸索并记录的webpack逆向案例
blackfoxdu
2026-2-7 14:25
2714
# 一步一步摸索总结的webpack案例 ## 一、网站信息 地址: > d5d2aa1e5acf92ac6fadf6a2ba68734dcf2dfb581261dac8fc67a4a3390c06e9 接口: > 2d74917137a05047e8d6ce026c01d8f6affef71f566f9898943237104f4ceb8c 以fetch(node.js)格式复制请求,对比后发现参数变化 工具网站(在线代码对比):<mark class="encrypted">762K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1k6i4S2@1k6r3W2X3k6W2)9J5k6h3!0B7k6h3&6S2K9g2)9J5k6h3y4G2L8g2)9J5c8R3`.`.</mark>  ## 二、构建请求参数  这里面有2个,都打上断点,其中有一个函数是没有用到的  function f(t)对外暴露的是函数a  从调用堆栈往上追一下,看看是谁在调用  这样就定位到我们的请求头构建函数了,而且把传入的参数e也定位到了,从控制台打印一下e,复制下来,这是前面各种环境检测后的初始值,后面加密运算用的输入参数,右键复制object,在js代码中定义一个参数e备用  再回到我们当前断点的堆栈上,找到所属的函数模块key  现在只需要用加载器函数,调用这个就可以了 ```javascript let window = globalThis; !function (e) { // 其他代码…… function o(t) { if (n[t]) return n[t].exports; var i = n[t] = { i: t, l: !1, exports: {} }; //console.log(t); // 查看调用路径 return e[t].call(i.exports, i, i.exports, o), i.l = !0, i.exports } window.o = o; // 其他代码…… // o(o.s = 0) // 找到并注释掉这个初始调用 }({ key : function(){} }) let e = {}; // 右键复制的object window.data = window.o("7d92").a(e); ``` 上面的代码就把请求头中的参数都做完加密了,检查后,发现还缺少一个参数x-tingyun,重新搜索定位一下,并打个断点  从代码对比上看,这里就n发生了变化,n的生成函数就在前面,调用了G函数,悬浮一下就能直接抓到  复制下来,这样所有的请求参数就都获取到了 ## 三、解析返回值 响应出来的json都是密文,而且可以看到和请求参数值很像。有经验的可以想到里面会有拦截器,我没有按照这个方法去找,还是从堆栈里面找到的  request后就这三个调用,挨个找一下并打断点,很容易定位到解密函数  打上后耐心点逐步调试,看到这个e.data的时候,打个断点,然后打印看一下e,里面有解密好的数据,在e.data.data.list里面  现在就成功定位到了解密函数,然后看一下传入的是什么参数,就能够执行了 ```javascript return e.data.data.appCode && (e.data.data = Object(c.b)("SM4", e.data)), ``` 很容易找到,解密函数就是加密函数中的b函数,e.data往上找找看,是请求后的返回值 ```javascript // 往上找能找到这个拦截器 o.a.interceptors.response.use((function(e) {} ``` 同样的方法调用解密函数 ```javascript let findate = window.o("7d92").b("SM4", await response.json()) console.log(JSON.stringify(findate.list)); ``` ## 四、python调用js ```python import subprocess import json import os def execute_js(js_input, js_path): js_input_json = json.dumps(js_input, ensure_ascii=False) try: process = subprocess.Popen( ["node", js_path], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, encoding="utf-8", cwd=os.path.dirname(os.path.abspath(__file__)), ) stdout, stderr = process.communicate(input=js_input_json) if process.returncode != 0: error_info = json.loads(stderr) if stderr else {"message": "未知错误"} raise Exception( f"JS执行失败:{error_info['message']}(详情:{error_info.get('stack', '')})" ) result = json.loads(stdout) return result except json.JSONDecodeError as e: raise Exception(f"结果解析失败:{e}(输出:{stdout},错误:{stderr})") except Exception as e: raise Exception(f"执行异常:{e}") if __name__ == "__main__": for i in range(1, 2): js_input, js_path = {"pageNum": i}, "../JavaScript/main.js" result = execute_js(js_input, js_path) print(f"JS执行结果page {i}:", result) ``` js代码的框架 ```javascript import fetch from 'node-fetch'; let window = globalThis; // 读取标准输入的参数 let inputData = ""; process.stdin.on("data", (chunk) => { inputData += chunk.toString(); }); // 输入读取完成后执行核心逻辑 process.stdin.on("end", async () => { try { const params = JSON.parse(inputData); const pageNum = params.pageNum * 1; let e = {} //复制出来的object // 这里放扣下来的代码,要注意调度器的暴露和初始化注释 window.data = window.o("7d92").a(e); // 构建请求参数 const response = await fetch(); let findate = window.o("7d92").b("SM4", await response.json()) console.log(JSON.stringify(findate.list)); } catch (error) { // 异常信息输出到标准错误 console.error(JSON.stringify({ code: -1, message: error.message, stack: error.stack })); process.exit(1); } }); } }); ``` ## 五、测试 能够正常获取,注释掉一部分加密参数也可以获取到,比想象中简单一些 
回复或点赞可查看完整内容
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
最后于
2026-2-7 14:28 被blackfoxdu编辑 ,原因: 格式调整
#其他
收藏
・
0
点赞
・
11
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
git_51951meggadf3df
非常支持你的观点!
2026-9-11 04:28
mb_lthgjpwj
为你点赞!
2026-8-21 08:09
afishlong
为你点赞!
2026-7-14 18:46
npc0vo
你的分享对大家帮助很大,非常感谢!
2026-4-25 21:45
mb_wyxkcdxv
感谢你分享这么好的资源!
2026-4-23 07:39
mb_tvuiswau
为你点赞!
2026-3-15 05:41
fogSea
感谢你的贡献,论坛因你而更加精彩!
2026-2-9 17:34
LIU.YZ
你的帖子非常有用,感谢分享!
2026-2-9 15:53
顽劣
你的分享对大家帮助很大,非常感谢!
2026-2-7 19:28
huangyalei
非常支持你的观点!
2026-2-7 16:09
mb_hzfcelhs
这个讨论对我很有帮助,谢谢!
2026-2-7 16:09
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
1
)
Imxz
雪 币:
112
活跃值:
(9420)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
752
粉丝
9
关注
私信
Imxz
2
楼
tql
2026-2-8 18:30
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
blackfoxdu
2
发帖
0
回帖
0
RANK
关注
私信
他的文章
[求助]webpack模块函数复制到本地运行的问题
2054
自己摸索并记录的webpack逆向案例
2714
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部