逆向

发布时间 2023-03-25 10:46:19作者: 凫弥

python基础内容回顾
HTML+CSS
正则解析
bs4解析
xpath解析
urllib与requests
多进程
多线程
协程
抓取m3u8视频
selenium使用
MySQL数据库
MongoDB数据库
Redis数据库
面向对象基础
IP代理池
Scrapy框架
Scrapy-模拟登陆以及分页
scrapy-中间件
全站抓取与分布式增量抓取

js逆向:   刷新:ctrl+shift+r
    会在抓包工具中看到一些
    被加密的参数
    或者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(mmm){
            加密...
            $.ajax({})
            return "我爱你"
        }
        function fn_2(abc){
            xxxx
            ret = fn_3(abc)
            console.log(ret);
            return "我不爱你"
        }
        function fn_1(){
            xxxxx
            我要上天....
            fn_fn2()
        }
        <button onclick=fn_1()>播放</button>


断点的目的:
    var haha = 19999;
    function fn(){
        var an = 18;

        function hehe(){
        }
        function gn(){
            var bn = 999;
            //断点  <--------
            hehe() ???

        }
    }
    1. 可以查看当前这个位置你能使用到的所有变量的内容(内存中的)
    2. 可以查看当前位置可以执行的函数是什么? 以及函数执行之后的结果是什么?
        甚至可以改变当前位置的函数声明...

    1. 可以在断点状态下. 选择一个变量或者函数. 鼠标画上去. 看一下有什么东西...
    2. 可以在断点状态下. 在console中输入一个变量或者函数. 来查看该函数或变量的内容.(

    通过call stack可以查看上一步调用位置的参数, 数据, 内存, 函数 (可能会有风险, 问题不大).
    但是不要去单步调试...可能会有问题...(尽可能在当前断点位置进行调试)

    单步调试: 让代码 一行一行的去执行. 看看到底是谁. 把数据加密成那个鬼样子....

        第一个, 释放断点: 让程序继续执行 -> 直到下一个断点位置或者运行完毕.
        第二个, 下一步: 执行到下一行代码(不论当前行是否是函数调用. )
        第三个, step into: 向后走一步(如果有函数, 进入函数, 如果没函数或者是js原生的函数, 向后走一步)

    如果发现某个函数. 莫名其妙的被执行, 执行之后的结果貌似对原内容没有改变. 可以认为该函数就是没用的..规避掉它.


// 设断点  -> setInterval = function(){}
setInterval(function(){
    debugger;
}, 1000)




execjs介绍以及安装和使用

一次性解决掉npm安装失败的问题

Python各种加密逻辑

抓包工具的使用