webpack打包后引用cdn的js_JS逆向:Webpack打包后的代码怎么搞?猿人学爬虫比赛第十六题详细题解...

实战地址

http://match.yuanrenxue.com/match/16

抓包分析

地址栏输入 地址,按下F12并回车,发现数据在这里:

36d7e7906565fe2ae71f0560c57705c2.png

查看cookie,无加密相关的字段。请求的接口倒是有个m的加密参数,看来这题的主要目的就是 看看m参数怎么进行加密的吧。

切换 Initiator,这请求也太明显了,点击下面所示的js文件:

4f5d0674e2ce6769730f4de51a8a8b0c.png

跟进去并美化后,来到这里:

10128be0f8f1090499a14921fff92267.png

不用过多分析,m加密在这里:

r.m = n[e(528)](btoa, p_s),r.t = p_s;

而这个实参 p_s 是由上面的这行代码生成的:

p_s = Date[e(496)](new Date)[e(517)]();

在 r.m 赋值的这行打上断点,请求第二页,控制台输入 btoa 并回车,双击跟进,来到这里:

354ab0c93175f9630e96e788f8569f34.png

看这个混淆,很明显的 obfuscator 混淆,直接将整个 732 copy下来保存到文件,并写出AST插件进行反混淆:

0cc9a7b5e28debad7972afd156b5474f.png

进行反混淆和删除垃圾代码,优化后的btoa函数:

function btoa(e) {  var f = "U9876543210zyxwvutsrqpomnlkjihgfdecbaZXYWVUTSRQPONABHICESQWK2Fi+9876543210zyxwvutsrqpomnlkjihgfdecbaZXYWVUTSRQPONABHICESQWK2Fi";  for (var o, a, s, l = 0, c = []; l < e["length"];) {    a = e["charCodeAt"](l), s = l % 6;    switch (s) {      case 0:        c["push"](f["charAt"](a >> 2));        break;      case 1:          c["push"](f["charAt"]((2 & o) << 3 | a >> 4));        break;      case 2:        c["push"](f["charAt"]((15 & o) << 2 | a >> 6)), c["push"](f["charAt"](a & 63));        break;      case 3:        c["push"](f["charAt"](a >> 3));        break;      case 4:        c["push"](f["charAt"]((o & 4) << 6 | a >> 6));        break;      case 5:        c["push"](f["charAt"]((o & 15) << 4 | a >> 8)), c["push"](f["charAt"](a & 63));    }    o = a, l++;  }    c["push"](f["charAt"]((o & 3) << 4)), c["push"]("FM");    return d(15) + md5(c["join"]("")) + d(10);}

这里可以看到还有 d 函数 和 md5 函数,分别进行抠取和优化。

优化后的d函数:

