首页 > 其他分享 >JS逆向入门案例-xx志愿服务网encData-05

JS逆向入门案例-xx志愿服务网encData-05

时间:2024-08-30 18:50:12浏览次数:5  
标签:服务网 function return 05 方法 JS var 断点 255

文章目录

概要

提示:仅供学习,不得用做商业交易,如有侵权请及时联系!

逆向:xx志愿服务网

URL:aHR0cDovL2NoaW5hdm9sdW50ZWVyLm1jYS5nb3YuY24vc2l0ZS9wcm9qZWN0

目标:表单数据中的 encData参数

在这里插入图片描述

整体架构流程

提示:分析-调试-猜想-实现-执行

1、直接开始全局搜索encData:
在这里插入图片描述
我们用鼠标去触发第二页:
在这里插入图片描述
我们打印这几个参数和方法,看看都是些什么:
在这里插入图片描述
上图我们发现有几个关键参数:key,iv,mode,encrypt,信息做多了js逆向人都知道,这肯定是一个aes或者des加密,我们猜测一下,来验证是不是标准加密:
在这里插入图片描述
发现与上图的结果不一致,那么肯定是魔改了!
2、这个时候我们只能进入S方法,看看里面都进行了什么操作,然后返回了对象从而调用encrypt方法的:
在这里插入图片描述
往上找,我们看看这个w方法在哪里:
在这里插入图片描述
我们发现w是一个自执行函数,上面n(“EKta”)有点像webpack来调用的:
在这里插入图片描述
3、w方法是在webpack里面加载对象的独立空间,那么我们可以将该对象里面的所有方法和变量都可以扣下来,然后缺什么补什么:
在这里插入图片描述
发现A没有定义,那么我们可以重新断点进入,看看里面是什么:
在这里插入图片描述
在这里插入图片描述
我们去断点发现断不住,那么我们直接进入方法里面去断点:
在这里插入图片描述

这里我们发现a方法其实是一个:Object.defineProperty,直接将a()改成这个!

在这里插入图片描述
继续补g方法:
在这里插入图片描述
我们可以看到其实g什么都没有做,就是赋了俩个值:
在这里插入图片描述
继续补b方法:
在这里插入图片描述
在这里插入图片描述
我们仔细看这个p会方法该方法其实就是刚刚的A方法:
在这里插入图片描述

	key: "stringToArrayBufferInUtf8",
        value: function(e) {
            var t = TextEncoder;
            return (new t).encode(e)
        }

打印继续看看缺啥:
在这里插入图片描述
继续补u对象,断点跳转进去扣下来:

var u = {
    encode: function(t) {
             return t.replace(/./g, function(t) {
                 var n = t.charCodeAt(0);
                 if (8364 == (r = n) || r <= 127 && r >= 0)
                     return encodeURIComponent(t);
                 var r, i = n.toString(16);
                 return 4 != i.length && (i = ("000" + i).match(/....$/)[0]),
                 e[i] || t
             })
         },
    decode: function(e) {
        return e.replace(/%[0-9A-F]{2}%[0-9A-F]{2}/g, function(e) {
            return e in t ? String.fromCharCode("0x" + t[e]) : e
        }).replace(/%[\w]{2}/g, function(e) {
            return decodeURIComponent(e)
        })
    }
}

在这里插入图片描述
发现缺少h对象,继续扣,断点跳转进去发现就是这三个方法:
在这里插入图片描述

	var h = {
    byteLength : function(e) {
        var t = f(e)
          , n = t[0]
          , r = t[1];
        return 3 * (n + r) / 4 - r
    },
    toByteArray : function(e) {
        var t, n, r = f(e), a = r[0], c = r[1], s = new o(function(e, t, n) {
            return 3 * (t + n) / 4 - n
        }(0, a, c)), l = 0, u = c > 0 ? a - 4 : a;
        for (n = 0; n < u; n += 4)
            t = i[e.charCodeAt(n)] << 18 | i[e.charCodeAt(n + 1)] << 12 | i[e.charCodeAt(n + 2)] << 6 | i[e.charCodeAt(n + 3)],
            s[l++] = t >> 16 & 255,
            s[l++] = t >> 8 & 255,
            s[l++] = 255 & t;
        2 === c && (t = i[e.charCodeAt(n)] << 2 | i[e.charCodeAt(n + 1)] >> 4,
        s[l++] = 255 & t);
        1 === c && (t = i[e.charCodeAt(n)] << 10 | i[e.charCodeAt(n + 1)] << 4 | i[e.charCodeAt(n + 2)] >> 2,
        s[l++] = t >> 8 & 255,
        s[l++] = 255 & t);
        return s
    },
    fromByteArray : function(e) {
        for (var t, n = e.length, i = n % 3, o = [], a = 0, c = n - i; a < c; a += 16383)
            o.push(l(e, a, a + 16383 > c ? c : a + 16383));
        1 === i ? (t = e[n - 1],
        o.push(r[t >> 2] + r[t << 4 & 63] + "==")) : 2 === i && (t = (e[n - 2] << 8) + e[n - 1],
        o.push(r[t >> 10] + r[t >> 4 & 63] + r[t << 2 & 63] + "="));
        return o.join("")
    }
}

