js逆向之网易云音乐评论
1. 参数定位
对请求的链接下断点,跟着栈,就能很容易的追踪到这两个参数的位置
12345var bKC6w = window.asrsea(JSON.stringify(i8a), bvh7a(["流泪", "强"]), bvh7a(Re1x.md), bvh7a(["爱心", "女孩", "惊恐", "大笑"])); e8e.data = j8b.cr9i({ params: bKC6w.encText, encSecKey: bKC6w.encSecKey })
先找window.asrsea,发现在上面
代码复制如下,可以发现是一个自执行函数,函数d里面调用的函数都在这里面,nice
1234567891011121314151617181920212223242526272829303132333435363738394041!f ...
jsrpc
0. 前言一句话概括一下rpc在爬虫中应用: 在浏览器(作为我们的客户端)找到加密后的参数,然后发送给服务端(python编写的一个本地服务),最后真正爬虫的时候调用这个服务就能获取加密数据了。不需要扣代码和补环境那些。
1. 从WebSocket认识rpc
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求 ...
从函数到webpack
1. 简介下面是一个常见的js函数:
123function a() {console.log("a")}function b() {console.log("a")}function c() {console.log("a")}
而我们在网站中,常看到:
12345678910!function(i) { function n(t) { return i[t].call(a, b, c, d) }}([ function(t, e) {}, function(t, e, n) {}, function(t, e, r) {}, function(t, e, o) {}]);
上面的代码,我们对其进行简化:
12345678910!function (allModule) { ...
js原型和原型链
js中复杂类型都是对象类型(Object),而js中没有类(class)这个概念,那么其中的继承是如何实现的呢?答案是构造函数
ES6中的class可以看作只是一个语法糖,它的绝大部分的功能,ES5都可以做到,新的class写法只是让原型的写法更加的清晰、更像面向对象编程的语法而已。
1. 前置知识我们需要理解以下知识:* 函数也是一种对象* 普通函数和构造函数的区别* 搞清楚 __proto__、prototype、constructor
需要记住以下两点:
__proto__、constructor属性是对象独有的
prototype属性是函数独有的
前面说过函数也是对象的一种,所以,函数同样有__proto__、constructor,即:函数有:__proto__、constructor、prototype对象有:__proto__、constructor
2. 构造函数构造函数和普通函数在JavaScript中有几个主要区别:
创建对象:构造函数用于创建对象的实例,而普通函数用于执行特定的功能并返回一个值。
使用new关键字:在调用构造函数时,需要使用new ...
js类创建小结
在JavaScript中,有几种方法可以创建类。下面是常见的几种方法:
使用函数构造器(Constructor Function):
1234567891011function MyClass() { // 构造函数体}// 添加方法到原型上MyClass.prototype.myMethod = function() { // 方法体};// 创建类的实例const myObject = new MyClass();
使用原型语法糖(Prototype Syntactic Sugar):
12345678910111213class MyClass { constructor() { // 构造函数体 } // 添加方法 myMethod() { // 方法体 }}// 创建类的实例const myObject = new MyClass();
使用对象字面量(Object Literal):
12345const myObject = { ...
js函数声明方法
在JavaScript中,有几种不同的方法可以定义函数。以下是常见的几种方法:
函数声明(Function Declaration):
123function myFunction() { // 函数体}
函数表达式(Function Expression):
123const myFunction = function() { // 函数体};
箭头函数(Arrow Function):
123const myFunction = () => { // 函数体};
Function构造函数:
1const myFunction = new Function('x', 'y', 'return x + y');
上述这些方法在定义函数时有一些差异和用途上的区别。
函数声明是最常见也最简单的方式,使用关键字function直接定义一个函数。函数声明会被提升到作用域的顶部,因此在函数声明之前调用函数也是可以的。
函数表达式则是将函数赋值给一个变量,通 ...
JS逆向之hook
1. 概念通过 hook 技术,可以改变函数的行为、捕获函数的调用或修改对象的属性。一般使用Object.defineProperty()来进行hook。
1Object.defineProperty(obj, prop, descriptor)
obj:对象;
prop:对象的属性名;
descriptor:属性描述符;
Object.defineProperty() 允许精确地添加或修改对象上的属性。
对象中存在的属性描述符有两种主要类型:数据描述符和访问器描述符。数据描述符是一个具有可写或不可写值的属性。访问器描述符是由 getter/setter 函数对描述的属性。描述符只能是这两种类型之一,不能同时为两者。
数据描述符具有以下可选键值:
value
writable
访问器描述符具有以下可选键值:
get
set
我们一般hook使用的是get和set方法,下边简单演示一下
1234567891011121314151617var people = { name: '张三',};Object.defin ...
js补环境之proxy
1. 补环境是什么浏览器环境: 是指 JS代码在浏览器中的运行时环境,它包括V8自动构建的对象(即ECMAScript的内容,如Date、Array),浏览器(内置)传递给V8的操作DOM和BOM的对象(如document、navigator);
Node环境:是基于V8引擎的Js运行时环境,它包括V8与其自己的内置API,如fs,http,path;
Node环境 与 浏览器环境 的异同点可以简单概括如图:
简而言之,就是补浏览器有而Node没有的环境,即BOM和DOM的对象。
2. 为什么要补环境由于浏览器和Node的差异,导致部分JS代码在浏览器中能正常运行,但在Node无法正常运行。如:
123456789101112function decrypt() { document = false; var flag = document?true:false; if (flag) { return "正确加密" } else { return "错误加密&qu ...
typora 设置腾讯云图床配置文件
0. 前言ubuntu 中 配置typora腾讯云图床,关于配置文件的设置
1. 正文按照如下图所示,选择PicGo-Core,下载更新,
可以点击‘打开配置文件’,也可使用命令vim ~/.picgo/config.json 粘贴如下内容,替换其中的appID,bucket,secretId,secretKey,area,可在腾讯云的对象存储中找到,token可登录https://sm.ms/home/apitoken网站,注册后在链接位置找到
1234567891011121314151617181920{ "picBed": { "current": "tcyun", "uploader": "tcyun", "smms": { "token": "" }, "tcyun": { "appI ...
hexo 多台电脑公共维护博客
0. 前言在不同电脑之间共同维护博客
前提: 电脑上以安装并登录github
1. 正文1.1 基础知识hexo我们可以简单理解为将md格式的文件转换成html类的网页文件。当我们使用hexo d 时,只会把生成html类的网页推送到远程服务器。
如果我们想在不同电脑上都能维护博客,就需要把生成html类的代码也放远端(github),这样就能共同维护了。
hexo部分文件夹说明:
文件夹
说明
public
hexo g生成的网页代码
thems
主题
_config.yml
全局配置文件
source
md文件
package-lock.json
锁定包的版本
package.json
hexo相关包的信息
scaffolds
文章模版
常用命令说明:
hexo clean: 清除public中的数据
hexo g: 将md格式文件转换成html类静态网页文件
hexo d: 推送到远端部署
hexo s: 本地预览
hexo n: 新建文件
推送文章三部曲:
123hexo cleanhexo ghexo d
1.2 ...
