JS逆向中常见的window.webpackJsonp分析_Zzzzzzzzzzzaa2的博客-程序员宅基地

技术标签: 爬虫  python  开发语言  

参考文章:
https://blog.csdn.net/yyone123/article/details/107914309

在遇到webpack时,常见的一种形式是:

!function(e) {
    
    t = {
    };
    function n(r) {
    
        if (t[r]) return t[r].exports;
        var i = t[r] = {
    
            exports: {
    }
        };
        return e[r].call(i.exports, i, i.exports, n),
        i.exports
    };
    n('1')
}({
    
    1:function(){
    console.log(1)},
    5:function(){
    console.log(5)}
})

但有时候我们会遇到这样的形式:

(window.webpackJsonp = window.webpackJsonp || []).push([[36],{
    
    't1':function(x){
    
        console.log(x)
    },
    520:function(x){
    
        console.log('520' + x)
    },
    't2':function(x){
    
    }
}]) 

这种形式看着可能更加一头雾水了,需要一步步分析一下究竟是什么意思:
第一部分:

(window.webpackJsonp = window.webpackJsonp || [])

此处因为window.webpackJsonp=window.webpackJsonp的返回值就是window.webpackJsonp,所以可以化简为:

(window.webpackJsonp || [])
//也即:

if (window.webpackJsonp){
    
//什么都不干
}
else{
    
window.webpackJsonp = [];
}

说白了,第一部分的意思就是:如果window.webpackJsonp为空,就声明window.webpackJsonp为一个数组变量;如果window.webpackJsonp不为空,那么表达式为window.webpackJsonp,执行第二部分。

第二部分:

push([[36],{
    }]);

第一部分理解了,第二部分就容易了,就是push参数。绕了一个小弯的是[[36],{…}],乍一看push,应该是push(a, b)这种形式,但这里是第一层就只push了一个值,是一个二维数组;第二层才push了两个值,第一个值是36,第二个值是一个对象。

第三部分:

{
    
    't1':function(x){
    
        console.log(x)
    },
    520:function(x){
    
        console.log('520' + x)
    },
    't2':function(x){
    
    }
}

这一部分其实和文章开头webpack的那种形式一样,此处的例子是传入的是对象,所以我们在调用的时候要以(‘函数名’)的方式去调用,如:

console.log(window.webpackJsonp[0][1]['t1'])

这种webpack加载的方式,最终呈现的效果长这样:
在这里插入图片描述

当进行JS逆向的时候遇到这种形式的webpack,可以扣出我们需要的目标函数,然后将它们放在标准的webpack里进行调用即可,其他大致流程一样,主要是理解两种webpack不同写法的异同。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Xzike/article/details/123874734

智能推荐

常见的十大网络安全工具_自饰者六便士的博客-程序员宅基地

Nmap是一款常用的网络扫描工具,能够识别网络中的主机和开放的端口。它的使用原理是根据发送给目标主机的不同类型的数据包的响应,来判断主机的状态和端口开放情况。_网络安全工具

Mysql基础(三)----- 查询-程序员宅基地

文章目录一. 数据的操作1. DML2. DQL二. 连接查询1. 内连接查询2. 外连接查询3. 外键操作4. 联合查询三. 子查询1. 引发子查询的情况2. 将查询结果写入数据表中3. 创建数据表时同时将查询结果写入数据表中四. 正则表达式查询一. 数据的操作1. DML更新数据--更新用户名为4位的用户,让其年龄-3UPDATE cms_user SET age=age-3 WHERE username LIKE '____';--更新前三条记录,让已有年龄+10,更新或删除时不能用偏

DataGrip使用入门-常用设置(二)_datagrip断开数据库连接-程序员宅基地

打开DataGrip,选择File->Settings,当前面板显示了常用设置项基本上默认设置就足够了,要更改设置也很简单,左侧菜单已经分类好了,第一项是数据库相关的配置,第二项是配置外观的,在这里可以修改主题,key map修改快捷键,editor配置编辑器相关设置,在这里可以修改编辑器字体,展开edit项,..._datagrip断开数据库连接

《Python编程快速上手》实践项目——第四章_4.11.2 掷硬币的连胜_花似季落的博客-程序员宅基地

4.11.1逗号代码spam = ['apples', 'bananas', 'tofu', 'cats', 'rat', 'bat', 'something']def test(spam): # 括号内变量只需和函数内对应即可 return(str(spam[i]))for i in range(len(spam)-1): a = test(spam) print(a+',', end='')print('and '+str(spam[-1]))4._4.11.2 掷硬币的连胜

