JS逆向-实操带你领略逆向的魅力
背景:停滞不进的三脚猫功夫应对不了运营产品日益增长的需求了,需要闭关修炼。
猿人学《第一届web端爬虫攻防大赛》题目1:抓取所有(5页)机票的价格,并计算所有机票价格的平均值,填入答案。地址:http://match.yuanrenxue.com/match/1
1、分析url
用network抓到的链接是http://match.yuanrenxue.com/api/match/1?m=d4b5e130853e58d66aaaf21c82ceef6b%E4%B8%A81627967988
观察m参数可知,末尾是时间戳,紧挨着是url编码。转换后的m是d4b5e130853e58d66aaaf21c82ceef6丨1627967988,注意这个是中文符号。charles能自动转码,用charles可验证一下。
url编码 就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。
时间戳 16开头的10或13位数字,如1627870080,17开头是2024年。
2、关闭断点
右键-never pause here。或把函数置空(override)
3、找加密逻辑
一些思路:全局搜索、调用栈、hook等。
找到请求接口/api/match/1所在函数:下一个XHR断点,查看call stack-request。
JS反混淆工具
// _0xb89747是一个对象
_0xb89747 = {page: 2, m: "482a7481bcf7c23505e126e72b8c94a2丨1628154188"}
查看代码
_0x2268f9 = Date['\x70\x61\x72\x73\x65'](new Date()) + (16798545 + -72936737 + 156138192)
_0x57feae = oo0O0(_0x2268f9['\x74\x6f\x53\x74\x72' + '\x69\x6e\x67']()) + window['\x66'];
_0x5d83a3['\x6d'] = _0x57feae + '\u4e28' + _0x2268f9 / (-1 * 3483 + -9059 + 13542);
在console里面打印,翻译后为
_0x2268f9 = Date.parse(new Date()) + 100000000
_0x57feae = oo0O0(_0x2268f9.toString()) + window.f
_0x5d83a3[m] = _0x57feae + "丨" + _0x2268f9 / 1000
光标放到oo0O0函数上,点击进入函数内部