国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python---js逆向------再接再勵------案例

這篇具有很好參考價值的文章主要介紹了python---js逆向------再接再勵------案例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

作者前言

這是我的gitee倉庫:https://gitee.com/qin-laoda/python-exercises

有興趣的小可愛們可以點進去看看,

目錄

常見的js加密算法
微信公眾號的簡單案例

________________________________

鑒于有一些小可愛對于js逆向的理解還有一些不解,下面我會再進一步的介紹js逆向,

常見的加密算法

?1.線性散列的MD5算法

2.對稱加密DES/AES算法

3.非對稱加密算法RSA

4.base64偽加密

5.https證書鑰加密

js逆向-MD5加密(理論上無法破解)

MD5是一種被廣泛使用的線性散列算法,可以產生一個128位(16字節(jié))的散列值(hash value),用戶確保信息傳輸完整的一致性。且MD5加密之后產生的是一個固定長度(32位或16位)的數(shù)據(jù)

  • 解密:

    • 常規(guī)講MD5是不存在解密的,但是理論上MD5可以反向暴力破解,暴力破解的原理就是用很多不同的數(shù)據(jù)進行加密后跟已有加密數(shù)據(jù)進行對比,由此來尋找規(guī)律。理論上只要數(shù)據(jù)量足夠龐大即可,但是實際中要考慮破解成本(時間和機器性能)。假設破解當前MD5密碼需要目前計算能力最優(yōu)秀的計算機工作100年才能完成破解,那么當前的MD5密碼就是安全的
  • 增加破解成本的方法

    • 使用一段無意義且隨機的私鑰進行MD5加密會生成一個加密串,稱為串1
    • 將要加密的數(shù)據(jù)跟串1拼接,再進行一次MD5,這時會生成串2
    • 將串2再次進行MD5加密,這時生成的串3就是我們加密后的數(shù)據(jù)
  • 我們在注冊賬號時密碼一般都是MD5加密

AES DES對稱加密(用一個密鑰加密解密)

DES全稱為Data Encryption Standard ,即數(shù)據(jù)加密標準,是一種使用秘鑰加密的算法,該加密算法是一種對稱加密方式,其加密運算、解密運算需要使用的是同樣的秘鑰(一組字符串)即可。
注意:

  • 現(xiàn)在用的AES這個標準來替代原先的DES

  • AES和DES的區(qū)別:

    • 加密后秘文長度的不同

      • DES加密后密文長度是8的整數(shù)倍
      • AES加密后密文長度是16的整數(shù)倍
    • 應用場景的不同

      • 企業(yè)級開發(fā)使用DES足夠安全
      • 如果要求更高使用AES
    • DES和AES切換只需要修改CrytoJS.AES<=>CryptoJS.DES

使用DES/AES進行數(shù)據(jù)交換時要求雙方都擁有相同的私鑰
破解方法:

  1. 暴力破解
  2. DES如果使用56位的秘鑰,則可能的秘鑰數(shù)量是2的56次方個。只要計算足夠大是可以破解的

DES算法的入口參數(shù)有三個:

  • Key、Data、Mode、padding

    • Key為7個字節(jié)共56位,是DES算法的工作秘鑰
    • Data為8字節(jié)64位,是要被加密或被解密的數(shù)據(jù)
    • Mode為DES的工作方式
    • padding為填充模式,如果加密后密文長度如果達不到指定整數(shù)倍(8字節(jié)、16字節(jié)),填充對應字符 。padding的賦值固定為CryptoJS.pad.Pkcs即可

RSA加密(公鑰加密,私鑰解密)

RSA加密算法是一種非對稱加密算法。在公開秘鑰加密和電子商業(yè)中RSA被廣泛使用
非對稱加密算法需要兩個秘鑰:

  • 公開秘鑰(publickey:簡稱公鑰)
  • 私有秘鑰(privatekey:簡稱私鑰)
  • 公鑰和私鑰是一對,如果用公鑰對數(shù)據(jù)進行加密,只有用對應的私鑰才能解密,因為加密和解密使用的是兩個不同的秘鑰,所以這種算法叫做非對稱加密算法

注意:

  • 使用時都是使用公鑰加密使用私鑰解密。公鑰可以公開,私鑰自己保留
  • 算法強度復雜、安全性依賴于算法于秘鑰但是由于其算法復雜,而是的加密解密速度沒有對稱加密的速度快