function d(e) {  e = e ||32;  var l = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678";  var s = l["length"];  var c = "";  for (i = 0; i < e; i++) c += l["charAt"](Math["floor"](Math["random"]() * s));  return c;}

优化后的md5函数:

function md5(e) {  function o(e, n) {    e[n >> 5] |= 128 << n % 32;    e[(n + 64 >>> 9 << 4) + 14] = n;    var b = 1732584193;    var x = -271733879;    var T = -1732584194;    var w = 271733878;    for (var d = 0; d < e["length"]; d += 16) {      var m = b;      var y = x;      var v = T;      var g = w;      b = s(b, x, T, w, e[d + 0], 7, -680976936);      w = s(w, b, x, T, e[d + 1], 12, -389564586);      T = s(T, w, b, x, e[d + 2], 17, 606105819);      x = s(x, T, w, b, e[d + 3], 22, -1044525330);      b = s(b, x, T, w, e[d + 4], 7, -176418897);      w = s(w, b, x, T, e[d + 5], 12, 1200080426);      T = s(T, w, b, x, e[d + 6], 17, -1473231341);      x = s(x, T, w, b, e[d + 7], 22, -45705983);      b = s(b, x, T, w, e[d + 8], 7, 1770035416);      w = s(w, b, x, T, e[d + 9], 12, -1958414417);      T = s(T, w, b, x, e[d + 10], 17, -42063);      x = s(x, T, w, b, e[d + 11], 22, -1990404162);      b = s(b, x, T, w, e[d + 12], 7, 1804550682);      w = s(w, b, x, T, e[d + 13], 12, -40341101);      T = s(T, w, b, x, e[d + 14], 17, -1502002290);      x = s(x, T, w, b, e[d + 15], 22, 1236531029);      b = l(b, x, T, w, e[d + 1], 5, -165796510);      w = l(w, b, x, T, e[d + 6], 9, -1069501632);      T = l(T, w, b, x, e[d + 11], 14, 643717713);      x = l(x, T, w, b, e[d + 0], 20, -373897302);      b = l(b, x, T, w, e[d + 5], 5, -701520691);      w = l(w, b, x, T, e[d + 10], 9, 38016083);      T = l(T, w, b, x, e[d + 15], 14, -660478335);      x = l(x, T, w, b, e[d + 4], 20, -405537848);      b = l(b, x, T, w, e[d + 9], 5, 568446438);      w = l(w, b, x, T, e[d + 14], 9, -1019803690);      T = l(T, w, b, x, e[d + 3], 14, -187363961);      x = l(x, T, w, b, e[d + 8], 20, 1163531501);      b = l(b, x, T, w, e[d + 13], 5, -1444681467);      w = l(w, b, x, T, e[d + 2], 9, -51403784);      T = l(T, w, b, x, e[d + 7], 14, 1735328473);      x = l(x, T, w, b, e[d + 12], 20, -1921207734);      b = u(b, x, T, w, e[d + 5], 4, -378558);      w = u(w, b, x, T, e[d + 8], 11, -2022574463);      T = u(T, w, b, x, e[d + 11], 16, 1839030562);      x = u(x, T, w, b, e[d + 14], 23, -35311556);      b = u(b, x, T, w, e[d + 1], 4, -1530992060);      w = u(w, b, x, T, e[d + 4], 11, 1272893353);      T = u(T, w, b, x, e[d + 7], 16, -155497632);      x = u(x, T, w, b, e[d + 10], 23, -1094730640);      b = u(b, x, T, w, e[d + 13], 4, 681279174);      w = u(w, b, x, T, e[d + 0], 11, -358537222);      T = u(T, w, b, x, e[d + 3], 16, -722881979);      x = u(x, T, w, b, e[d + 6], 23, 76029189);      b = u(b, x, T, w, e[d + 9], 4, -640364487);      w = u(w, b, x, T, e[d + 12], 11, -421815835);      T = u(T, w, b, x, e[d + 15], 16, 530742520);      x = u(x, T, w, b, e[d + 2], 23, -995338651);      b = c(b, x, T, w, e[d + 0], 6, -198630844);      w = c(w, b, x, T, e[d + 7], 10, 11261161415);      T = c(T, w, b, x, e[d + 14], 15, -1416354905);      x = c(x, T, w, b, e[d + 5], 21, -57434055);      b = c(b, x, T, w, e[d + 12], 6, 1700485571);      w = c(w, b, x, T, e[d + 3], 10, -1894446606);      T = c(T, w, b, x, e[d + 10], 15, -1051523);      x = c(x, T, w, b, e[d + 1], 21, -2054922799);      b = c(b, x, T, w, e[d + 8], 6, 1873313359);      w = c(w, b, x, T, e[d + 15], 10, -30611744);      T = c(T, w, b, x, e[d + 6], 15, -1560198380);      x = c(x, T, w, b, e[d + 13], 21, 1309151649);      b = c(b, x, T, w, e[d + 4], 6, -145523070);      w = c(w, b, x, T, e[d + 11], 10, -1120210379);      T = c(T, w, b, x, e[d + 2], 15, 718787259);      x = c(x, T, w, b, e[d + 9], 21, -343485551);      b = f(b, m);      x = f(x, y);      T = f(T, v);      w = f(w, g);    }    return Array(b, x, T, w);  }  function a(e, n, r, o, a, s) {    return f(d(f(f(n, e), f(o, s)), a), r);  }  function s(e, n, r, o, s, l, u) {    return a(n & r | ~n & o, e, n, s, l, u);  }  function l(e, n, r, o, s, l, u) {    return a(n & o | r & ~o, e, n, s, l, u);  }  function u(e, n, r, o, s, l, u) {    return a(n ^ r ^ o, e, n, s, l, u);  }  function c(e, n, r, o, s, l, u) {    return a(r ^ (n | ~o), e, n, s, l, u);  }  function f(e, n) {    var o = (65535 & e) + (n & 65535),        a = (e >> 16) + (n >> 16) + (o >> 16);    return a << 16 | o & 65535;  }  function d(e, n) {    return e << n | e >>> 32 - n;  }  function p(e) {    for (var r = Array(), o = 65535, a = 0; a < e["length"] * 16; a += 16) r[a >> 5] |= (e["charCodeAt"](a / 16) & o) << a % 32;    return r;  }  function h(e) {    for (var r = "0123456789abcdef", o = "", a = 0; a < e["length"] * 4; a++) o += r["charAt"](15 & e[a >> 2] >> a % 4 * 8 + 4) + r["charAt"](15 & e[a >> 2] >> a % 4 * 8);    return o;  }  return function (e) {    return h(o(p(e), 16 * e["length"]));  }(e);}

代码合并后,运行不再报错。很快就写出了 Python代码:

# -*- coding: utf-8 -*-import timeimport execjsimport requestsdef main():    sums = 0    headers = {"User-Agent": "yuanrenxue.project",}    with open("decode_16.js","r",encoding = "utf-8") as fp:        jscode = fp.read()    ctx = execjs.compile(jscode)        for i in range(1, 6):        t = str(int(time.time()*1000))        m = ctx.call("btoa",t)                params = {            "m":m,            "page":i,            "t":t,            }        response = requests.get(url="http://match.yuanrenxue.com/api/match/16",params = params,headers=headers).json()        for each in response["data"]:            sums += each["value"]    print(sums)    # 287383if __name__ == "__main__":    main()

对于这个webpack打包的网站来说,基本没啥难度吧,先优化一波,去混淆,删除垃圾代码,再缺啥补啥就好,浏览器相关的都不用补。

当然,webpack也有技巧,不过很少用的,无脑抠就好,然后缺啥补啥

我也不喜欢一大坨代码搞在一起,简单点,事情简单点,心情或许会好很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络基础:IP基础知识笔记

1、 IP地址概念IP是用来唯一标识主机地址。IP地址 网络地址 主机地址(又称&#xff1a;主机号和网络号组成)例如IP&#xff1a;192.168.100.168 子网掩码 255.255.255.0 对应的网络地址和主机地址如下&#xff1a;192.168.100.168&#xff08;IP地址&#xff09; 192.168.1.…

bs架构的系统能连接mysql吗_HTTP、BS架构

Django 底层原理快捷键方向键方向键本键如果活动选项是选项按钮或文件则为移动焦点&#xff1b;方向键 Win键(简称Win键)使窗口全屏、最小化、靠左半边、靠右半边(部分版本不支持)&#xff1b;方向键Shift键将连续的文字或文件选中方向键(左右)Ctrl键 在英文单词或中文词语间跳…

离散卷积的计算

本文转自&#xff1a; 离散卷积与自相关----------信号处理系列 http://www.cnblogs.com/einyboy/archive/2012/12/30/2839633.html 一、 定义 离散信号f(n),g(n)的定义如下&#xff1a; N-----为信号f(n)的长度 s(n)----为卷积结果序列,长度为len(f(n))len(g(n))-1 以3个元…

计算机网络基础:Internet常用服务介绍​

1、域名服务Internet中的域名地址和IP地址是等价的&#xff0c;它们之间是通过域名服务完成映射的。实际上DNS是一种分布式地址信息数据库系统&#xff0c;服务器中包含整个数据库的某部分信息&#xff0c;并供客户查询。域名系统采用客户端/服务器模式&#xff0c;整个系统由解…

lamba

lamba /*** lamba*/Testpublic void test5() {Runnable r () -> System.out.println("hello");r.run();}Testpublic void test6() {int num 0;Runnable r new Runnable() {Overridepublic void run() {System.out.println("java");}};r.run();}

c语言深度剖析第三版pdf_入门到入坟,蕴含全网最强知识点3283页笔记、pdf教程,活到老,学到老...

又到了“金九银十”面试求职高峰期&#xff0c;在金三银四时也参与过不少面试&#xff0c;2020都说工作不好找&#xff0c;也是对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档&#xff08;1000道高频题&#xff09;&#x…

mysql 5.7.23要钱吗_最新mysql 5.7.23安装配置图文教程

2018年最新mysql5.7详细安装与配置&#xff0c;总共分为四步&#xff0c;其中环境变量配置不是必须的。1、安装包下载2、安装过程3、环境变量配置4、连接测试一、官网下载mysql安装包1.前往官网下载&#xff0c;下载链接为&#xff1a;2.选择合适你电脑系统的版本进行安装。如果…

计算机基础:信息安全相关知识笔记

1、信息安全要素机密性&#xff1a;保证信息不暴露给未授权的用户。完整性&#xff1a;得到允许的用户可以修改数据&#xff0c;并且可以判断数据是否被篡改。可用性&#xff1a;拥有授权的用户可以在需要时访问数据。可控性&#xff1a;可控制授权的范围内的信息流向以及行为方…

计算机网络安全基础知识笔记

1、网络安全威胁介绍非法授权访问&#xff1a;没有预先经过同意&#xff0c;就使用网络或相关的计算机资源就是非授权访问。主要有以下几种形式&#xff1a;身份攻击、假冒、非法用户进入网络系统进行违法操作、合法用户以未授权的方式进行操作。信息泄露丢失&#xff1a;主要是…

lambda

例子&#xff1a;

数据库技术基础:数据库与数据库管理系统概念介绍

一、数据库系统基本概念知识1、 数据&#xff08;Data&#xff09;用来描述事物的符号记录&#xff0c;它具有多种表现形式比如文字、图形、图像、视频等。信息&#xff1a;是现实事物的存在方式或状态的反映。信息的特性有可感知、可存储、可加工、可传递、可再生等。2、 数据…

unity3d collider自动调整大小_Maya模型在Unity3d中的快速烘焙【2020】

本文小姐姐将以一个Maya的室内小客厅场景为例&#xff0c;和童鞋们一起讨论Unity3d快速烘焙Maya室内模型光照的方法&#xff0c;一方面是对前面知识的综合应用&#xff0c;另一方面满足一下做室内设计童鞋的学习需求。话不多说&#xff0c;开工&#xff01;这个例子的Maya场景模…

angualarjsdemo

AngularJs学习笔记--Forms 原版地址&#xff1a;http://code.angularjs.org/1.0.2/docs/guide/forms 控件&#xff08;input、select、textarea&#xff09;是用户输入数据的一种方式。Form&#xff08;表单&#xff09;是这些控件的集合&#xff0c;目的是将相关的控件进行分组…

Java中Comparator比较器的使用以及使用lamba简化代码

代码例子&#xff1a; /*** 测试Comparator*/Testpublic void test17() {//原始方法Comparator<Integer> comparator new Comparator<Integer>() {Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o1, o2);}};int compare1 compara…

数据库技术基础:数据库管理系统的功能介绍笔记

1、DBMS功能介绍1.1 数据定义数据库定义语言&#xff08;DDL&#xff09;&#xff1a;可以对数据库结构描述&#xff0c;包括外模式、模式、内模式的定义&#xff1b;数据库完整性定义&#xff1b;安全保密定义比如口令、级别和存取权限。这些定义存储在数据字典中是DBMS运行的…

charles乱码_基于iOS的Charles抓包实践

奇技指南在应用开发过程中&#xff0c;通过抓包调试服务端接口的场景时常出现。Charles和Wireshark是开发过程中最常用的两款软件。那么今天&#xff0c;让我们以iOS为例&#xff0c;聊一聊Charles抓包。本文来自360奇舞团QiShare团队投稿。在日常开发中&#xff0c;我们无法看…

那些程序员爆笑段子,扎心了…

1、特殊“2020是属于程序员的一年。”“怎么说&#xff1f;”“2020-1024996。”2、真相“你们程序员是不是没见过下班时候的太阳&#xff1f;”“也不是啦&#xff0c;夏天的时候还是能看到的。”“哦哦&#xff0c;夏天黑得比较晚。”“不是&#xff0c;是天亮得比较早。”3、…

lambda中sorted排序

准备工作&#xff0c;新建一个User类 使用stream排序操作&#xff08;默认ASC排序) stream倒序排序操作 sorted(Comparator.reverseOrder()) 代码例子&#xff1a; /*** lambda* sorted排序*/Testpublic void test19() {List<Integer> list new ArrayList<>();…