在这里插入图片描述
继续断点补l方法:

	function l(e, t, n) {
            for (var i, o, a = [], c = t; c < n; c += 3)
                i = (e[c] << 16 & 16711680) + (e[c + 1] << 8 & 65280) + (255 & e[c + 2]),
                a.push(r[(o = i) >> 18 & 63] + r[o >> 12 & 63] + r[o >> 6 & 63] + r[63 & o]);
            return a.join("")
        }

发现缺少r对象:
在这里插入图片描述
断点发现r为一个数组值:
在这里插入图片描述
最后运行发现:
在这里插入图片描述
4、还有一种就是webpack的形式:
在这里插入图片描述
留着自己扣吧!

技术细节

提示:边更边扣,跟对地方

小结

提示:学习交流群:v:wzwzwz0613拉进群

标签:服务网,function,return,05,方法,JS,var,断点,255
From: https://blog.csdn.net/qq_53444631/article/details/141721245

相关文章

  • NestJs 快速入门
    npmi-g@nestjs/cli,nestnewcar-report快速创建car-report 项目。src目录下面有main,controller,service,module文件。main.ts是项目的入口,它引入AppModule,创建服务,监听3000端口。AppModule是一个注解@Module()的类,也称为app模块。由于项目启动时引入AppModule,它也称为根模......
  • js基础学习
    1.js是动态语言,变量类型是可变的。varx=10;varx='pink';2.八进制(0开头)、十六进制(0x开头)3.字符串多个嵌套时,外双内单/外单内双。模版字符串:为了简化字符串拼接。`我今年${age}了`转义字符:4.typeof变量 可以检测类型---控制台颜色也可以检测类型5.转成字符串......
  • 【JS】使用MessageChannel实现深度克隆
    前言通常使用简便快捷的JSON序列化与反序列化实现深克隆,也可以递归实现或者直接使用lodash。但JSON序列化与反序列化无法处理如下的循环引用:实现MessageChannel内部使用了浏览器内置的结构化克隆算法,该算法可以在不同的浏览器上下文之间传递数据。它能够在传递数......
  • nodejs实现将json转化为excel文件
    本文使用node.js实现将json数据转换导出为excel文件。一、安装json2xls库npmijson2xls二、封装转换方法新增jsonToExcel.js文件,该文件用于将json数据(对象数组)转换为excel文件,文件内容如下:constfs=require('fs')//引入文件系统模块constjson2xls=require('json2......
  • 推荐一款神奇的3D倾斜库——vanilla-tilt.js
    3D倾斜库—vanilla-tilt.js话不多说,直接上代码vanilla-tilt.js官网地址<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale......
  • webView中,无法利用JS监听APP原生返回后事件
    描述:用uniapp开发的APP,内容页用webView内嵌的h5做的;现在有个需求,在A页面点击新增,uni.navigateTo打开B页面,然后在B页面新增修改完数据之后,uni.navigateBack返回A页面;需要在A页面监听;当页面回到A的时候刷新数据;问题:在A页面用js无法监听到页面返回了;尝试监听方案:1、只能监听页面......
  • SolidJS-多文件间传递同一个信号量
    SolidJS-多文件间传递同一个信号量现在我在controlPanel.tsx中返回了一个控制面板(HTML代码),可以控制node、link、step1和step2的值。在matrixWave.tsx中我根据node、link、step1和step2的值进行数据的过滤,然后生成对应的matrixWave的SVG图。因此,我希望在web中对node、link、step1......
  • js逆向之常用算法
     [Python]encode&decodefromurllibimportparse#url进行编码与解码url='你好啊'url_encode=parse.quote(url)print('url编码后:',url_encode)url_decode=parse.unquote(url_encode)print('url解码后:',url_decode)url_encode......
  • CSS、JS之动态展开式菜单
    效果演示实现了一个可展开菜单按钮的效果,点击按钮会弹出一个菜单列表,菜单列表中包含多个选项。按钮的样式为一个圆形背景,中间有三条横线,表示可以展开。当按钮被点击后,三条横线会变成一个叉号,表示可以收起。菜单列表的样式为一个白色背景,四周有阴影,包含多个选项,每个选项都有......
  • CSS、JS之密码灯登录表单
    效果演示实现了一个登录页面,包括一个标题、两个输入框(用户名和密码)、一个登录按钮和一个眼睛图标。点击眼睛图标可以显示或隐藏密码。页面背景有两个圆形的半透明元素,整个页面使用了flex布局,并且在水平和垂直方向上都居中对齐。登录框使用了阴影效果和圆角边框,并且在水平和......