使用流程和場景介紹:

  • 通過公鑰加密,使用私鑰解密,私鑰是通過公鑰計算生成的,假設ABC三方之間相互要進行加密通信。大家相互之間使用公鑰進行信息加密,信息讀取使用各自對應的私鑰進行信息解密
  • 用戶輸入的支付密碼會通過RSA加密

公鑰私鑰生成方式:公私鑰可以可以在線生成:http://web.chacuo.net/netrsakeypair

base64偽加密(一種編碼格式)

Base64是一種用64個字符來表示任意二進制數(shù)據(jù)的方法。base64是一種編碼方式而不是加密算法,知識看上去像是加密而已
使用A-Z,a-z,0-9,+,/ 這64個字符實現(xiàn)對數(shù)據(jù)加密

https加密

https是基于http和SSL/TLS實現(xiàn)的一個協(xié)議,它可以保證在網(wǎng)絡上傳輸?shù)臄?shù)據(jù)都是加密的,從而保證數(shù)據(jù)安全
如何實現(xiàn)https

  1. http協(xié)議是不安全的
    在https誕生之前,所有網(wǎng)站都是使用的http協(xié)議,而http協(xié)議在數(shù)據(jù)傳輸?shù)倪^程中都是明文,所以可能存在數(shù)據(jù)泄露和篡改python---js逆向------再接再勵------案例
  2. 使用對稱秘鑰進行數(shù)據(jù)加密
    為了防止數(shù)據(jù)泄露和篡改,我們對數(shù)據(jù)進行加密,如:生成一個對稱密碼,將對稱秘鑰分別交給瀏覽器和服務器端,他們之間傳輸?shù)臄?shù)據(jù)都使用對稱秘鑰進行加密和解密

?

3.請求和響應流程如下:

  • 客戶端使用對稱秘鑰對請求進行加密,并發(fā)送給服務器

  • 服務端接收到密文后,使用對稱秘鑰對密文進行解密,然后處理請求,最后再使用對稱秘鑰把返回的內容再次加密,返回給看客戶端

  • 客戶端接收密文之后,使用對稱秘鑰進行解密,并獲取最終的響應內容

    這樣,數(shù)據(jù)局傳輸傳輸都是密文,解決了明文傳輸數(shù)據(jù)的問題,但是這樣會有bug。

  • 瀏覽器如何獲取對稱秘鑰

  • 每個客戶端的對稱秘鑰相同,瀏覽器能拿到對稱秘鑰,那黑客也能拿到,所以數(shù)據(jù)加密就沒有意義了

  1. 動態(tài)對稱秘鑰和非對稱秘鑰???????python---js逆向------再接再勵------案例

? ? ? ? 上圖就是理論上通過RSA的原理來發(fā)送密鑰,缺點就是無法知道客戶端接收的公鑰是不是服務器的

  • 這樣就解決了動態(tài)對稱秘鑰和數(shù)據(jù)加密的問題,因為每個用戶的對稱秘鑰都是隨機生成且傳輸?shù)倪^程都使用公鑰加密(公鑰的加密數(shù)據(jù)只能有私鑰能解密),所有何可無法截獲對稱秘鑰。而數(shù)據(jù)傳輸是通過對稱秘鑰加密過的,所以黑客即使能獲取數(shù)據(jù)也無法去解密可看到真是的內容,看似無懈可擊,但是這樣還是會出現(xiàn)bug
  • 如果黑客在步驟2進行劫持,把自己的公鑰返回給客戶端,那客戶端會使用黑客的公鑰來加密對稱秘鑰,黑客在步驟6截獲請求,使用自己的私鑰獲取對稱秘鑰,后面過程全都失去作用
  1. CA證書的應用
  2. 證書就是提供密鑰,由可靠平臺頒布
  3. 抓包工具就是一個代理服務器,接收客戶端發(fā)來的數(shù)據(jù)然后再發(fā)送給服務器

下面我們來一個簡單的案例

鏈接:https://mp.weixin.qq.com/

操作:

輸入密碼和賬號 并打開開發(fā)者工具

python---js逆向------再接再勵------案例

找到對應接口

python---js逆向------再接再勵------案例

?可以看出上圖加密的是32位可以大概判斷是MD5加密

然后找到對應的js文件進行打斷點,運行

python---js逆向------再接再勵------案例

?python---js逆向------再接再勵------案例

