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.pswp.cn/news/271339.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271339.shtml
英文地址,請注明出處:http://en.pswp.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;目的是將相關的控件進行分組…