post登陆分析实例,网站自定义password加密方式的分析

前端加密主流的有这么几种方式:RSA、MD5、自定义加密函数,其中自定义加密函数的可变性更加强,在实际分析中也更加有难度。

今天分析一个自定义加密的网站来说明这一点,网站是空中网,首先填个假信息抓个包看看。

image

表单数据

j:j(empty)type:1service:https://passport.kongzhong.com/username:18328491111password:368c041f87be04f72d3fvcode:toSave:0_:1547992251984

比较意外的是这个网站是以get方式登陆的,也是比较奇特了。看password字段不伦不类的,那自定义加密函数的几率比较大,然后全局收索password

一番查询之后没有明显的加密相关的js,但是发现了一个eval加密的js,那这就很可疑了。

image

eval解密再看这段js函数其中有两处是有价值的

function encrypt ()

this.encrypt(pwd, this.j_data["dc"])

很明显这就是密码加密的方式,果真是自定义的加密方式

var KZLoginHandler = {······param += "&password=" + this.encrypt(pwd, this.j_data["dc"]);······'encrypt': function(str, pwd) {    if (pwd == null || pwd.length <= 0) {        return null    };    var prand = "";    for (var i = 0; i < pwd.length; i++) {        prand += pwd.charCodeAt(i).toString()    };    var sPos = Math.floor(prand.length / 5);    var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));    var incr = Math.ceil(pwd.length / 2);    var modu = Math.pow(2, 31) - 1;    if (mult < 2) {        return null    };    var salt = Math.round(Math.random() * 1000000000) % 100000000;    prand += salt;    while (prand.length > 10) {        var a = prand.substring(0, 1);        var b = prand.substring(10, prand.length);        if (b.length > 10) {            prand = b        } else {            prand = (parseInt(a) + parseInt(b)).toString()        }    };    prand = (mult * prand + incr) % modu;    var enc_chr = "";    var enc_str = "";    for (var i = 0; i < str.length; i++) {        enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255));        if (enc_chr < 16) {            enc_str += "0" + enc_chr.toString(16)        } else enc_str += enc_chr.toString(16);        prand = (mult * prand + incr) % modu    };    salt = salt.toString(16);    while (salt.length < 8) salt = "0" + salt;    enc_str += salt;    return enc_str}};

然后继续看加密的js,encrypt(pwd, this.j_data["dc"]),还需要一个this.j_data["dc"],这个应该是服务器传回的的,类似密钥的东西,然后再看其他几个请求,其中一个请求返回了dc

image

到此这个网站的密码加密方式我们就很清楚了,在打开网站的时候服务器会返回一串字符串,用于加密,加密的js是通过eval方式处理的。


ID:Python之战

|作|者|公(zhong)号:python之战

专注Python,专注于网络爬虫、RPA的学习-践行-总结

喜欢研究技术瓶颈并分享,欢迎围观,共同学习。

独学而无友,则孤陋而寡闻!


你可能感兴趣的:(post登陆分析实例,网站自定义password加密方式的分析)