?js代碼:


    function p(e, t) {
        var n = (65535 & e) + (65535 & t);
        return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
    }
    function a(e, t, n, i, o, s) {
        return p((t = p(p(t, e), p(i, s))) << o | t >>> 32 - o, n)
    }
    function l(e, t, n, i, o, s, r) {
        return a(t & n | ~t & i, e, t, o, s, r)
    }
    function g(e, t, n, i, o, s, r) {
        return a(t & i | n & ~i, e, t, o, s, r)
    }
    function m(e, t, n, i, o, s, r) {
        return a(t ^ n ^ i, e, t, o, s, r)
    }
    function h(e, t, n, i, o, s, r) {
        return a(n ^ (t | ~i), e, t, o, s, r)
    }
    function r(e, t) {
        e[t >> 5] |= 128 << t % 32,
            e[14 + (t + 64 >>> 9 << 4)] = t;
        for (var n, i, o, d, s = 1732584193, r = -271733879, a = -1732584194, c = 271733878, u = 0; u < e.length; u += 16)
            s = l(n = s, i = r, o = a, d = c, e[u], 7, -680876936),
                c = l(c, s, r, a, e[u + 1], 12, -389564586),
                a = l(a, c, s, r, e[u + 2], 17, 606105819),
                r = l(r, a, c, s, e[u + 3], 22, -1044525330),
                s = l(s, r, a, c, e[u + 4], 7, -176418897),
                c = l(c, s, r, a, e[u + 5], 12, 1200080426),
                a = l(a, c, s, r, e[u + 6], 17, -1473231341),
                r = l(r, a, c, s, e[u + 7], 22, -45705983),
                s = l(s, r, a, c, e[u + 8], 7, 1770035416),
                c = l(c, s, r, a, e[u + 9], 12, -1958414417),
                a = l(a, c, s, r, e[u + 10], 17, -42063),
                r = l(r, a, c, s, e[u + 11], 22, -1990404162),
                s = l(s, r, a, c, e[u + 12], 7, 1804603682),
                c = l(c, s, r, a, e[u + 13], 12, -40341101),
                a = l(a, c, s, r, e[u + 14], 17, -1502002290),
                s = g(s, r = l(r, a, c, s, e[u + 15], 22, 1236535329), a, c, e[u + 1], 5, -165796510),
                c = g(c, s, r, a, e[u + 6], 9, -1069501632),
                a = g(a, c, s, r, e[u + 11], 14, 643717713),
                r = g(r, a, c, s, e[u], 20, -373897302),
                s = g(s, r, a, c, e[u + 5], 5, -701558691),
                c = g(c, s, r, a, e[u + 10], 9, 38016083),
                a = g(a, c, s, r, e[u + 15], 14, -660478335),
                r = g(r, a, c, s, e[u + 4], 20, -405537848),
                s = g(s, r, a, c, e[u + 9], 5, 568446438),
                c = g(c, s, r, a, e[u + 14], 9, -1019803690),
                a = g(a, c, s, r, e[u + 3], 14, -187363961),
                r = g(r, a, c, s, e[u + 8], 20, 1163531501),
                s = g(s, r, a, c, e[u + 13], 5, -1444681467),
                c = g(c, s, r, a, e[u + 2], 9, -51403784),
                a = g(a, c, s, r, e[u + 7], 14, 1735328473),
                s = m(s, r = g(r, a, c, s, e[u + 12], 20, -1926607734), a, c, e[u + 5], 4, -378558),
                c = m(c, s, r, a, e[u + 8], 11, -2022574463),
                a = m(a, c, s, r, e[u + 11], 16, 1839030562),
                r = m(r, a, c, s, e[u + 14], 23, -35309556),
                s = m(s, r, a, c, e[u + 1], 4, -1530992060),
                c = m(c, s, r, a, e[u + 4], 11, 1272893353),
                a = m(a, c, s, r, e[u + 7], 16, -155497632),
                r = m(r, a, c, s, e[u + 10], 23, -1094730640),
                s = m(s, r, a, c, e[u + 13], 4, 681279174),
                c = m(c, s, r, a, e[u], 11, -358537222),
                a = m(a, c, s, r, e[u + 3], 16, -722521979),
                r = m(r, a, c, s, e[u + 6], 23, 76029189),
                s = m(s, r, a, c, e[u + 9], 4, -640364487),
                c = m(c, s, r, a, e[u + 12], 11, -421815835),
                a = m(a, c, s, r, e[u + 15], 16, 530742520),
                s = h(s, r = m(r, a, c, s, e[u + 2], 23, -995338651), a, c, e[u], 6, -198630844),
                c = h(c, s, r, a, e[u + 7], 10, 1126891415),
                a = h(a, c, s, r, e[u + 14], 15, -1416354905),
                r = h(r, a, c, s, e[u + 5], 21, -57434055),
                s = h(s, r, a, c, e[u + 12], 6, 1700485571),
                c = h(c, s, r, a, e[u + 3], 10, -1894986606),
                a = h(a, c, s, r, e[u + 10], 15, -1051523),
                r = h(r, a, c, s, e[u + 1], 21, -2054922799),
                s = h(s, r, a, c, e[u + 8], 6, 1873313359),
                c = h(c, s, r, a, e[u + 15], 10, -30611744),
                a = h(a, c, s, r, e[u + 6], 15, -1560198380),
                r = h(r, a, c, s, e[u + 13], 21, 1309151649),
                s = h(s, r, a, c, e[u + 4], 6, -145523070),
                c = h(c, s, r, a, e[u + 11], 10, -1120210379),
                a = h(a, c, s, r, e[u + 2], 15, 718787259),
                r = h(r, a, c, s, e[u + 9], 21, -343485551),
                s = p(s, n),
                r = p(r, i),
                a = p(a, o),
                c = p(c, d);
        return [s, r, a, c]
    }
    function c(e) {
        for (var t = "", n = 0; n < 32 * e.length; n += 8)
            t += String.fromCharCode(e[n >> 5] >>> n % 32 & 255);
        return t
    }
    function u(e) {
        var t, n = [];
        for (n[(e.length >> 2) - 1] = void 0,
                 t = 0; t < n.length; t += 1)
            n[t] = 0;
        for (t = 0; t < 8 * e.length; t += 8)
            n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
        return n
    }
    function i(e) {
        for (var t, n = "0123456789abcdef", i = "", o = 0; o < e.length; o += 1)
            t = e.charCodeAt(o),
                i += n.charAt(t >>> 4 & 15) + n.charAt(15 & t);
        return i
    }
    function d(e) {
        return unescape(encodeURIComponent(e))
    }
    function o(e) {
        return c(r(u(e = d(e)), 8 * e.length))
    }
    function s(e, t) {
        var n, e = d(e), t = d(t), i = u(e), o = [], s = [];
        for (o[15] = s[15] = void 0,
             16 < i.length && (i = r(i, 8 * e.length)),
                 n = 0; n < 16; n += 1)
            o[n] = 909522486 ^ i[n],
                s[n] = 1549556828 ^ i[n];
        return e = r(o.concat(u(t)), 512 + 8 * t.length),
            c(r(s.concat(e), 640))
    }
     function demo(e, t, n) {
        return t ? n ? s(t, e) : i(s(t, e)) : n ? o(e) : i(o(e))
    }

