栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

js逆向学习记录某真气网

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

js逆向学习记录某真气网

项目场景:

第一次写不知道能否表达清楚

在B站上学习JS逆向,结果学到最后一个练习项目时。因为之前学习得人把人家网站搞崩了。到了我来爬取得时候,这个网站反爬已经大幅度升级了,爬取难度急据升高。

声明:JS逆向成功后我就没有继续爬了,没有攻击对方服务器,如果有什么违规地方,立马删除。(网站url:私聊吧,不然又崩了可不太好)


相关工具 语言:

Python 3.6.1 :: Anaconda 4.4.0 (64-bit)

node.js v14.16.0

第三方库:
requests 
execjs 
json 
subprocess
partial

开发工具:pycharm,chrome


找到可疑点:

提示:JS逆向主要是在开发者模式中,断点调试找到加密得地方

进入开发者模式模式:

理论上这段是不用说的,但这个网站反爬技术很完善


 如图该网站禁用了右键和F12

所以可以通过浏览器右上角三个点---->更多工具---->开发者工具,进入

无限debugger

进入之后就会发现自动进入到了断点调试的状态,是因为下面这据代码

(function anonymous(
) {
debugger
})

破解方法:选择"debugger"前的行号,右键弹出下图窗口。可以选择1、或者2、

选择1、要在以后输入一个false。选择2、直接就可。两者都要再点击“跳到下一个断点”

具体参照:web反调试之无限debugger饶过方案汇总 - 996station

到这里还不行,你会看到下面的情况

 它的的原理是,监视页面的窗口大小,小于某个值就会显示以上内容。破解方法很简单,如下。

 

 两种找到可疑点的方法: 第一种全局搜索fromData参数名:

chrome抓包找到对应的请求

 

 第二种,通过按钮查看绑定的事件,一层层解析

 

接下来可以看Python爬虫从入门到大神到JS逆向再到APP逆向 持续更新中~_哔哩哔哩_bilibili

 最后还是到这

逆向分析

从这里可以看到FromData来源与data:{hT5i4Eu2x:pwG2gyr}。pwG2gyr是由“

var pwG2gyr =pIywvl1oiy(mvpDrF875,ooISoR2Gom);”得到的。所以关键函数就是pIywvl1oiy()如下

return function(method, obj){
    var appId = '2b3d1754aac69d4e84b3bb5620ba578e';
    var clienttype = 'WEB';
    var timestamp = new Date().getTime();
    // console.log(method, obj,ObjectSort(obj),appId + method + timestamp + 'WEIXIN' + JSON.stringify(ObjectSort(obj)));
    var param = {
      appId: appId,
      method: method,
      timestamp: timestamp,
      clienttype: clienttype,
      object: obj,
      secret: hex_md5(appId + method + timestamp + clienttype + JSON.stringify(ObjectSort(obj)))//加密处
    };

    param = BASE64.encrypt(JSON.stringify(param));//加密处
    param = AES.encrypt(param, ackvMDije6Ku, aciiBrTMXFqu);//加密处
    return param;
};
})();

可以看出影响结果地方是“hex_md5(appId + method + timestamp + clienttype + JSON.stringify(ObjectSort(obj)))“和 ”param = AES.encrypt(param, ackvMDije6Ku, aciiBrTMXFqu);“

而timestamp、clienttype是不变的,method,obj是我们自己输入的。appId,ackvMDije6Ku,aciiBrTMXFqu乍一看是写死的,其实不是。如果你多次抓包就可以发现它们三在每个文件中的值是变化的,所以必须实时获取。这处很坑,如果不注意就会落入陷阱,觉得一切都是对的但结果就是出不来。appId来自当前函数,ackvMDije6Ku,aciiBrTMXFqu出现在文件开头,如下。

你有没有发现有几个参数的名字特别怪,例如ackvMDije6Ku,pIywvl1oiy,mvpDrF875等。这是因为这些关键字,甚至包括这个文件都是被动态加密的。在这其中有一个很重要的关键字FromData的键,如下图。这个值不能写死,他又时间限制,一段时间后会失效。必须实时获取。见前文这个关键字在Data里。

总上如果我们想要成功加密,就必须动态获取以上几个参数。而在写参数都来自于那个JS文件。这个文件的url,通过左侧的全局搜索得到https://www.xxxxx.cn/js/encrypt_e6Q87gvKk99t.min.js?v=1658658361

而这个URL也是实时生成的如这e6Q87gvKk99t和v=1658658361。后面的是时间戳,而前面的是对方后台生成的,我们无法自己生成。但是学过WEB前端的都知道,js文件一般放在html文件的