python爬虫逆向学习

抓包

调试

扣取js

  扣全了吗

  this是谁啊

改写

本地运行出值

 

常见的一些加密方式

 

取盐校验  不可逆

md5 md2 md4  带密码的md5(hmac)

md5     

  默认key 0123456789abcedf  

  16位的  32位的  40位的

  123456  49ba59abbe56e057  e10adc3949ba59abbe56e057f20f883e

sha1    sha256    sha512

123456   7c4a8d09ca3762af61e59520943dc26494f8941b

 

对称加密  AES DES 3DES

 

非对称加密 RSA (私钥 公钥)同一个明文可以生成不同密文

 

base64  xxxxxx==  A-Z a-z 0-9 + _ =(最后面通常会有=号)

 

自执行语句:!function(){}();(function(){})();(function(){}())

 

webpack逆向思路:

function(x){
  function xx(yy) {
        x[yy].call(xxx, xxx, xxx);   //必有一个加载模块的方法call, apply
  }    
  xx(1)   //对应下面第二个function(){}    
}([       //     }([     }({    搜索关键字
     function(x1, x2, x3){}, function(x1, x2, x3){}
]);

  

网站代码运行时间轴:

加载html 加载js -> 运行js初始化 -> 用户触发了某个事件 -> 调用了某段js -> 明文数据-> 加密函数 -> 加密后的数据 ->  给服务器发信息(XHR-SEND)-> 接收到服务器数据 ->解密函数 -> 刷新网页渲染

 

逆向运行步骤:

抓包 -> 调试 -> 扣取js -> 改写 -> 本地运行出值 -> 请求服务器拿取数据

 

浏览器的组成功能:

渲染    DOM

所有浏览器相同功能    BOM

执行js脚本 JavaScript  文本处理  正则

不同浏览器会实现自己相应属性  BOM

DOM(渲染引擎)BOM JS引擎 = 浏览器 

 

反调试

 

检测是否在调试

  键盘监听(F11)

  检测浏览器内外的高度

  检测开发者人员工具是否为true

  利用console(如打开F11,就输出某些内容)

  利用代码运行时间差

  利用toString

  利用栈的成熟 caller

  检测非浏览器

 

分类

  显性

    debugger

      非虚拟机 

        右键设置false 

        直接替换代码

          谷歌内核默认提供

          浏览器的插件 油猴

          代理替换 小提琴(Fiddler)

      虚拟机(eval Function) 瑞数

 

    死循环 循环语句 无线递归 两个方法互相调用 计时器

    for(;;)

    while(true)

  隐性(暗桩)

    引向错误的逻辑

    浏览器正常堆栈

 

滑块流程 极验

  滑块是什么?

    区分是否有机器

    有一个滑动条

 

  看代码分析流程

    抓包

      1: challenge: "99f47bfd0be767929daece99c40b6fd4"

        gt: "019924a82c70bb123aae90d483087f94"

      2: gettype.php提交了gt拿js  fullpage.9.0.8.js

      3: get.php提交了gt、challenge、w(加密了 环境校验 轨迹)

      4: ajax.php提交了gt、challenge、w(加密了 环境校验 轨迹)

      5: get.php提交了gt、challenge,返回了

        原图(乱码) 遮罩图(乱码) 滑动图

      6: ajax.php提交了gt、challenge、w(加密了 环境校验 轨迹)返回了

        validate

    调试

      目的:

        1:找到 并分析 乱码原图 还原的代码

          % 26 * 12 + 1 特征码

          还原顺序

[39,38,48,49,41,40,46,47,35,34,50,51,33,32,28,29,27,26,36,37,31,30,44,45,43,42,12,13,23,22,14,15,21,20,8,9,25,24,6,7,3,2,0,1,11,10,4,5,19,18,16,17]

          312 / 16 = 12 每一个小块宽度为10像素

        2:找到 并分析 w 参数如何生成

          ”\u0077" 特征码

          u = r[$_CAGEe(750)]()
          l = V[$_CAGEe(342)](gt[$_CAGEe(209)](o), r[$_CAGEe(742)]())
          h = m[$_CAGEe(733)](l)

            var e = new X()[$_CBEEc(342)](this[$_CBEEc(742)](t));  

          encrypt

          Ot = rt()

var random_ = function random_(){
var data=""
   for (var i = 0; i < 4; i++){
data = data+(65536 * (1 + Math['random']()) | 0)['toString'](16)['substring'](1)
}
return data
}

          \u0024\u005f\u0043\u0042\u0045\u0045

      调试的知识点

        1:for

          switch  平坦流

  过滑块总结

跟值技巧

  从头看

    不需要重复下断

    缺点 要记住很多的变量值 不太适合新手

  从尾看

    跟值比较的轻松

    缺点 可能会有重复下断的操作

 

下断点

  初始值的位置 循环的位置 返回的位置

  函数的开头 函数的结尾

posted @ 2021-11-29 21:05  天叔  阅读(771)  评论(0)    收藏  举报