Python爬虫eval混淆,爬虫进阶实战系列 R27

举报
梦想橡皮擦 发表于 2022/05/30 18:09:26 2022/05/30
【摘要】 ⛳️ 前置知识历经 10 篇左右的 Python 字体反爬系列文章,我们又进入了一个新的主题,常见混淆加密原理与实践。本篇博客从 eval 混淆开始,逐层为大家拆解 JS 逆向中混淆相关知识。eval 函数可以将 JS 字符串解析成源码执行在搜索引擎随机选择可进行加密 JS 代码的页面,然后加密下述内容。加密前var name = "橡皮擦";加密后eval( (function (p,...

⛳️ 前置知识

历经 10 篇左右的 Python 字体反爬系列文章,我们又进入了一个新的主题,常见混淆加密原理与实践。

本篇博客从 eval 混淆开始,逐层为大家拆解 JS 逆向中混淆相关知识。

eval 函数可以将 JS 字符串解析成源码执行

在搜索引擎随机选择可进行加密 JS 代码的页面,然后加密下述内容。

加密前

var name = "橡皮擦";

加密后

eval(
  (function (p, a, c, k, e, d) {
    e = function (c) {
      return (
        (c < a ? "" : e(parseInt(c / a))) +
        ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
      );
    };
    if (!"".replace(/^/, String)) {
      while (c--) d[e(c)] = k[c] || e(c);
      k = [
        function (e) {
          return d[e];
        },
      ];
      e = function () {
        return "\\w+";
      };
      c = 1;
    }
    while (c--)
      if (k[c]) p = p.replace(new RegExp("\\b" + e(c) + "\\b", "g"), k[c]);
    return p;
  })('1 0 = "橡皮擦"', 62, 2, "name|var".split("|"), 0, {})
);

可以看到加密之后的代码变得更加复杂,并且可读性变弱。

在 JS 中,eval 函数本身就是一个 JS 代码执行器,它可以将传入的字符串按照 JS 语法进行解析并执行。

解密 eval 函数的方式比较简单,直接找工具。

该形式代码最常见的场景就是百度的统计代码,具体案例你可以寻找一下。

本次我们要采集的站点是电视猫,目标地址为:https://www.tvmao.com/program/BTV1

在该页面点击更多之后,会加载节目列表数据,得到的接口与参数如下所示。

通过查看更多,我们可以抓取到数据请求位置。

⛳️ 电视猫 实战场景

伴随断点,我们进入到 JS 逆向环节,得到的第一段代码如下所示。

$(".more-epg").click(function () {
  var b = "src";
  var a = A.d("a", b);
  ajaxVerify(
    "/api/pg",
    "GET",
    {
      p: a,
    },
    function (c, d) {
      $("#noon").after(d[1]);
      $(".more-epg").remove();
    }
  );
});

代码中比较核心的是 A.d("a", b) ,其中函数 d() 可能是加密环节。

接下来就是重点内容了,我们并没有找到加密函数所在的 JS 文件,该 JS 代码段是临时的,或者称为匿名的。

但是关键字 _keyStr 是可以直接被检索到的,全局搜索一下,得到如下内容。

顺着 base.js 爬过去,找到如下内容,发现 eval 函数,混淆点出现了。

⛳️ 实战编码

所有的 eval 函数包裹的代码,都可以使用 console.log 进行打印。

可以看到混淆前后的代码差异,解析之后恰巧是我们的目标函数。

也可以搜索反混淆工具,直接查询即可,反混淆的时候,注意携带 eval() 函数,其中内容可以自己多次测试。

当我们得到原函数时,基本表示加密逻辑已经解决了。

最后在补充一点

当你发现【匿名】函数时,大概率这段 JS 是加密过的字符串。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 621 篇原创博客

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。