网页逆向一般方法和过程
关于逆向
1. 不是所有的请求都需要逆向js的,能直接干的就直接干,不需要逆向直接用python代码直接干。
2. 网站可能会对数据进行加密,数据是看不懂的...不是100%
可能加密的地方:
(1)请求参数。
(2)请求头(基本都会在请求头搞事情)。

(3)cookie
对于cookie 在尝试之前不要去你你想 。尝试之后,一开始好用, 过阵子不好用了,挨个删...看看到底是谁. 是那个关键的点,找到关键的值, 之后, 再去hook。
(4)响应体

综上, 不论哪一个. 一定要先去尝试. 或者尝试锁定某个参数需要逆向。
逆向的实现方案
1. 如果是标准库...des, md5, rsa, aes等
有三种方案(只要保证最终的结果一致即可)
(1)直接抠js代码. 在你本地运行。
(2)找对应的js库. 在你本地运行。
(3)用python的标准库,比如 md5。
2. 如果找不到该标准库(网站自己魔改的算法),就需要抠代码或者补环境。
断点的目的
(1).断点可以查看当前这个位置你能使用到的所有变量的内容(内存中的)。
(2).断点可以查看当前位置可以执行的函数是什么? 以及函数执行之后的结果是什么?
(3).断点甚至可以改变当前位置的函数声明...
在断点状态下. 选择一个变量或者函数. 鼠标画上去. 看一下有什么东西。在断点状态下. 在console中输入一个变量或者函数. 来查看该函数或变量的内容。
网页逆向经验:
逆向过程中,看到请求参数是:enc、secret key、sign等字眼,基本都需要逆向。
一般来说,除了瑞数级别的,xxx.send这种请求太低层了,它相当于是发ajax请求的最后一关,除了瑞数级别的,一般没人在这个请求上搞事情。我们看到....send一般都是直接过,不用看。
找到加密入口的方案
目标:1,参数加密前什么样?2,怎么加密的?
第一种找加密入口:找浏览器的initiator(启动器)
如果通过抓包看到返回的数据被加密了。所以通过浏览器的initiator(启动器)找入口,就没有什么意义了。
这是下下策,不到万不得已不用此法。
它里面记录着浏览器执行js的过程( request(请求)、call(调用)、stack(栈) 。
类似下面的调用:
调用过程是从下往上调用,一直调用到最上面的时候,请求就发送出去了
如下所示:如果在JS35的代码中,参数还是明文,但是在JS20的中,参数就变成了密文。就需要关注他们执行的过程当中,参数的执行变化。这时候就需要debug,需要知道代码如何可以一行一行的执行,并且可以观察变量的变化过程。

第二种找加密入口:在search中进行搜索
注意:没有百分之百的方案. 又快, 有准确. 没有。只能是各种尝试。
首先第一步找到Search(是在Sources里面所有东西的搜索)
但是我们在search搜索什么?有下面几个东西可以考虑:
找加密入口:在search中进行搜索方案(1)在URL上进行搜索。
如果使用URL全名(即:https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=)去搜,大概率是搜不到的。
用搜参数最好的方式是:找到问号之前(也就是 ?csrf_token= 前面的内容),比如:先去搜 v1 (一般搜一个词的话大概率不这样做的,因为结果太多了,起不到搜索的效果了)所以一般搜索 url/v1 再这样搜: player/url/v1 然后再一个词一个词追加着搜。
然后我们就找到这样的内容:

搜索出来结果之后,还需拿到 api/song/enhance/player/url/v1 再搜索一次,还要看看有多少个。因为第一次搜索出来的内容是一个压缩的代码,就一行,所以可能说有好好多地方是符合这个内容的,但是第一次搜索出来的内容就看到一条,所以就会以为有一条。所以再次搜索可以锁定到底有多少个内容

或者该url中某些看着比较特殊的单词. 也可以单独搜索,比如 enhance 。
找加密入口:在search中进行搜索方案(2)搜参数,请求上的各种参数(主要针对加密参数)。
经验之谈:搜索JSON.stringify很难,因为太多了。
比如搜索参数:encSecKey
找加密入口:在search中进行搜索方案(3)搜拦截器,【 interceptors 】关键字,前提是该网站使用的是异步,使用promise才行。
找到了加密入口之后的处理方案:
方案一:扣代码
把入口拿下来,尝试着一个函数一个函数的去填补。
过程非常曲折...直到 最终的结果产生. 并且和你的预期相符...当没有其他思路的时候,这是最low的一种方案,最下下策的方案。
快速提高扣代码,可以找到代码的边界,就可以把边界的代码抠出来。
一般来说,这些边界是:
(1)一个大闭包。
(2)两个闭包之间。
这些边界肯定是具有相似性(需要 人为的去判别)。
比如下图就是一个边界:
到了12852没有了这个缩进。很明显上面12851是一个自运行函数。然后下面的函数12852、12860、12863是一个级别的。

所以就可以从上开始,一直拉到下图的位置13275,13275是一个自运行函数,是一个边界。 所以13274前面如果要扣代码的话,就一直扣到13274为止。

方案二:JS改写
考虑阅读它的代码,通过阅读代码得知它用的是什么加密逻辑,甚至想办法知道它用的是什么第三方加密js库.
可以直接在本地使用第三方库(最简单的),去 https://www.npmjs.com/ 网站搜. 你需要的第三方库.
如何找到加密库:
(1)靠猜测,它使用的是哪个js库。
(2)去搜索,观察它的用例,找有没有和代码中相似的逻辑。
方案三:Python改写
先阅读js代码,阅读明白js代码的执行过程, 用python完全的复刻程序逻辑。这种方案对js和python的开发功底要求高(python的某些逻辑比js简单)。
方案四:补环境
抠下来所有js代码.
复制密文注意事项
复制密文的时候,不要在Preview里面复制:

要到Response里复制:

浙公网安备 33010602011771号