[Unity] 使用Profiler.BeginSample()定位性能热点-程序员宅基地

Unity客户端优化中最常使用的辅助优化工具是Profiler。使用Profiler,可以方便我们定位游戏程序的性能瓶颈,如定位游戏中单帧耗时过高的模块、定位游戏中产生GC较多的模块等等。 尽管如此,在实际优化分析过程中,即使直接使用Profiler定位到游戏瓶颈的大致模块,也往往不能分析出更精确的瓶颈代码。例如,在实际开发过程中,我们发现Game.Update()这一模块特别耗时,_profiler.beginsample

解决阿里云轻量应用服务器不能安装应用_安装app总打开阿里云_yHAIYUE的博客-程序员宅基地

解决阿里云轻量应用服务器不能安装应用我第一次连接好购买的阿里云服务器,准备安装nginx,出现以下问题:解决方法如下:先后执行如下命令:rm -rf ./*wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repoyum makecache这样就能成功安装nginx了。..._安装app总打开阿里云

随便推点

linux多线程查看工具(pstree、ps、pstack)-程序员宅基地

linux多线程查看工具(pstree、ps、pstack)1. pstreepstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552)

信息安全和网络空间安全_机密性保护需要考虑的问题-程序员宅基地

可问责性也称为可审核性,作为治理的一个方面,问责是承认和承担行动,产品,决策和政策的责任,包括在角色或就业岗位范围内的行政,治理和实施以及报告,解释并对所造成的后果负责。信息安全应该建立在整个生命周期中所关联的人,事,物的基础上,综合考虑人,技术,管理和过程控制,使得信息安全不是一个局部而是一个整体。实体是他所声称的属性,也可以理解为能对信息的来源进行判断,能对伪造来源的信息予以鉴别。网络空间成为继海洋,陆地,太空,外太空之外的第五空间。安全措施:防火墙,防病毒,漏洞扫描,入侵检测,PKI,VPN等。_机密性保护需要考虑的问题

Macmini Macbook WiFi 无法加入网络,无法加入 wifi 无法连接,The Wi-Fi network could not be 蓝牙卡顿 | 问题解决【知道真相的你,会哭的】_orangepi the wi-fi network could not be found.-程序员宅基地

MacMini WiFi 无法连接问题解决问题描述点击连接的时候提示“无法加入wifi”,换路由器,换WIFI名,换密码都不能连接,2.0 不能连接,5.0 的也不能连接,重启电脑和路由器n次无果,电脑一度处于无网络连接状态,今天我都要重装电脑了打算,竟然无意中发现了答案。如图(我用的英文,一个意思): 起因你电脑上插了 USB 3.0 的设备,硬盘盒,干扰了WI..._orangepi the wi-fi network could not be found.

Nginx静态资源配置_nginx配置本地静态资源-程序员宅基地

1、概述本篇博文记录把静态资源放到Linux中搭建的Nginx服务的过程。2、资源准备(1)静态资源:搜索页面和购物车的静态html文件,以及css、js和图片等资源(2)上传到Nginx服务器的某目录可以使用3、Nginx配置(1)nginx.conf文件配置新增两个server模块,一个模块对应的是一个虚拟主机,此处采用端口和域名进行区分。购物..._nginx配置本地静态资源

【PAT(甲级)】1010 Radix 测试点的分析_pat甲级 1010 测试点3_猪脑不过载的博客-程序员宅基地

【PAT(甲级)】1010 Radix 测试点的分析解题思路分享,代码里有详细的注释_pat甲级 1010 测试点3

Spring Security 实战内容:图解Spring Security中的Servlet过滤器体系_spring security 改写过滤器链中的servlet-程序员宅基地

1. 前言Spring Security真正的过滤器体系才是我们了解它是如何进行"认证"、“授权”、“防止利用漏洞”的关键。2. Servlet Filter体系这里我们以Servlet Web为讨论目标,Reactive Web暂不讨论。我们先来看下最基础的Servlet体系,在Servlet体系中客户端发起一个请求过程是经过0到N个Filter然后交给Servlet处理。Filter不但可以修改HttpServletRequest和HttpServletResponse,可以让我们在请求响应的_spring security 改写过滤器链中的servlet

推荐文章

热门文章

相关标签