• Js逆向教程-09常见的加密方式


    作者:虚坏叔叔
    博客:https://xuhss.com

    早餐店不会开到晚上,想吃的人早就来了!😄

    Js逆向教程-09常见的加密方式

    常见的加密方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLvC2edJ-1668827715716)(../../1.png)]

    一、js逆向流程

    1. 抓包
    2. 调试
    3. 扣去js
    4. 改写
    5. 本地运行

    二、常见的加密方式

    2.1取盐校验

    不可逆。

    md5

    默认key:

    0123456789ABCDEF
    
    • 1

    16进制,(16/32/40位)

    字符串123456
    16位 小写49ba59abbe56e057
    16位 大写49BA59ABBE56E057
    32位 小写e10adc3949ba59abbe56e057f20f883e
    32位 大写E10ADC3949BA59ABBE56E057F20F883E

    记住123456:16位已49开头,32位e10开头

    sha加密
    字符串123456
    sha1(40位)7c4a8d09ca3762af61e59520943dc26494f8941b
    sha256(64位)8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
    sha512(128位)ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413

    2.2对称加密和非对称加密

    对称加密和非对称加密一般不是16、32、40、64、128位。

    要么是16进制:(0-9,A-F)

    要么是base64编码:如果字符串只包含下列字符,最后的1个或者2个字符是等号,大概率是base64编码:

    A-Z a-z 0-9 + _ =
    
    • 1
    对称加密

    通过明文数据加密文数据,在用同一个密钥将密文数据解密成明文数据。

    • AES
    • DES
    • 3DES
    非对称加密

    同一个明文可以生成不同的密文,不同的密文可以直接还原成同一个明文。

    密钥有2个(公钥和私钥),客户端只有公钥,服务器有公钥和私钥。

    • RSA

    关键key:

    abcdefg
    
    • 1

    三、实战

    以搜狐为例,可以看到是md5加密

    在这里插入图片描述

    3.1如何下断点

    通过搜索password=搜索找到位置:

    在这里插入图片描述

    搜索userid也能找到:

    在这里插入图片描述

    搜索0123456789可以快速搜索到:

    搜索魔法值:1732584193

    通过这种方式最好,因为其他方式会加一些其他的密,会加盐。这种方式最快定位明文数据。

    在这里插入图片描述

    3.2扣去js

    确认是否扣全了,如果只扣md5,需要修改的很多。将一个完整的this对象扣取下来,就会少很多代码。

    this对象是什么?

    var xuhss = {
    	name:"xuhss",//值
    	md5:function() // 方法
        {
            return "123"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    上面的xuhss是一个对象,那么md5是它的一个方法。

    js只有对象用冒号。

    对于md5来说,对象就是utils

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDq3r6uM-1668827715717)(02 - 副本.assets/image-20221119084036608.png)]

    扣取js的原则就是:改的越少越好。各种方式都可以。

    3.2.1只扣取md5

    可以将整个js文件全部拷贝下来,然后放到notepad++中,用js格式化,折叠所有代码。找到md5方法.

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSXxlffA-1668827715717)(02 - 副本.assets/image-20221119090859509.png)]

    将这个方法放到另一个文件中去:

            md5: function(args) {
                function hex_md5(s) {
                    return binl2hex(core_md5(str2binl(s), s.length * chrsz))
                }
                function core_md5(x, len) {
                    x[len >> 5] |= 128 << len % 32,
                    x[14 + (len + 64 >>> 9 << 4)] = len;
                    for (var a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, i = 0; i < x.length; i += 16) {
                        var olda = a
                          , oldb = b
                          , oldc = c
                          , oldd = d;
                        a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936),
                        d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586),
                        c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819),
                        b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330),
                        a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897),
                        d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426),
                        c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341),
                        b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983),
                        a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416),
                        d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417),
                        c = md5_ff(c, d, a, b, x[i + 10], 17, -42063),
                        b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162),
                        a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682),
                        d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101),
                        c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290),
                        b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329),
                        a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510),
                        d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632),
                        c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713),
                        b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302),
                        a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691),
                        d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083),
                        c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335),
                        b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848),
                        a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438),
                        d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690),
                        c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961),
                        b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501),
                        a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467),
                        d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784),
                        c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473),
                        b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734),
                        a = md5_hh(a, b, c, d, x[i + 5], 4, -378558),
                        d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463),
                        c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562),
                        b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556),
                        a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060),
                        d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353),
                        c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632),
                        b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640),
                        a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174),
                        d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222),
                        c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979),
                        b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189),
                        a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487),
                        d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835),
                        c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520),
                        b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651),
                        a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844),
                        d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415),
                        c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905),
                        b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055),
                        a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571),
                        d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606),
                        c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523),
                        b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799),
                        a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359),
                        d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744),
                        c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380),
                        b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649),
                        a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070),
                        d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379),
                        c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259),
                        b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551),
                        a = safe_add(a, olda),
                        b = safe_add(b, oldb),
                        c = safe_add(c, oldc),
                        d = safe_add(d, oldd)
                    }
                    return Array(a, b, c, d)
                }
                function md5_cmn(q, a, b, x, s, t) {
                    return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
                }
                function md5_ff(a, b, c, d, x, s, t) {
                    return md5_cmn(b & c | ~b & d, a, b, x, s, t)
                }
                function md5_gg(a, b, c, d, x, s, t) {
                    return md5_cmn(b & d | c & ~d, a, b, x, s, t)
                }
                function md5_hh(a, b, c, d, x, s, t) {
                    return md5_cmn(b ^ c ^ d, a, b, x, s, t)
                }
                function md5_ii(a, b, c, d, x, s, t) {
                    return md5_cmn(c ^ (b | ~d), a, b, x, s, t)
                }
                function safe_add(x, y) {
                    var lsw = (65535 & x) + (65535 & y);
                    return (x >> 16) + (y >> 16) + (lsw >> 16) << 16 | 65535 & lsw
                }
                function bit_rol(num, cnt) {
                    return num << cnt | num >>> 32 - cnt
                }
                function str2binl(str) {
                    for (var bin = Array(), mask = (1 << chrsz) - 1, i = 0; i < str.length * chrsz; i += chrsz)
                        bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32;
                    return bin
                }
                function binl2hex(binarray) {
                    for (var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef", str = "", i = 0; i < 4 * binarray.length; i++)
                        str += hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
                    return str
                }
                var hexcase = 0
                  , chrsz = 8;
                return hex_md5(args)
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119

    直接运行这段代码会报错

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0i6LbDa-1668827715718)(02 - 副本.assets/image-20221119091218106.png)]

    提示:这个函数需要函数名称 这时因为在对象可以这么定义方法,但是不在对象中,就需要改写

    function md5(args)
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnj6yW3l-1668827715719)(02 - 副本.assets/image-20221119095238124.png)]

    3.2.2扣去完整的对象
    utils = {
            extend: function() {
                var i, name, options, copy, target = arguments[0] || {}, len = arguments.length;
                for (i = 1; i < len; i++)
                    if (null !== (options = arguments[i]))
                        for (name in options)
                            void 0 !== (copy = options[name]) && (target[name] = copy);
                return target
            },
            inArray: function(item, ary) {
                for (var i = 0; i < ary.length; i++)
                    if (ary[i] === item)
                        return i;
                return -1
            },
            isString: function(o) {
                return "string" == typeof o
            },
            isFunction: function(o) {
                return "function" == typeof o
            },
            isBool: function(o) {
                return "boolean" == typeof o
            },
            bind: function(func, context) {
                return function() {
                    func.apply(context, arguments)
                }
            },
            trim: function(str) {
                return this.isString(str) ? str.replace(/^\s+/, "").replace(/\s+$/, "") : str
            },
            param: function(o) {
                var ary = [];
                for (var key in o)
                    ary.push(key + "=" + o[key]);
                return ary.join("&")
            },
            url: function(u, o) {
                return u += (/\?/.test(u) ? "&" : "?") + this.param(o)
            },
            md5: function(args) {
                function hex_md5(s) {
                    return binl2hex(core_md5(str2binl(s), s.length * chrsz))
                }
                function core_md5(x, len) {
                    x[len >> 5] |= 128 << len % 32,
                    x[14 + (len + 64 >>> 9 << 4)] = len;
                    for (var a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, i = 0; i < x.length; i += 16) {
                        var olda = a
                          , oldb = b
                          , oldc = c
                          , oldd = d;
                        a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936),
                        d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586),
                        c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819),
                        b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330),
                        a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897),
                        d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426),
                        c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341),
                        b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983),
                        a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416),
                        d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417),
                        c = md5_ff(c, d, a, b, x[i + 10], 17, -42063),
                        b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162),
                        a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682),
                        d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101),
                        c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290),
                        b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329),
                        a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510),
                        d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632),
                        c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713),
                        b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302),
                        a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691),
                        d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083),
                        c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335),
                        b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848),
                        a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438),
                        d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690),
                        c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961),
                        b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501),
                        a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467),
                        d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784),
                        c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473),
                        b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734),
                        a = md5_hh(a, b, c, d, x[i + 5], 4, -378558),
                        d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463),
                        c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562),
                        b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556),
                        a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060),
                        d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353),
                        c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632),
                        b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640),
                        a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174),
                        d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222),
                        c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979),
                        b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189),
                        a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487),
                        d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835),
                        c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520),
                        b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651),
                        a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844),
                        d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415),
                        c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905),
                        b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055),
                        a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571),
                        d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606),
                        c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523),
                        b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799),
                        a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359),
                        d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744),
                        c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380),
                        b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649),
                        a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070),
                        d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379),
                        c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259),
                        b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551),
                        a = safe_add(a, olda),
                        b = safe_add(b, oldb),
                        c = safe_add(c, oldc),
                        d = safe_add(d, oldd)
                    }
                    return Array(a, b, c, d)
                }
                function md5_cmn(q, a, b, x, s, t) {
                    return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
                }
                function md5_ff(a, b, c, d, x, s, t) {
                    return md5_cmn(b & c | ~b & d, a, b, x, s, t)
                }
                function md5_gg(a, b, c, d, x, s, t) {
                    return md5_cmn(b & d | c & ~d, a, b, x, s, t)
                }
                function md5_hh(a, b, c, d, x, s, t) {
                    return md5_cmn(b ^ c ^ d, a, b, x, s, t)
                }
                function md5_ii(a, b, c, d, x, s, t) {
                    return md5_cmn(c ^ (b | ~d), a, b, x, s, t)
                }
                function safe_add(x, y) {
                    var lsw = (65535 & x) + (65535 & y);
                    return (x >> 16) + (y >> 16) + (lsw >> 16) << 16 | 65535 & lsw
                }
                function bit_rol(num, cnt) {
                    return num << cnt | num >>> 32 - cnt
                }
                function str2binl(str) {
                    for (var bin = Array(), mask = (1 << chrsz) - 1, i = 0; i < str.length * chrsz; i += chrsz)
                        bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32;
                    return bin
                }
                function binl2hex(binarray) {
                    for (var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef", str = "", i = 0; i < 4 * binarray.length; i++)
                        str += hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
                    return str
                }
                var hexcase = 0
                  , chrsz = 8;
                return hex_md5(args)
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aHQ7eR64-1668827715720)(02 - 副本.assets/image-20221119101541452.png)]

    总结

    最后的最后
    由本人水平所限,难免有错误以及不足之处, 屏幕前的靓仔靓女们 如有发现,恳请指出!

    最后,谢谢你看到这里,谢谢你认真对待我的努力,希望这篇博客对你有所帮助!

    你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!

    💬 往期优质文章分享

    🚀 优质教程分享 🚀

    • 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
    • 🎄比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏
    • 🎄可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
    学习路线指引(点击解锁)知识定位人群定位
    🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
    💛Python量化交易实战 💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
    ❤️ C++ QT结合FFmpeg实战开发视频播放器❤️难度偏高分享学习QT成品的视频播放器源码,需要有扎实的C++知识!
    💚 游戏爱好者九万人社区💚互助/吹水九万人游戏爱好者社区,聊天互助,白嫖奖品
    💙 Python零基础到入门 💙Python初学者针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门

    🚀 资料白嫖,温馨提示 🚀

    关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!

    请添加图片描述

  • 相关阅读:
    【LeetCode】209. 长度最小的子数组
    将数据库中的数据接入Echarts图表
    前端清除所有cookie
    E. Split Into Two Sets(染色法判断二分图)
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    社区通过!Interim Grant Program提案详细内容(包含申请Grants链接)
    Python代码的编写运行方式
    英语教师杂志英语教师杂志社英语教师编辑部2022年第16期目录
    LVS简介【暂未完成(半成品)】
    【无标题】H5页面解决点击页面处关闭键盘,触发了页面的事件的问题
  • 原文地址:https://blog.csdn.net/huangbangqing12/article/details/127934436