6、37网游网页Post登陆算法分析【Post/Js逆向笔记】

事先说明:发布文章内容,只为自己自学逆向分析做一个记录,方便以后加以巩固学习逆向分析。

本人为逆向学习小白,所以发布的内容都是简单的逆向分析。大佬请高抬贵手!

 1、分析的登陆网站 

https://www.37.com/

2、使用工具

chrome浏览器 

鬼鬼调试工具

3、开始post分析

测试账号 Steven2020  密码:a123456


请求时发现 登陆请求竟然不是post请求,是get请求。请求参数都在请求的URL上面带上

https://my.37.com/api/login.php?callback=jQuery183011611722936955027_1611911356694&action=login&login_account=Steven2020&password=Szl6c1g3WnNhMTJyNmE3TTM0NTYzaw%3D%3D&ajax=0&remember_me=1&save_state=1&ltype=1&tj_from=101&s=1&tj_way=1&_=1611921384855

callback: jQuery183011611722936955027_1611911356694
action: login
login_account: Steven2020
password: Szl6c1g3WnNhMTJyNmE3TTM0NTYzaw==
ajax: 0
remember_me: 1
save_state: 1
ltype: 1
tj_from: 101
s: 1
tj_way: 1
_: 1611921384855

callback: jQuery183011611722936955027_1611911356694
action: login
login_account: Steven2020
password: TGxUN2d6anBhMTJ0ejhxVDM0NTZWeA==
ajax: 0
remember_me: 1
save_state: 1
ltype: 1
tj_from: 101
s: 1
tj_way: 1
_: 1611923666084

经过多次抓包,基本上可以得出,callback参数是变化的,password是加密的,_:应该是个时间戳


4、password解密

把 关键词password 输入到全局搜索当中。获取到了很多的password的数据。通过一个个的排查试错后。

发现 h.password = td(f)  这个较为可疑,td函数中传入一个f变量,赋值给h对象中的password。

那么就点击进入这个js代码中,下个断点看看能不能调试!

OK,断点应该是下对的,当下在 _action 函数中断点跟随到 h.password = td(f) ,但是没有执行函数,目前  h.password 的数据为  之前输入的密码:a123456

按 F10 执行后

此时  h.password 就是 加密后的数据了  "TGxUN2d6anBhMTJ0ejhxVDM0NTZWeA==",那么说明 函数 td 就是 给密码加密的函数,

点击进入td 函数中,可以看到 这个加密函数调用了 __rsa函数,也是刚刚在 自身的上面定义好了,那么就直接把这个JS文件复制出来。放入鬼鬼调试工具中。

var ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function __rsa(str) {
    var out, i, len;
    var c1, c2, c3;
    len = str.length;
    i = 0;
    out = "";
    while (i < len) {
        c1 = str.charCodeAt(i++) & 0xff;
        if (i == len) {
            out += ch.charAt(c1 >> 2);
            out += ch.charAt((c1 & 0x3) << 4);
            out += "==";
            break
        }
        c2 = str.charCodeAt(i++);
        if (i == len) {
            out += ch.charAt(c1 >> 2);
            out += ch.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
            out += ch.charAt((c2 & 0xF) << 2);
            out += "=";
            break
        }
        c3 = str.charCodeAt(i++);
        out += ch.charAt(c1 >> 2);
        out += ch.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
        out += ch.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
        out += ch.charAt(c3 & 0x3F)
    }
    return out
}
function td(a) {
    var maxPos = ch.length - 2
      , w = [];
    for (i = 0; i < 15; i++) {
        w.push(ch.charAt(Math.floor(Math.random() * maxPos)));
        if (i === 7) {
            w.push(a.substr(0, 3))
        }
        if (i === 12) {
            w.push(a.substr(3))
        }
    }
    return __rsa(w.join(""))
}

调试后,直接可以获取到密码加密后的数据。在 td函数中有随机数,所以每次进行加密后的数据,都是不一样的。

 

5、callback 解密

callback: jQuery183011611722936955027_1611911356694
action: login
login_account: Steven2020
password: Szl6c1g3WnNhMTJyNmE3TTM0NTYzaw==
ajax: 0
remember_me: 1
save_state: 1
ltype: 1
tj_from: 101
s: 1
tj_way: 1
_: 1611921384855

callback: jQuery183011611722936955027_1611911356694
action: login
login_account: Steven2020
password: TGxUN2d6anBhMTJ0ejhxVDM0NTZWeA==
ajax: 0
remember_me: 1
save_state: 1
ltype: 1
tj_from: 101
s: 1
tj_way: 1
_: 1611923666084

通过多次的抓包测试,可以发现 callback: jQuery183011611722936955027_1611911356694   这样的数据 通过下划线可以分割成 一个固定的值 和一个时间戳

jQuery183011611722936955027_“时间戳”

其余的参数固定即可!

有一个需要注意的是,多次抓包后,在点击登陆后,会出发图片验证码!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值