首页 > 其他分享 >JS加密/解密之XX数据后台列表JS加密

JS加密/解密之XX数据后台列表JS加密

时间:2023-11-01 19:31:36浏览次数:36  
标签:function 加密 0x0 0x2dea49 JS XX typeof && var

JS加密/解密之XX数据后台列表JS加密_JS混淆

目标地址

ZHkuZmVpZ3VhLmNu

需求

老朋友联系到我,希望能自己做一个方便读取的小工具给公司内部用,承诺绝不外传。但是获取接口数据的最后一步遇到了问题,响应回来的数据做了大量加密,无法识别。

代码分析

该站代码做了大量的Promise异步处理,webpack打包的格式。追踪比较困难,最后花了很大功夫才跟到关键函数。(关于Promise的特性原理可以看我之前写的文章,写的有不对的地方欢迎指出)

// 全是类似于这种格式的函数 中间掺杂了大量的异步方法,根本没法跟进
function T(e, o, t, a) {
    var n = C(e);
    if (!n)
        return "function" == typeof o && o(p),
        void 0;
    var r = t && t.cdn
      , i = t && t.sync
      , m = t && t.timeout || 5e3;
    if (0 !== n.depends.length)
        for (var s = 0; s < n.depends.length; s++) {
            var l = n.depends[s];
            t && (delete t.sync,
            delete t.timeout,
            delete t.cdn),
            M(l, void 0, t)
        }
    var c = a || {};
    c.module = n,
    c.name = e,
    c.state = b,
    c.callbacks = c.callbacks || [],
    c.options = t,
    o && c.callbacks.push(o),
    c.timeoutTimer = setTimeout(function() {
        c.state = g,
        W(c, t && t.throwExceptionInCallback)
    }, m),
    a || u.push(c);
    var f = n.sync;
    i && (f = i);
    var h = d(n.name, r);
    S(h, "AWSC_" + n.name, f)
}

结果

最后找到了代码,是一个变种的AES加密+自定义的字符串转码加密,相关逻辑一步步手工复原。中间还有用到jsjiami官网类似的加密逻辑。

