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();}

第五章 Response(JavaTM Servlet 规范3.1 )

The Response 响应 响应对象包装了从服务器端返回到客户端的所有信息。在HTTP协议上&#xff0c;这些信息既可以通过HTTP headers 又可以通过响应体从服务器端传输到客户端。 5.1 缓冲 为了效率&#xff0c;servlet 容器允许但非必须缓冲到客户端的输出。典型地&#xff0c;服…

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;可控制授权的范围内的信息流向以及行为方…

mysql gtid ha_MySQl新特性 GTID

GTID简介概念全局事务标识符(GTID)是创建的唯一标识符&#xff0c;并与在源(主)服务器上提交的每个事务相关联。此标识符不但是唯一的&#xff0c;而且在给定复制设置中的所有服务器上都是唯一的。所有交易和所有GTID之间都有一对一的映射关系。GTID由source_id和transaction_i…

python gui界面 tcp_通过python实现TCP编程

伪代码&#xff1a; ss socket() #创建服务器套接字 ss.bind() #把地址绑定到套接字上 ss.listen() #监听连接&#xff08;最大连接数&#xff09; info_loop: #服务器无限循环 cs ss.accept() #接受客户端连接 comm_loop: #通信循环 cs.recv()/cs.send() #对话&#xff08;接…

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

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

Delphi面向对象学习随笔七:COM

作者&#xff1a;巴哈姆特http://www.cnpack.org&#xff08;转载请注明出处并保持完整&#xff09; 上一篇&#xff0c;我们介绍了接口。如果没有接触过COM对象的话&#xff0c;你会觉得接口真的很麻烦&#xff0c;也许会有&#xff1a;“还不如直接定义一个类更方便”的想法。…

lambda

例子&#xff1a;

mysql查询语句详解_基于mysql查询语句的使用详解

1> 查询数据表除了前三条以外的数据。起初我想到的是这条语句SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ORDER BY userid LIMIT 3) ORDER BY userid DESC但是运行的时候会报 This version of MySQL doesnt yet support LIMIT & IN/ALL/ANY/SO…

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

一、数据库系统基本概念知识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;目的是将相关的控件进行分组…