目录
声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!
前言
[JS逆向] 某医保服务平台数据获取https://blog.csdn.net/weixin_46874932/article/details/134834269
在这篇文章那边扣的webpack是全部模块都扣下来的、
想写一个小工具来实现自动化去除一下用不上的模块
实现步骤
1.记录需要加载的模块
1、需要对该webpack模块进行记录需要用那些模块
1、需要添加一个列表来存放模块
2、反正webpack自执行一次,定义一个sp来判断状态
3、在需要导出的模块之前再命名sp为1
让sp为1,确认下面模块是需要执行的
2、复制arr数组
2.执行AST脚本剔除
1、需要替换arr的列表,进行剔除
2、会输出以下的日志
3、对比之前来看,少了 6万多行
3、运行结果
运行下来完全没有什么问题
4、AST代码
const parser = require("@babel/parser").parse;
const traverse = require("@babel/traverse").default;
const generate = require("@babel/generator").default
const t = require("@babel/types");
const fs = require('fs')
/**
* 去除Webpack未被使用的模块
*/
let DelWebpack = (function (Ast, arr) {
/**
* Ast: 节点树
* arr: 需要保留的webpack模块
* return: Ast
*/
!function () {
var arr_ = []
for (var item of arr) {
arr_.push(item + "")
}
arr = arr_
}()
function NAME(value, name) {
if (value !== undefined) {
return value
}
return name
};
var visitor = {
ObjectProperty(path) {
let node = path.node
// console.log(node.key.name, node.key.value)
if ((node.key.value !== undefined || node.key.name !== undefined) && path.parent.type === "ObjectExpression") {
if (path.parentPath.parent.type === "CallExpression" && path.parentPath.parentPath.parent.type === "UnaryExpression") {
name = NAME(node.key.value, node.key.name)
if (arr.indexOf(name.toString()) === -1) {
console.log("[未使用] =>", name.toString())
path.remove()
} else {
console.log("[已使用] =>", name.toString(), path.parentPath.parent.type)
}
}
} else {
return undefined
}
path.skip()
}
};
traverse(Ast, opts = visitor)
return Ast
})
exports.Run = DelWebpack;
if (require.main === module) {
const code = fs.readFileSync('./webpack_mixer.js', 'utf-8');
var ast = parser(code, {sourceType: "module"})
let arr = [
"e04e",
];
ast = DelWebpack(ast, arr)
code_ = generate(ast)
fs.writeFile('./Decode.js', code_.code, (err => {
}))
}
总结
1、出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来.
2、本人写作水平有限,如有讲解不到位或者讲解错误的地方,还请各位大佬在评论区多多指教,共同进步
3、如果这篇文章对你有帮助,就点赞、关注、收藏、三连击一下
4、本篇分享到这里就结束了,欢迎大家关注下期,我们不见不散☀️☀️😊