python爬虫:喜马拉雅登录案例

声明:

本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

先逆向登录手机号和密码,网址:登录

1. 点击到网页主页

  • 先随便输入电话号码和密码

  • 打开开发者工具,点击网络清空,然后点击登录发起网络请求 (出现一个请求包,我们发现不是我们所需要的)

  •  我们进行验证滑块,就又出来请求,发现v2是我们登录所需要的

  • 我们复制它的url,获取代码,并且发起请求 (发现我们的请求是对的)

 2. js逆向登录

  • 我们想要大量的进行登录,我们就需要进行破解登录(请求加密),我们就可以找它的加密入口
  • 我是先通过,搜索关键字,encrypt(  进行搜索,然后使用请求堆栈找到加密入口

  •  我们可以看到a.getEncryptPwd(n)就是加密结果,控制台输出如下:

  •  所以说明我们主要的加密还是要靠a来加密,最后调用a里面的方法就可以对我们的电话号码进行加密,这时候我们找a(本文件往前面查找)

  •  一直往上面找,我们就找到了a,看到这个格式我们就立马想到了webpack,我们打上断点,刷新页面,找webpack调度器(webpack只能刷新整个页面调试断点)

  • 我们点到r里面去进行复制粘贴到pycharm中,并且创建以下文件

3. 调试代码、补环境

3.1 所需文件

  • env.js用来装补充环境的代码

  • loders.js用来装webpack的代码

  • main.js用来装我们调试的主要代码

  • mod.js放我们webpack中缺失的代码,可以又好几个

3.2  进行代码调试、补环境

3.2.1 先进入loaders.js文件中,我们进行webpack的准备操作(非常重要)
1.开头进行补环境 window = global  (先运行,看哪些环境需要进行补)
2.在加载函数中,注释初始化,一般在加载器函数中(最后一行)的进行注释 例如: // o(o.s = 0)
3.全局要调用加载器函数(看加载器函数中调用的是哪个对象就调用哪个全局变量) 例如: o.e/o.c/o.r(这时候我们就可以这样调用window.zhang = o)
4.打上执行模块日志,也在加载器函数中 (console.log("t:::",t))
  • 先补环境window = global 
  • 打上日志操作
  • 补充全局变量
  • 这个webpack中没有初始化,我们就需要注释初始化

 3.2.2  再到main.js'中进行调试
  • 模仿浏览器上的操作a=r(20),这里的r就是window.loader(我们手动定义的webpack全局变量)

1. 出现了错误,错误显示20不存在,我们就需要到浏览器中找到20所在的带吗复制过来,在进行调试

 

 2. 我们就解决了这个错误,在进行运行我们就又发现了一个错误我们t.exports = __award_library__:没有定义,再到浏览器就行搜索,找到在进行复制

 

  •  这里我们就有一个小问题,我么先定义,在调用,所以我们就应该把__award_library__这个放到mod1文件中,把之前的mod1改成mod2,先调用再执行(注意要把var去掉改成全局的)
3. 结局按完上个问题,就出现了下面这个问题

  • 说明缺少document这个环境,我们需要补环境 (我们为了防止看不清楚该补什么,我们可以借助proxy代理进行监听),需要监听哪个,我们就在最下面的列表里放进去哪一个
// proxy代理监控器
function setProxyArr(proxyObjArr) {
    for (let i = 0; i < proxyObjArr.length; i++) {
        const handler = `{
      get: function(target, property, receiver) {
        console.log("方法:", "get  ", "对象:", "${proxyObjArr[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", target[property], ", 属性值类型:", typeof target[property]);
        return target[property];
      },
      set: function(target, property, value, receiver) {
        console.log("方法:", "set  ", "对象:", "${proxyObjArr[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", value, ", 属性值类型:", typeof target[property]);
        return Reflect.set(...arguments);
      }
    }`;
        eval(`try {
            ${proxyObjArr[i]};
            ${proxyObjArr[i]} = new Proxy(${proxyObjArr[i]}, ${handler});
        } catch (e) {
            ${proxyObjArr[i]} = {};
            ${proxyObjArr[i]} = new Proxy(${proxyObjArr[i]}, ${handler});
        }`);
    }
}

setProxyArr(["window")
  • 补环境方法如下:
  • 先对document进行补环境,其次创建createElement方法,再createElement里面还使用了canvas,我们就可以打印并且并返回canvas,并且再全局也补上canvas方法
  • 如果不认识canvas是个什么,我们可以借助工具查看它 MDN Web Docs

4. 我们继续往下调试,我们就又有新的错误(需要补环境navigator)

  • useragent我们可以在浏览器终端输出一下,最后我们补充成功,结果如下:

5.我们就再运行程序,发现新的错误(location没有定义),如下:
  •  解决方式:我们先定义location对象,继续在浏览器终端环境获取location对象

6. 调试以上代码,发现新的错误,还是document .createElement 但是是div的问题

  • 解决方案如下: 

7. 我们继续调试,看下面会有什么错误,发现是div没有style属性

  •  解决方案:

8. 我们继续调试,看下面会有什么错误,发现是div没有setAttribute方法

  •  解决方案:

9. 继续调试代码,看下面会发生什么错误,发现是document没有addEventListener方法
  • 解决方案(补上缺失的方法): 

10. 我们继续调试,看下面会有什么错误:

  •  我们没有见过这个错误,也不知道这个clientWidth元素是什么,我们就可以是以哦那个我们的工具 MDN Web Docs,我们就会发现这是一个有关于前端的盒模型,我们不能观察到日志来判断这是个什么错误,我们就需要在浏览器搜索源码

  • 我们可以往前面看一下e.documentElement,这个是我们调用document.documentElement没有这个方法导致的,所以我们就需要补上这个环境

  •  解决方案,:补上这个方法我们就解决了这个问题

11. 我们继续调试,看下面会有什么错误,这里报了个font-size的错误,这个r还是我们刚才的错误documentElement,我们需要在它里面创建对象:

  •  解决方案:

12. 我们继续调试,看下面会有什么错误:

  • 解决方案: 

 13.我们继续调试,看下面会有什么错误

  •  解决方案;

 14.我们继续调试,看下面会有什么错误 :

  • 解决方案 

 4.总结

  • 最终我们完成了js逆向破解,我们发现程序不走了,说明我们逆向成功了

  • 最终我们获取到了加密值 

  • 我们在仿照刚开始的加密进行模拟加密 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值