ggnsh = '',  _0x4aec=['w71Uw6fCsGg=','6L2C5puu5Lqs5Li/5LqF57O/5Yi/w4ou5pKI5L6h44Km','56m96Ze05o646aqX57mjNeKDnm7DmOKjuWvkeKDk1blkqLCuO1KBs8Oyw6TopK7lrpTigobDru+8nOS+hOWMl+S+peeaksOww7Av44Oh','w61VwrbDuA==','wqPDr8OcBGHClw==','QjLDk8K7dQ==','wo3CqXZrYWRc','diLDmQ==','B8OgHA==','wrfDpcORD2HCkcO/w4HCuQ==','b8O4XsOCwpXDocOPw4sVI2LDg8KLYw==','5aSG5p6n5oG455iTfsKV6Yej5bSk5aah5Lm8wrQcwq3vvoJlNcOD5qCN56+177+3566q56+35YWW5LiE6Z6swoAxwoPDonbChETDm8OVw5LnmJDkurbnopLvvLXorIjmjoPljJTlhL/mnqzlhrzli5XlrbXjg7fovLvku57ltbnlhYfkuZXogpDliJLlrLQCUnLjgIZFc8Kq566b5qid54i15YaS5a+r','5YmT6Zus54mi5p+w5YyJ77+yZU/kvZ/lroDmno3lv6Pnq44=','w67Dt145VA==','azMQw55U','w6rCrcOPYsKl','w5DCgMOWf8KM','w7F/w73CrGI=','w5LChcK4wonDtsKh','FcOzGm7CvxDChg==','w4g8w6pGOA=='];(function(_0xf49075,_0x43a770){var _0x452f8c=function(_0x38b3d2){while(--_0x38b3d2){_0xf49075['push'](_0xf49075['shift']());}};_0x452f8c(++_0x43a770);}(_0x4aec,0xa9));var _0x3f46=function(_0x14f8df,_0x5b5bda){_0x14f8df=_0x14f8df-0x0;var _0x45b4b0=_0x4aec[_0x14f8df];if(_0x3f46['initialized']===undefined){(function(){var _0x1e077d=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0x2edf07='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x1e077d['atob']||(_0x1e077d['atob']=function(_0x3a4810){var _0x5bf5a1=String(_0x3a4810)['replace'](/=+$/,'');for(var _0x305cfd=0x0,_0x22fa5b,_0x2dea49,_0x381f3f=0x0,_0x1afedf='';_0x2dea49=_0x5bf5a1['charAt'](_0x381f3f++);~_0x2dea49&&(_0x22fa5b=_0x305cfd%0x4?_0x22fa5b*0x40+_0x2dea49:_0x2dea49,_0x305cfd++%0x4)?_0x1afedf+=String['fromCharCode'](0xff&_0x22fa5b>>(-0x2*_0x305cfd&0x6)):0x0){_0x2dea49=_0x2edf07['indexOf'](_0x2dea49);}return _0x1afedf;});}());var _0x8b5ca2=function(_0x1f3132,_0x92107a){var _0x216991=[],_0x1faf0e=0x0,_0x1af4ca,_0x3fb046='',_0x27048e='';_0x1f3132=atob(_0x1f3132);for(var _0x51ad13=0x0,_0x21236d=_0x1f3132['length'];_0x51ad13<_0x21236d;_0x51ad13++){_0x27048e+='%'+('00'+_0x1f3132['charCodeAt'](_0x51ad13)['toString'](0x10))['slice'](-0x2);}_0x1f3132=decodeURIComponent(_0x27048e);for(var _0x53b9f8=0x0;_0x53b9f8<0x100;_0x53b9f8++){_0x216991[_0x53b9f8]=_0x53b9f8;}for(_0x53b9f8=0x0;_0x53b9f8<0x100;_0x53b9f8++){_0x1faf0e=(_0x1faf0e+_0x216991[_0x53b9f8]+_0x92107a['charCodeAt'](_0x53b9f8%_0x92107a['length']))%0x100;_0x1af4ca=_0x216991[_0x53b9f8];_0x216991[_0x53b9f8]=_0x216991[_0x1faf0e];_0x216991[_0x1faf0e]=_0x1af4ca;}_0x53b9f8=0x0;_0x1faf0e=0x0;for(var _0xfdc631=0x0;_0xfdc631<_0x1f3132['length'];_0xfdc631++){_0x53b9f8=(_0x53b9f8+0x1)%0x100;_0x1faf0e=(_0x1faf0e+_0x216991[_0x53b9f8])%0x100;_0x1af4ca=_0x216991[_0x53b9f8];_0x216991[_0x53b9f8]=_0x216991[_0x1faf0e];_0x216991[_0x1faf0e]=_0x1af4ca;_0x3fb046+=String['fromCharCode'](_0x1f3132['charCodeAt'](_0xfdc631)^_0x216991[(_0x216991[_0x53b9f8]+_0x216991[_0x1faf0e])%0x100]);}return _0x3fb046;};_0x3f46['rc4']=_0x8b5ca2;_0x3f46['data']={};_0x3f46['initialized']=!![];}var _0x5b32d9=_0x3f46['data'][_0x14f8df];if(_0x5b32d9===undefined){if(_0x3f46['once']===undefined){_0x3f46['once']=!![];}_0x45b4b0=_0x3f46['rc4'](_0x45b4b0,_0x5b5bda);_0x3f46['data'][_0x14f8df]=_0x45b4b0;}else{_0x45b4b0=_0x5b32d9;}return _0x45b4b0;};var a={},b={};(function(_0x506b2e,_0x58d7e0){var _0x19e8e1={'rRNLz':_0x3f46('0x0','1s0Z'),'BgIBC':_0x3f46('0x1','8!@M')};_0x506b2e[_0x3f46('0x2','w1o8')]=_0x19e8e1['rRNLz'];_0x58d7e0[_0x3f46('0x3','*!GJ')]=_0x19e8e1[_0x3f46('0x4','USRf')];_0x58d7e0[_0x3f46('0x5','U$Z9')]='如果您的JS里嵌套了PHP,JSP标签,等等其他非JavaScript的代码,请提取出来再加密。这个工具不能加密php、jsp等模版内容';}(a,b));;(function(_0x4bdcfe,_0x4fbc37,_0x225d65){var _0xa570a3={'cKiRe':function _0x4524a2(_0x28244c,_0x3e739a){return _0x28244c===_0x3e739a;},'OatFh':_0x3f46('0x6','dutS'),'JiHQK':_0x3f46('0x7','1BqD'),'pDQLb':function _0x21f4e0(_0x1041c5,_0x24bbc1){return _0x1041c5!==_0x24bbc1;},'HmQGk':_0x3f46('0x8','*!GJ'),'pdbgu':_0x3f46('0x9','09i)'),'bdJmK':'版本号,js会定期弹窗,还请支持我们的工作','mwSYx':'站长接高级\x20“JS加密”\x20和\x20“JS解密”\x20,保卫你的\x20js。','noQRJ':_0x3f46('0xa','w1o8'),'nOPqA':_0x3f46('0xb','^WDP')};_0x225d65='al';try{if(_0xa570a3['cKiRe'](_0xa570a3[_0x3f46('0xc','4GGL')],_0xa570a3[_0x3f46('0xd','y]bZ')])){_0x225d65+=_0xa570a3[_0x3f46('0xe','%Li]')];_0x4fbc37=encode_version;if(!(_0xa570a3[_0x3f46('0xf','%Li]')](typeof _0x4fbc37,_0xa570a3['HmQGk'])&&_0xa570a3['cKiRe'](_0x4fbc37,_0xa570a3['pdbgu']))){_0x4bdcfe[_0x225d65]('删除'+_0xa570a3[_0x3f46('0x10','r5C!')]);}}else{_0x4bdcfe['info']='这是一个一系列js操作。';d[_0x3f46('0x11','1H)L')]=_0xa570a3['mwSYx'];d[_0x3f46('0x12','1BqD')]=_0xa570a3[_0x3f46('0x13','w@A#')];}}catch(_0x433f0a){_0x4bdcfe[_0x225d65](_0xa570a3[_0x3f46('0x14','r5C!')]);}}(window));