console.log(demo('s454fd5)

結果:python---js逆向------再接再勵------案例

?python代碼運行js文件進行發(fā)送

代碼如下:

import requests
import execjs
import time


def get_js(js_path, js_name, func_args=None):
    with open(js_path, "r", encoding="utf-8")as f:
        js = f.read()
        # 編譯js文件
        ctx = execjs.compile(js, cwd=r"C:\Users\32288\WebstormProjects\untitled\node_modules\crypto-js")
        # 執(zhí)行js中的函數(shù)
        result = ctx.call(js_name, func_args)
        print(result)
        return result


a = get_js("./01.js", "demo", ("123456",))


def main():
    """主要的業(yè)務邏輯"""
    # url
    url = "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin"
    data = {
        "username": 123456,
        "pwd": a,
        "mgcode": "",
        "f": "json",
        "userlang": "zh_CN",
        "redirect_url": "",
        "token": "",
        "lang": "zh_CN",
        "ajax": 1
    }
    header = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }
    # 發(fā)送請求獲取響應
    response = requests.post(url, data=data,headers=header)
    print(response.json())
    # 數(shù)據(jù)的提取
    # 保存


if __name__ == '__main__':
    main()

結果:

python---js逆向------再接再勵------案例

?總結

上面就是一些簡單MD5的案例,后面會陸續(xù)上傳其他案例,文章來源地址http://www.zghlxwxcb.cn/news/detail-501184.html

到了這里,關于python---js逆向------再接再勵------案例的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包