news 2026/4/23 19:07:02

013-webpack:新东方

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
013-webpack:新东方

网站地址:新东方

找加密参数+定位

只需要逆向sign即可:

我们直接xhr断点:

打上断点看看怎么个事儿:

然后我们看看ot是啥:

直接看sign生成的位置发现t竟然是刚才那个对象转化成的字符串,后面那个Ye.b是一个固定字符串,就差Je函数了,可以进去扣函数,但是进去一看就是webpack的模块存储文件,扣着可能会麻烦:

所以我另辟蹊径,找到了调用加载器的地方:

进去看看结构:

这种直接全扣就行,然后填充模块

复现逻辑

经过上面分析可得到代码如下:

var sz !function(e){function r(r){for(var n,a,i=r[0],c=r[1],l=r[2],p=0,s=[];p<i.length;p++)a=i[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(ninc)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);s.length;)s.shift()();returnu.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var c=t[i];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}returne}var n={},o={0:0},u=[];function a(r){if(n[r])returnn[r].exports;var t=n[r]={i:r,l:!1,exports:{}},o=!0;try{console.log('chunk:',r)e[r].call(t.exports,t,t.exports,a),o=!1}finally{o&&delete n[r]}returnt.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){returna.p+"static/chunks/"+({}[e]||e)+"."+{10:"47c029199ae9bfb21463",14:"17a52b04003ad29fee67"}[e]+".js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void0}};var l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}returnPromise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)returne;if(4&r&&"object"===typeof e&&e&&e.__esModule)returne;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var nine)a.d(t,n,function(r){returne[r]}.bind(null,n));returnt},a.n=function(e){var r=e&&e.__esModule ? function(){returne.default}:function(){returne};returna.d(r,"a",r),r},a.o=function(e,r){returnObject.prototype.hasOwnProperty.call(e,r)},a.p="",a.oe=function(e){throw console.error(e),e};sz=a//var i=window.webpackJsonp_N_E=window.webpackJsonp_N_E||[]//,c=i.push.bind(i);//i.push=r,//i=i.slice();//for(var l=0;l<i.length;l++)//r(i[l]);//var f=c;//t()}([]);var Je=sz("aCH8"),data=`appId=5053&t=1766065342563&cityCode=430300&pageIndex=${1}&pageSize=12&categoryCode=123&order=0` Je("".concat(data).concat("750F82C2-D8F6-49F6-878C-1E7EBEBC8DA2"))

然后开始补模块了,所有模块如下:

result(这里面有一点改动,时间戳写活了,上面忘记了哈哈):

py调用

py代码:

importrequestsimportosimportexecjsimporttimeclassJSExecutor:def__init__(self,file_path):ifnotos.path.exists(file_path):print('NotFoundFile')withopen(file_path,'r',encoding='utf-8')asf:self.js_code=f.read()self.js_code=execjs.compile(self.js_code)defcall(self,func_name,*args):returnself.js_code.call(func_name,*args)defget_data(sign,timestamp,para_page):headers={'sign':sign,# 逆向此参数'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0',}params={'appId':'5053','t':f'{timestamp}','cityCode':'430300','pageIndex':f'{para_page}','pageSize':'12','categoryCode':'123','order':'0',}response=requests.get('https://dsapi.xdf.cn/product/v2/class/search',params=params,headers=headers)returnresponse.json()if__name__=='__main__':js_executor=JSExecutor('13.js')forpageinrange(1,4):js_params=js_executor.call('encSign',page)print(get_data(js_params['sign'],js_params['timeSign'],page))time.sleep(0.3)

result:

小结

本文很简单,如有问题请及时提出,加油加油

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:33:42

014-国密sm2:文物保护

案例地址&#xff1a;文物保护 找加密参数位置 先找请求头&#xff1a; 载荷&#xff1a; 这个就是我们今天逆向的目标&#xff0c;直接xhr&#xff1a; 这里是xhr断下来的上一个栈&#xff0c;这里入参就有密文了&#xff0c;咱直接往前看&#xff0c;这里不带大家跟栈了&am…

作者头像 李华
网站建设 2026/4/23 13:01:29

全网最全10个AI论文软件,助本科生搞定毕业论文!

全网最全10个AI论文软件&#xff0c;助本科生搞定毕业论文&#xff01; 1.「千笔」—— 一站式学术支持“专家”&#xff0c;从初稿到降重一步到位&#xff08;推荐指数&#xff1a;★★★★★&#xff09; 在众多AI论文工具中&#xff0c;「千笔」凭借其强大的论文生成能力脱颖…

作者头像 李华
网站建设 2026/4/23 14:13:30

11. Linux 防火墙管理

Firewalld 配置 Firewalld 配置方法 直接编辑 /etc/firewalld/ 中的配置文件firewall-cmd 命令行工具firewall-config 图形工具 Firewalld 配置文件 Firewalld 配置配置文件存放在&#xff1a;/usr/lib/firewalld/目录&#xff0c;Firewalld软件包自带配置位置。/etc/firewalld…

作者头像 李华
网站建设 2026/4/23 14:34:46

学长亲荐2026TOP10AI论文网站:本科生毕业论文写作全测评

学长亲荐2026TOP10AI论文网站&#xff1a;本科生毕业论文写作全测评 2026年AI论文写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着人工智能技术的快速发展&#xff0c;AI在学术写作领域的应用日益广泛。然而&#xff0c;面对市场上琳琅满目的AI论文写作平台&am…

作者头像 李华
网站建设 2026/4/23 14:52:28

【C++入门】05、复合类型-数组

1、数组数组是一种数据格式&#xff0c;能够存储多个同类型的值。数组声明时需要确定的三个要点&#xff1a;存储在每个元素中的值的类型数组名数组中的元素个数&#xff0c;必须是整数常量或const值short months[12];2、数组元素访问数组的特性之一是可以单独访问数组的元素&a…

作者头像 李华