算法还原后的代码就不贴了,尊重网站作者隐私。需要的可以联系jsjiami官方客服。

标签:function,加密,0x0,0x2dea49,JS,XX,typeof,&&,var
From: https://blog.51cto.com/u_15781271/8131738

相关文章

  • Nodejs安装教程
    1.下载 在https://nodejs.cn/download/current/ 下载安装包,我下载的是  node-v18.18.0-x64.msi2.双击安装包,一路点击下一步,我选择安装到D:\nodejs\ 目录3.验证安装  在cmd命令行窗口中,运行  node-v 及 npm-v 将显示版本号4 修改全局模块下载路径4.1......
  • js 判断数组对象中是否含有重复的值
    //判断对象数组是否有相同属性相同:true\不相同:falsehasFun(array){returnarray.some((item,index)=>{return(array.findIndex((v,i)=>{return(i!==index&&JSON.stringify(v.item......
  • 敏感字段加密
    题目描述:【敏感字段加密】给定一个由多个命令字组成的命令字符串:1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号;2、命令字之间以一个或多个下划线_进行分割;3、可以通过两个双引号"";来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字),双引号不......
  • XXL-SSO框架基础入门
    XXL-SSO介绍XXL-SSO是一个开源的分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。拥有"轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性,可以开箱即用。特性1、简洁:API直观简洁,可快速上手;2、轻量级:环境依赖小,部署与接入成本较低;3、单点登录......
  • php:bcrypt加密和验证(php 8.1)
    一,相关文档:https://www.php.net/manual/zh/function.password-hash.php二,php代码:12345678910111213141516171819202122232425/* *测试用bcrypt方式验证密码 *用password_hash和password_verify一对函数实现 **/publicfunct......
  • python + flask + ffmpeg + hls.js
    参考视频链接:https://www.bilibili.com/video/BV1ay4y1A78j/?p=5&spm_id_from=pageDriver&vd_source=5fed6e8a7e3ad9f10860bf7a4540ba71......
  • Java导入Jsoup库做一个有趣的爬虫项目
    Jsoup库是一款Java的HTML解析器,可用于从网络或本地文件中获取HTML文档并解析其中的数据。它可以模拟浏览器的行为,获取网页中的数据,是Java爬虫中常用的工具之一。与浏览器相比,Jsoup库的主要区别在于它不会执行JavaScript代码,因此无法获取通过JavaScript生成的内容。使用Jsoup库进行......
  • 详细讲解原生js拖拽
    场景描述今天遇见一个问题,那就是产品希望在弹出来的窗口。可以移动这个弹窗的位置增加用户体验,我们直接使用的element-ui中的Dialog对话框我们现在需要拖拽标题,移动元素位置元素拖拽的思路要让元素按下移动,我们需要实现以下几个步骤:1.鼠标按下元素跟随光标移动2.鼠标抬起元......
  • 【2023-11-01】一款基于 pdf.js 的 PDF 批注注释插件库(纯JS、高亮、画笔、多边形、历
    基于纯JavaScript和PDF.js做的一款PDF批注拓展插件-PDFMaster,一款仍能兼容支持IE11的PDF批注插件,界面美观功能强大,有无开发经验都可以快速简单快速使用。Demo及源码Demo和源码地址:https://demos.libertynlp.com功能演示视频:https://www.bilibili.com/video/BV12C4y1n7TL......
  • vuejs3.0 从入门到精通——初始化项目——路由
    路由 VueRouter是Vue.js官方的路由管理器,它和Vue.js深度集成,用于构建单页面应用。Vue.js单页面应用是基于路由和组件映射的,路由用于配置访问路径,将组件(components)映射到路由路径(routes)。一、路由模式 VueRouter常用的两种模式是hash模式和HTML5模式,对应的创建......