练习网站:某省投资项目平台(注:本教程只用来分享逆向技术)
网站分析:
点击网站翻页,在控制面板中可发现,数据是通过异步请求接口传入的
遇到加密网站,一般我们都会先试一下能不能搜出来字段值的入口。显然这个网站没有搜到(像这种单字母的值基本上排除这种办法找入口)
那么,我们就要想办法定位到其中一个加密字段所在的js文件的栈位置。根据自己的经验,我选择通过开发者工具中的initiator启动器快速定位到js发送请求的位置
如图
然后在这个位置打上断点,点击翻页,使新一页请求的数据断到这行代码
成功断住之后,我们就可以顺着堆栈结构往上跟。如果大家是新手的话,建议大家跟栈的时候一步一步的跟,可能跟栈会自己枯燥,但是肯定能准确定位到加密位置。经过跟栈,我定位到了加密所在js文件,因为在这里已经能看到加密值,如图
那么,具体的加密逻辑也就差不多在这里附近。然后我就往上看代码,终于,加密位置也被成功找到
那就基本上找到治病药方了,接下来,大致读了一下js代码逻辑,我们就可以把这三个加密字段破解出来。具体怎么破,如果你完全熟悉他的js逻辑,那你就可以写python脚本去模拟生成;那如果你不想那么麻烦,你就完全可以抠出来代码,稍加改动,让其核心加密代码能够在你的js程序中运行就行了。具体抠代码如下:
function fjm_sdk() {
// var curUrl = '/icity/api-v2' + "/" + 'jxtzxm.app.icity.ipro.IproCmd' + "/" + 'getDisplayListByPage';
var curUrl = "";
// var sig = "";
var chars = "0123456789abcdef";
var curTime = parseInt(Math.random() * (9999 - 1000 + 1) + 1000) + "" + Date.parse(new Date());
sig = chars.charAt(parseInt(Math.random() * (15 - 15 + 1) + 10)) + chars.charAt(curTime.length) + "" + curTime;
var key = "";
var keyIndex = -1;
for (var i = 0; i < 6; i++) {
var c = sig.charAt(keyIndex + 1);
key += c;
keyIndex = chars.indexOf(c);
if (keyIndex < 0 || keyIndex >= sig.length) {
keyIndex = i;
}
}
var timestamp = parseInt(Math.random() * (9999 - 1000 + 1) + 1000) + "_" + key + "_" + Date.parse(new Date());
var tkey = "";
var tkeyIndex = -1;
for (var i = 0; i < 6; i++) {
var c = timestamp.charAt(tkeyIndex + 1);
tkey += c;
tkeyIndex = chars.indexOf(c);
if (tkeyIndex < 0 || tkeyIndex >= timestamp.length) {
tkeyIndex = i;
}
}
var t = timestamp;
//LEx.azdg.encrypt(timestamp,key);
t = t.replace(/\+/g, "_");
curUrl += "?s=" + sig;
curUrl += "&t=" + t;
curUrl += "&o=" + tkey;
return curUrl
}
console.log(fjm_sdk())
运行js文件,就能得到加密数据,接下来就能正常获取到网站数据了
那么,今日的分享就到这里,想要学习更多的python爬虫和js逆向的相关技巧和知识的小伙伴们一定要点下关注哟,后期会不定时分享相关干货内容