JS解密之自写加密算法实战(超简单)

某邮箱登录实战

只对密码加密部分进行讲解,
实战传送门 ------ 某邮箱登录界面
视频教程 -----传送门

本文只做技术研究学习,请勿用于非法用途
本文只做技术研究学习,请勿用于非法用途
本文只做技术研究学习,请勿用于非法用途


抠出来的加密算法我放在文章最后

1、我们简单抓个包(登录的包),抓包就不需要我多说了吧,应该很简单了,打开开发者工具F12,然后回到页面输入账号密码即可

需要注意的是,这个网站他每次登录失败都会刷新界面,所以Preserve log选项一定要勾上

JS解密之自写加密算法实战(超简单)_第1张图片
2、然后,我们找到登录的包,也就是下面这张图画出来的包,一般登录的包都会有很明显的标志,比如登录,login就是标志,发送验证码,sms、smscode、ver什么的都是很常见的标识
JS解密之自写加密算法实战(超简单)_第2张图片
3、然后我们找到提交信息的部分,可以发现Password也就是我们输入的密码被加密了,我刚开始第一眼看过去以为是个MD5加密,毕竟形式很像MD5加密,于是我直接用工具测试了一下,发现加密出来的结果不对(我这密码明文是 123456
JS解密之自写加密算法实战(超简单)_第3张图片
4、我们还是老规矩,直接搜索Password这个关键词,然后你就会发现,并没有JS的文件,只有一个HTML的文件,其实他的加密嵌套在HTML里,所以这算是一个挺有趣的东西

JS解密之自写加密算法实战(超简单)_第4张图片
5、点进这个文件,继续搜索Password,然后可以很轻松的定义到这个位置,如果不仔细看的话,很多人都会直接跳过,因为我们的常见的加密赋值方式都是:密文 = 加密函数(明文)这样的格式,但是这里用了一个变量a混淆,其实分析多了这样做并没什么用

JS解密之自写加密算法实战(超简单)_第5张图片
5、可以发现a.value = c.calcDigest(“fetion.com.cn:” + $E(“txtPass”).value)就是加密的部分,直接看函数的参数部分,“txtPass”就是你输入密码的那个输入框,取这个里面的值,所以可以很容易猜到明文就是:fetion.com.cn:123456,验证一下看看,打个断点在这,很容易的就猜出来了JS解密之自写加密算法实战(超简单)_第6张图片
6、我们接着跟进这个加密函数中,发现定位到这里,然后我们可以发现这个加密函数包含在一个函数体内(懂JS的人应该很容易看出来),于是我们直接将这段代码抠出来,放在工具里调试运行,看看能否得到与浏览器相同的结果

JS解密之自写加密算法实战(超简单)_第7张图片

7、得到结果与网页一致,于是我们就可以直接在本地调试了,到此Password这个参数的加密就搞定了,是一个自写的加密算法,还不算是复杂

JS解密之自写加密算法实战(超简单)_第8张图片

这是抠出来的代码块

window = this;
(function () {
    function a(a, c) {
        var d = (a & 65535) + (c & 65535);
        return (a >> 16) + (c >> 16) + (d >> 16) << 16 | d & 65535
    }
    window.calcDigest = function (b) {
        for (var c = (b.length + 8 >> 6) + 1, d = Array(16 * c), e = 0; e < 16 * c; e++) d[e] = 0;
        for (e = 0; e < b.length; e++) d[e >> 2] |= b.charCodeAt(e) << 24 - 8 * (e & 3);
        d[e >> 2] |= 128 << 24 - 8 * (e & 3);
        d[16 * c - 1] = 8 * b.length;
        b = Array(80);
        for (var c = 1732584193, e = -271733879, f = -1732584194, g = 271733878, k = -1009589776, h = 0; h < d.length; h += 16) {
            for (var l = c, m = e, n = f, p = g, q = k, j = 0; 80 > j; j++) {
                b[j] = 16 > j ? d[h + j] : (b[j - 3] ^ b[j - 8] ^ b[j - 14] ^ b[j - 16]) << 1 | (b[j - 3] ^ b[j - 8] ^ b[j - 14] ^ b[j - 16]) >>> 31;
                var r = a(a(c << 5 | c >>> 27, 20 > j ? e & f | ~e & g : 40 > j ? e ^ f ^ g : 60 > j ? e & f | e & g | f & g : e ^ f ^ g), a(a(k, b[j]), 20 > j ? 1518500249 : 40 > j ? 1859775393 : 60 > j ? -1894007588 : -899497514)),
                    k = g,
                    g = f,
                    f = e << 30 | e >>> 2,
                    e = c,
                    c = r
            }
            c = a(c, l);
            e = a(e, m);
            f = a(f, n);
            g = a(g, p);
            k = a(k, q)
        }
        d = [c, e, f, g, k];
        b = "";
        for (c = 0; c < 4 * d.length; c++) b += "0123456789abcdef".charAt(d[c >> 2] >> 8 * (3 - c % 4) + 4 & 15) + "0123456789abcdef".charAt(d[c >> 2] >> 8 * (3 - c % 4) & 15);
        return b
    }
})();

需要工具的小伙伴可以去公众号
【奈玖吃土的编程技术】
里免费领取
有很多实用的逆向工具,你想要的那儿都有
还有很多逆向的教程不断更新


最后,欢迎来一起交流逆向方面的知识
有某些加密弄不出来可以留言哦,一起学习交流
多交流才是逆向思维得以增长的方式

往期文章推荐

某关村实战
某信平台实战

你可能感兴趣的:(逆向专精,算法,加密解密,javascript)