小米商城格式化检测点

news2024/10/5 22:21:21

小米商城格式化检测点:

var a = function () {
    var x = !0;
    return function (a, t) {
      var e = x ? function () {
        if (t) {
          var x = t.apply(a, arguments);
          t = null;
          return x;
        }
      } : function () {};
      x = !1;
      return e;
    };
  }();
  var t = {};
  function e(n) {
    var r = a(this, function () {
      var x = function () {
          return "dev";
      },
        a = function () {
          return "window";
        };
      var t = function () {
        var a = new RegExp("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}");
        return !a.test(x.toString());
      };
      var e = function () {
        var x = new RegExp("(\\\\[x|u](\\w){2,4})+");
        return x.test(a.toString());
      };
      var n = function (x) {
        var a = 0;
        x.indexOf("i" === a) && r(x);
      };
      var r = function (x) {
        var a = 3;
        x.indexOf((!0 + "")[3]) !== a && n(x);
      };
      t() ? n("indеxOf") : e() ? n("indexOf") : n("indеxOf");
    });
    r();

  }

e(e.s=124)

执行这段代码后,将出现循环调用出现栈溢出。。

image-20240605110251236

查看栈:

image-20240605110335310

一看nr互相调用

快刀斩乱麻:

1.让其中一个不去调用另一个,于是找到n将调用r的代码注释:

      var n = function (x) {
        var a = 0;
        //x.indexOf("i" === a) && r(x);
      };

运行看看:

成功执行。

但是知其然,知其所以然,看看它是检测啥?

进入第一个调用的地方:

image-20240605111607958

image-20240605111539419

仔细看这个a正则表达式,可以看出,a格式上必须满足没有换行符…

那就把a还原,弄成一行,但是,运行后又进入了e函数:

image-20240605112606848

这个格式就比较鬼畜了,有没有换行符都返回false。

仔细看这:

 t() ? n("indеxOf") : e() ? n("indexOf") : n("indеxOf");

t检测为假后,又进入了e的检测,e检测为真还是假,都会调用n(‘indexOf’),进入死循环,

但是t检测为真呢?依然进入n(“indexOf”)进入死循环呀!!!这尼玛什么鬼!突然想到,我勒个去,我这是反混淆后的代码,我们得看看原来的代码才行!

原来的代码:

 var _0x2af70d = function() {
                return '\x64\x65\x76';
            }
              , _0x149eed = function() {
                return '\x77\x69\x6e\x64\x6f\x77';
            };
            var _0x1ba3ec = function() {
                var _0x326b6c = new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');
                return !_0x326b6c['\x74\x65\x73\x74'](_0x2af70d['\x74\x6f\x53\x74\x72\x69\x6e\x67']());
            };
            var _0x567cbd = function() {
                var _0x566a50 = new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');
                return _0x566a50['\x74\x65\x73\x74'](_0x149eed['\x74\x6f\x53\x74\x72\x69\x6e\x67']());
            };
            var _0x828b58 = function(_0x4770f2) {
                var _0x5fe41d = ~-0x1 >> 0x1 + 0xff % 0x0;
                if (_0x4770f2['\x69\x6e\x64\x65\x78\x4f\x66']('\x69' === _0x5fe41d)) {
                    _0x1670cc(_0x4770f2);
                }
            };
            var _0x1670cc = function(_0x413b09) {
                var _0x4a50c7 = ~-0x4 >> 0x1 + 0xff % 0x0;
                if (_0x413b09['\x69\x6e\x64\x65\x78\x4f\x66']((!![] + '')[0x3]) !== _0x4a50c7) {
                    _0x828b58(_0x413b09);
                }
            };
            if (!_0x1ba3ec()) {
                if (!_0x567cbd()) {
                    _0x828b58('\x69\x6e\x64\u0435\x78\x4f\x66');
                } else {
                    _0x828b58('\x69\x6e\x64\x65\x78\x4f\x66');
                }
            } else {
                _0x828b58('\x69\x6e\x64\u0435\x78\x4f\x66');
            }
        });
        _0x39ebcf();

_0x828b58('\x69\x6e\x64\u0435\x78\x4f\x66');

