js逆向:
会在抓包工具中看到一些被加密的参数
或者cookie信息
或者请求头信息
或者服务器返回的一些信息
我们需要把浏览器上的加密或者解密的过程在我们的程序里进行复刻
1.网站的加密或者解密逻辑可以完全交给python来完成
2.网站的加密或者解密过程过于繁琐,不能直接用python完全来完成
网站 -> md5(魔改) -> 123456
python -> md5(标准库) -> 10086
这不得不去网站上去抠出来它的js代码(魔改的,自己定义的)
我们的python代码如果可以调用这一段js代码,那么它的魔改的过程咱就不用管了。
上述的逻辑叫抠代码
我们通常选择nodejs作为本地化的js运行环境
nodejs -> v8引擎 -> 帮我们执行js代码的解释器
浏览器 -> v8引擎 -> 帮我们执行js代码的解释器
但是浏览器和nodejs同宗不同源
举个例子,浏览器里面一定有:页面渲染
nodejs -> 没有界面,它不需要有渲染
在初期学习,这两个东西目前可以混着用
3.直接把浏览器的js直接干下来
你目前执行js的地方是nodejs,node和浏览器不一样,有差异
如果你能让你的node和浏览器一样
那么你就可以直接执行该js文件,并得到和浏览器完全一样的结果
这种逆向逻辑叫补环境
上述不论哪种逻辑,最终的结果:你在python中可以获取到和浏览器中运行的结果相同
安装nodejs
下载地址:https://nodejs.org/en
安装nodejs是为了能够在机器上运行js代码
安装nodejs插件(在pycharm上可以轻松的右键 -> run js)
几种找到加密入口的方案:
目标:
1.参数加密前什么样?
2.怎么加密的?
1.找浏览器的initiator(下下策)
它里面记录着浏览器执行js的过程
request call stack(请求调用栈)
function fn_3(){
发送ajax
}
function fn_2(){
fn_3()
}
function fn_1(){
fn_2()
}
<button onclick=fn_1()>播放</button>
2.在search中,进行搜索(最好的方案)
1.在url上进行搜索,在?前面一个单词接着一个单词搜
https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=
先搜v1
再搜url/v1
.....
或者该url中某些看着比较特殊的单词,也可以单独搜索
2.搜参数(请求上的各种参数(主要针对加密参数))
3.拦截器,该网站使用的是异步(promise对象)
没有百分之百的方案,没有又快又准确的方案
断点的目的:
1.可以查看当前位置之前的你能使用到的所有变量的内容
2.可以查看当前位置可以执行的函数是什么?以及函数执行之后的结果是什么?
甚至可以改变当前位置的函数声明
1.可以在断电状态下,选择一个变量或者一个函数,鼠标划上去,看一下有什么东西
2.可以在断点状态下,在console中输入一个变量或者函数,来查看该函数或变量的内容
通过call stack可以查看上一步调用位置的参数,数据,内存,函数(可能会有风险,问题不大)
但是不要单步调试,可能会有问题
单步调试:让代码一行一行的去执行,看看到底是谁把数据加密成那个鬼样子
第一个按钮,释放断点:让程序继续执行,直到下一个断点位置或者运行完毕。
第二个按钮,下一步:执行到下一行代码(不论当前行是否是函数调用)
第三个,step into:向后走一步(如果有函数,进入函数;如果没函数或者是js原生函数,向后走一步)
如果发现某个函数莫名其妙的被执行,执行之后的结果貌似对原内容没有改变,可以认为该函数是没用的,规避它
如何抠代码:
1.找到入口,把入口拿下来,尝试着一个函数一个函数的去填补
过程非常曲折,直到最终的结果产生,并且和你的预期相符
2.找到代码的边界
一个大闭包
两个闭包之间
肯定是具有相似性的(人为的去判别)
3.直接找第三方库,需要经验的