某邮箱登录实战
只对密码加密部分进行讲解,
本文只做技术研究学习,请勿用于非法用途
抠出来的加密算法我放在文章最后
1、我们简单抓个包(登录的包),抓包就不需要我多说了吧,应该很简单了,打开开发者工具F12,然后回到页面输入账号密码即可
需要注意的是,这个网站他每次登录失败都会刷新界面,所以Preserve log选项一定要勾上
2、然后,我们找到登录的包,也就是下面这张图画出来的包,一般登录的包都会有很明显的标志,比如登录,login就是标志,发送验证码,sms、smscode、ver什么的都是很常见的标识
3、然后我们找到提交信息的部分,可以发现Password也就是我们输入的密码被加密了,我刚开始第一眼看过去以为是个MD5加密,毕竟形式很像MD5加密,于是我直接用工具测试了一下,发现加密出来的结果不对(我这密码明文是 123456)
4、我们还是老规矩,直接搜索Password这个关键词,然后你就会发现,并没有JS的文件,只有一个HTML的文件,其实他的加密嵌套在HTML里,所以这算是一个挺有趣的东西
5、点进这个文件,继续搜索Password,然后可以很轻松的定义到这个位置,如果不仔细看的话,很多人都会直接跳过,因为我们的常见的加密赋值方式都是:密文 = 加密函数(明文)这样的格式,但是这里用了一个变量a混淆,其实分析多了这样做并没什么用
5、可以发现a.value = c.calcDigest(“fetion.com.cn:” + $E(“txtPass”).value)就是加密的部分,直接看函数的参数部分,“txtPass”就是你输入密码的那个输入框,取这个里面的值,所以可以很容易猜到明文就是:fetion.com.cn:123456,验证一下看看,打个断点在这,很容易的就猜出来了
6、我们接着跟进这个加密函数中,发现定位到这里,然后我们可以发现这个加密函数包含在一个函数体内(懂JS的人应该很容易看出来),于是我们直接将这段代码抠出来,放在工具里调试运行,看看能否得到与浏览器相同的结果
7、得到结果与网页一致,于是我们就可以直接在本地调试了,到此Password这个参数的加密就搞定了,是一个自写的加密算法,还不算是复杂
这是抠出来的代码块
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
}
})();
最后,欢迎来一起交流逆向方面的知识
有某些加密弄不出来可以留言哦,一起学习交流
多交流才是逆向思维得以增长的方式