我勒个去,这个indexOf是byte形式的字符串,它对e进行索引是找不到e的,所以这里还是检测是否将\x形式\u形式的字符串进行了反混淆

总结:

1.检测是否将字符串的\x \u形式反混淆

2.检测是否换行格式化

综上思路的话,大概明白了他是怎么检测的了。这样的话,也就知道怎么去处理了,反正处理方式很多的,但是呢,一般原则,省时省力,处理的话,最好就是最开始的那种,干掉互相调用链,或者就是找到调用入口直接注释,这里就是:

  function e(n) {
    var r = a(this, function () {
      var x = function () {
          return "dev";
      },
        a = function () {
          return "window";
        };
      var t = function () {
        var a = new RegExp("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}");
        return !a.test(x.toString());
      };
      var e = function () {
        var x = new RegExp("(\\\\[x|u](\\w){2,4})+");
        return x.test(a.toString());
      };
      var n = function (x) {
        var a = 0;
        x.indexOf("i" === a) && r(x);
      };
      var r = function (x) {
        var a = 3;
        x.indexOf((!0 + "")[3]) !== a && n(x);
      };
      t() ? n("indеxOf") : e() ? n("indexOf") : n("indеxOf");
    });
    //r();

  }

直接把r()调用注释,也就可以不进入这一套判断逻辑。

同样的检测地方还有:

    var _0xc3cbb7 = function() {
        var _0x2c1eed = {
            'data': {
                'key': 'cookie',
                'value': 'timeout'
            },
            'setCookie': function(_0x2a4253, _0x4a45c8, _0x5a7b75, _0x142fca) {
                _0x142fca = _0x142fca || {};
                var _0x47dfad = _0x4a45c8 + '=' + _0x5a7b75;
                var _0x456411 = 0x0;
                for (var _0x456411 = 0x0, _0x2f51c3 = _0x2a4253['length']; _0x456411 < _0x2f51c3; _0x456411++) {
                    var _0x2e20cf = _0x2a4253[_0x456411];
                    _0x47dfad += ';\x20' + _0x2e20cf;
                    var _0x4743a3 = _0x2a4253[_0x2e20cf];
                    _0x2a4253['push'](_0x4743a3);
                    _0x2f51c3 = _0x2a4253['length'];
                    if (_0x4743a3 !== !![]) {
                        _0x47dfad += '=' + _0x4743a3;
                    }
                }
                _0x142fca['cookie'] = _0x47dfad;
            },
            'removeCookie': function() {
                return 'dev';
            },
            'getCookie': function(_0x5c79de, _0x5a90fd) {
                _0x5c79de = _0x5c79de || function(_0x3f5d05) {
                    return _0x3f5d05;
                }
                ;
                var _0x4a6be9 = _0x5c79de(new RegExp('(?:^|;\x20)' + _0x5a90fd['replace'](/([.$?*|{}()[]\/+^])/g, '$1') + '=([^;]*)'));
                var _0x7b7045 = function(_0x1f9b0a, _0x3c3639) {
                    _0x1f9b0a(++_0x3c3639);
                };
                _0x7b7045(_0x404828, _0x478507);
                return _0x4a6be9 ? decodeURIComponent(_0x4a6be9[0x1]) : undefined;
            }
        };
        var _0x40d28c = function() {
            var _0x2e7122 = new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');
            return _0x2e7122['test'](_0x2c1eed['removeCookie']['toString']());
        };
        _0x2c1eed['updateCookie'] = _0x40d28c;
        var _0x452d20 = '';
        var _0xc45909 = _0x2c1eed['updateCookie']();
        if (!_0xc45909) {
            _0x2c1eed['setCookie'](['*'], 'counter', 0x1);
        } else if (_0xc45909) {
            _0x452d20 = _0x2c1eed['getCookie'](null, 'counter');
        } else {
            _0x2c1eed['removeCookie']();
        }
    };
    _0xc3cbb7();

这个大家自行观看。\

记得加入我们的学习群:961566389

点击链接加入群聊:https://h5.qun.qq.com/s/62P0xwrCNO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1789145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据持久化第七课-URL重写与Ajax

