CZ航司shopping JS逆向分析技术大纲aHR0cHM6Ly93d3cuY3NhaXIuY29tL2NuL2luZGV4LnNodG1s技术背景与目标分析CZ航司shopping逻辑代码实现acw_sc__v2还原关键逆向步骤抓包分析点击支付触发跳转页面(这里一ZFB方式讲解)调用了payment接口然后里面重定向到showay收银台页面请求参数是订单号加上一个固定值interundefinedpayment会出现三种情况一种是滑块风控一种是acw_sc_v2最后一种是正常跳转。除了正常跳转剩下两个都需要再次请求paymentacw_sc_v2情况滑块情况最后走paySubmit接口也是两种情况一种是站内弹出二维码另一种是网页跳转站内弹出返回数据里面的payForm返回的是base64编码图片submit入参是token是payment重定向的链接提取网页跳转返回from表单进行提交获取表单进行提交数据。然后重定向到appAssign最后跳转到真正支付页面payment接口入参一个订单号一个定值acw_sc_v2情况页面返回一个arg1和一个js块。根据arg1和js块来生产acw_sc_v2最后再次更新这个值到cookie里面并请求acw_sc_v2:这里以查价来讲解逻辑首先写一个cookie的hook脚本清空acw_sc_v2的值并cha(function() { // 检查是否已经hook if (window.__cookieHooked) { console.log(Cookie hook already installed.); return; } // 获取原始的cookie属性描述符 let originalDescriptor Object.getOwnPropertyDescriptor(Document.prototype, cookie); if (!originalDescriptor) { // 如果原型上没有尝试直接获取document自身属性某些浏览器可能不同 originalDescriptor Object.getOwnPropertyDescriptor(document, cookie); } if (!originalDescriptor || !originalDescriptor.get || !originalDescriptor.set) { console.error(Unable to get original cookie descriptor); return; } const originalGet originalDescriptor.get; const originalSet originalDescriptor.set; // 重新定义document上的cookie属性 Object.defineProperty(document, cookie, { get: function() { debugger; // 在get时中断 console.log(Getting cookie); // 额外日志 return originalGet.call(this); }, set: function(value) { debugger; // 在set时中断 console.log(Setting cookie to:, value); return originalSet.call(this, value); }, configurable: true, enumerable: true }); window.__cookieHooked true; console.log(Cookie hook installed successfully. Cookie get/set will trigger debugger.); })();跟栈找到wa的值是所需值然后上一步看到所传参数是一个arg1一个url的参数awc_sc_v2扣代码实现paysubmit接口入参提取payment的重定向链接的token并传入data站内弹出二维码根据接口的payForm字段来判断如果是以data:开头的则返回的base64的图片反之是跳转页面。写一个base64转码就行跳转页面接口返回表单利用正则提取出数据并请求pay接口。提取cz订单号zfb订单号金额交易类型等然后重定向到appAssign后最后重定向到真正页面并返回html整合代码payment获取收银台页面acw_sc_v2情况获取完该值并重新调用paySubmit获取ZFB响应判断响应类型是站内跳转还是网页跳转跳转页面请求支付并保存html成果展示反爬策略应对处理动态Cookie acw_sc_v2模拟浏览器指纹User-Agent、WebGL渲染对抗代码混淆通过AST还原变量名和逻辑注意事项法律风险提示仅限技术研究禁止商业滥用混淆代码的常见特征如十六进制编码、控制流扁平化推荐学习资源如《JavaScript逆向工程实战》