事先说明:发布文章内容,只为自己自学逆向分析做一个记录,方便以后加以巩固学习逆向分析。
本人为逆向学习小白,所以发布的内容都是简单的逆向分析。大佬请高抬贵手!
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<ype=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_“时间戳”
其余的参数固定即可!
有一个需要注意的是,多次抓包后,在点击登陆后,会出发图片验证码!