文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-08-31 09:58

关注

作者前言

这是我的gitee仓库:https://gitee.com/qin-laoda/python-exercises

有兴趣的小可爱们可以点进去看看,

目录

常见的js加密算法
微信公众号的简单案例

________________________________

鉴于有一些小可爱对于js逆向的理解还有一些不解,下面我会再进一步的介绍js逆向,

常见的加密算法

 1.线性散列的MD5算法

对称加密DES/AES算法

非对称加密算法RSA

base64伪加密

https证书钥加密

js逆向-MD5加密(理论上无法破解)

MD5是一种被广泛使用的线性散列算法,可以产生一个128位(16字节)的散列值(hash value),用户确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度(32位或16位)的数据

AES DES对称加密(用一个密钥加密解密)

DES全称为Data Encryption Standard ,即数据加密标准,是一种使用秘钥加密的算法,该加密算法是一种对称加密方式,其加密运算、解密运算需要使用的是同样的秘钥(一组字符串)即可。
注意:

使用DES/AES进行数据交换时要求双方都拥有相同的私钥
破解方法:

  1. 暴力破解
  2. DES如果使用56位的秘钥,则可能的秘钥数量是2的56次方个。只要计算足够大是可以破解的

DES算法的入口参数有三个:

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

RSA加密算法是一种非对称加密算法。在公开秘钥加密和电子商业中RSA被广泛使用
非对称加密算法需要两个秘钥:

注意:

使用流程和场景介绍:

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

base64伪加密(一种编码格式)

Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法,知识看上去像是加密而已
使用A-Z,a-z,0-9,+,/ 这64个字符实现对数据加密

https加密

https是基于http和SSL/TLS实现的一个协议,它可以保证在网络上传输的数据都是加密的,从而保证数据安全
如何实现https

  1. http协议是不安全的
    在https诞生之前,所有网站都是使用的http协议,而http协议在数据传输的过程中都是明文,所以可能存在数据泄露和篡改
  2. 使用对称秘钥进行数据加密
    为了防止数据泄露和篡改,我们对数据进行加密,如:生成一个对称密码,将对称秘钥分别交给浏览器和服务器端,他们之间传输的数据都使用对称秘钥进行加密和解密

 

请求和响应流程如下:

  1. 动态对称秘钥和非对称秘钥​​​​​​​

        上图就是理论上通过RSA的原理来发送密钥,缺点就是无法知道客户端接收的公钥是不是服务器的

  1. CA证书的应用
  2. 证书就是提供密钥,由可靠平台颁布
  3. 抓包工具就是一个代理服务器,接收客户端发来的数据然后再发送给服务器

下面我们来一个简单的案例

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

操作:

输入密码和账号 并打开开发者工具

找到对应接口

 可以看出上图加密的是32位可以大概判断是MD5加密

然后找到对应的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文件进行发送

代码如下:

import requestsimport execjsimport timedef 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")        # 执行js中的函数        result = ctx.call(js_name, func_args)        print(result)        return resulta = get_js("./01.js", "demo", ("123456",))def main():    """主要的业务逻辑"""    # 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"    }    # 发送请求获取响应    response = requests.post(url, data=data,headers=header)    print(response.json())    # 数据的提取    # 保存if __name__ == '__main__':    main()

结果:

 总结

上面就是一些简单MD5的案例,后面会陆续上传其他案例,

来源地址:https://blog.csdn.net/m0_69984273/article/details/131354069

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