数据持久化第七课-URL重写与Ajax 一.预习笔记 1.URL重写(对网页地址进行保护) 首先编写module,实现对网络地址的处理 其次就是module的配置 最后验证url重写技术 2.Ajax数据交互 编写后端响应数据 处理跨域的配置问题 运行项目得到后端响应数据的地址 编写前端ajax进行数据请…

珈和科技携手浙江省气候中心,打造农业气象数字化服务新标杆!

古谚有云&#xff1a;春耕夏种秋收冬藏&#xff0c;皆在天时。可天有不测风云&#xff0c;农有“旦夕祸福”。寒潮、干旱、洪涝等气象灾害频繁发生&#xff0c;给农业生产带来了巨大挑战。 气候变化直接影响着农业生产&#xff0c;数字化时代&#xff0c;如何依靠科技手段降低…

解决 clickhouse jdbc 偶现 failed to respond 问题

背景 Clickhouse集群版本为 Github Clickhouse 22.3.5.5&#xff0c; clickhouse-jdbc 版本为 0.2.4。 问题表现 随着业务需求的扩展&#xff0c;基于Clickhouse 需要支持更多任务在期望的时效内完成&#xff0c;于是将业务系统和Clickhouse交互的部分都提交给可动态调整核心…

【面试笔记】单片机软件工程师,工业控制方向(储能)

文章目录 1. 基础知识1.1 C语言笔试题1.1.1 用宏定义得到一个数组所含的元素个数1.1.2 定义函数指针从程序固定地址(0)开始执行1.1.3 volatile的含义及作用1.1.4 32位系统&#xff0c;整数7和-7&#xff0c;分别以大端和小端存储&#xff0c;请示意说明 1.2 嵌入式基础1.2.1 简…

知识图谱应用---智慧金融

文章目录 智慧金融典型应用 智慧金融 智慧金融作为一个有机整体&#xff0c;知识图谱提供了金融领域知识提取、融合、分析、推断、决策等功能&#xff0c;如下图所示。在场景方面&#xff0c;智慧金融涵盖智慧支付、智慧财富管理、智慧银行、智慧证券、智慧保险、智慧风控等诸多…

【教程】使用 Tailchat 搭建团队内部聊天平台,Slack 的下一个替代品!

前言 多人协作&#xff0c;私有聊天一直是团队协作的关键点&#xff0c;现在有很多专注于团队协作的应用和平台&#xff0c;比如飞书、企业微信和Slack等。这期教程将带你手把手的搭建一个在线的团队协作向聊天室&#xff0c;希望对你有所帮助! 本期聊天室使用TailChat作为服务…

Rust 第三方库创建和导入(cargo --lib)

前言 日常开发过程中&#xff0c;难免会有一些工具方法&#xff0c;多个项目之间可能会重复使用。 所以将这些方法集成到一个第三方包中方便后期维护和管理&#xff0c; 比如工具函数如果需要修改&#xff0c;多个项目可能每个都需要改代码&#xff0c; 抽离到单独的包中只需要…

esp32-c6所有配套教程

1.介绍 本文是esp32-c6所有资料的介绍 如果需要详细代码的话请访问下面这个链接 esp32-c6使用教程wifi&#xff08;espidf修改成arduino&#xff09;附带代码websocket&#xff0c;舵机&#xff0c;点灯【2024年】-CSDN博客 配置环境 视频教程 0-2设置开发环境_哔哩哔哩_bi…

【python】成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南

成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南 在Python编程中&#xff0c;尤其是在使用scipy这个科学计算库时&#xff0c;可能会遇到ImportError错误&#xff0c;提示无法从scipy.linalg模块中导入名为triu的函数。这个错误通…

Linux入门教程笔记(一文带你了解Linux并精通)

文章目录 一、Linux概述二、Linux目录结构&#xff08;重点&#xff09;2.1 Linux文件系统的类型2.2 Linux文件系统的结构2.3 具体的目录结构2.3.1 Linux 根目录2.3.2 Linux /usr目录2.3.3 Linux /var 目录2.3.4 tar包存放目录:crossed_swords: 三、vi和vim编辑器四、Lnux开机&…

