这个是虚坏叔叔的主站。牢记域名: [xuhss.com](拼音首字母)。首页可以搜索或: 虚幻账号

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

js 虚幻 18℃ 0评论

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

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

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

常见的加密方式

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

一、js逆向流程

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

二、常见的加密方式

2.1取盐校验

不可逆。

md5

默认key:

0123456789ABCDEF

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 + _ =

对称加密

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

  • AES
  • DES
  • 3DES

非对称加密

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

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

  • RSA

关键key:

abcdefg

三、实战

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

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

3.1如何下断点

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

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

搜索userid也能找到:

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

搜索0123456789可以快速搜索到:

搜索魔法值:1732584193

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

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

3.2扣去js

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

this对象是什么?

var xuhss = {
    name:"xuhss",//值
    md5:function() // 方法
    {
        return "123"
    }
}

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

js只有对象用冒号。

对于md5来说,对象就是utils

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

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

3.2.1只扣取md5

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

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

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

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

直接运行这段代码会报错

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

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

function md5(args)

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

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

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

总结

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

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

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

💬 往期优质文章分享

🚀 优质教程分享 🚀

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

🚀 资料白嫖,温馨提示 🚀

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

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

转载请注明:虚坏叔叔 » Js逆向教程-09常见的加密方式

喜欢 (1)

您必须 登录 才能发表评论!