SpringMVC接收数据

SpringMVC接收数据 SpringMVC处理请求流程 SpringMVC涉及组件理解&#xff1a; DispatcherServlet : SpringMVC提供&#xff0c;我们需要使用web.xml配置使其生效&#xff0c;它是整个流程处理的核心&#xff0c;所有请求都经过它的处理和分发&#xff01;[ CEO ]HandlerMappi…

16个常用的思维模型

01.机会成本 02.沉没成本 03.直觉思维 04.决策树 05.非SR模型 06.确认性偏差 07.易得性偏差 08.逆向思维 09.六顶思考帽 10.101010旁观思维 11.升级思维 11.笛卡尔模型 13.第一性原理 14.奥卡姆剃刀理论 15.马斯洛需求层次理论 16.反脆弱思维 来源&#xff1a;16个常用的思维模…

基于最大重叠离散小波变换的PPG信号降噪(MATLAB 2018)

光电容积脉搏波PPG信号结合相关算法可以用于人体生理参数检测&#xff0c;如血压、血氧饱和度等&#xff0c;但采集过程中极易受到噪声干扰&#xff0c;对于血压、血氧饱和度测量的准确性造成影响。随着当今社会医疗保健技术的发展&#xff0c;可穿戴监测设备对于PPG信号的质量…

WSDM 2023 推荐系统相关论文整理(三)

WSDM 2023的论文录用结果已出&#xff0c;推荐系统相关的论文方向包含序列推荐&#xff0c;点击率估计等领域&#xff0c;涵盖图学习&#xff0c;对比学习&#xff0c;因果推断&#xff0c;知识蒸馏等技术&#xff0c;累计包含近四十篇论文&#xff0c;下文列举了部分论文的标题…

Source Insight 4.0安装和使用

文章目录 一、前言二、新建工程2.1 新建工程2.2 同步工程 3 Source Insight怎么生成函数调用关系图&#xff1f;3.1 打开关系窗口3.2 打开关系函数3.3 修改关系属性3.4设置 Relation Window Options3.5 设置Levels3.6 修改显示模式 4 下载地址 一、前言 Source Insight 4.0 是每…

Blog项目切换Markdown编辑器———LayUI弹出层弹出写在页面的内容导致的各种bug

【2024.5.24回顾】 1 问题描述(描述完自己解决了…) 正常情况 点击添加文章按钮后&#xff0c;弹出文章编辑界面&#xff0c;如果用富文本功能编辑&#xff0c;则一切正常。可以多次打开、关闭 Markdown 如果在弹出层中点击了切换编辑器按钮&#xff0c;会成功切换为markd…

Android RelativeLayout Rtl布局下的bug:paddingStart会同时作用于左右内边距

问题现象 如上图&#xff0c;只是设置了paddingStart&#xff0c;在RTL布局下&#xff0c;左右都产生了10dp的间距。其他布局如LinearLayout&#xff0c;FrameLayout则没有这个问题。 private void positionAtEdge(View child, LayoutParams params, int myWidth) {if (isLayou…

simCSE句子向量表示(1)-使用transformers API

SimCSE SimCSE: Simple Contrastive Learning of Sentence Embeddings. Gao, T., Yao, X., & Chen, D. (2021). SimCSE: Simple Contrastive Learning of Sentence Embeddings. arXiv preprint arXiv:2104.08821. 1、huggingface官网下载模型 官网手动下载&#xff1a;pri…

【Python数据分析--Numpy库】Python数据分析Numpy库学习笔记,Python数据分析教程,Python数据分析学习笔记(小白入门)

一&#xff0c;Numpy教程 给大家推荐一个很不错的笔记&#xff0c;个人长期学习过程中整理的 Python超详细的学习笔记共21W字点我获取 1-1 安装 1-1-1 使用已有的发行版本 对于许多用户&#xff0c;尤其是在 Windows 上&#xff0c;最简单的方法是下载以下的 Python 发行版…

史上最全,呕心沥血总结oracle推进SCN方法(三)

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享。前面介…