CZ航司,shopping JS逆向 acw_sc__v2

CZ航司shopping JS逆向分析技术大纲

aHR0cHM6Ly93d3cuY3NhaXIuY29tL2NuL2luZGV4LnNodG1s

技术背景与目标
  • 分析CZ航司shopping逻辑
  • 代码实现
  • acw_sc__v2还原
关键逆向步骤
  • 抓包分析
    点击支付触发跳转页面(这里一ZFB方式讲解)

    调用了payment接口,然后里面重定向到showay收银台页面,请求参数是订单号加上一个固定值inter=undefined

    payment会出现三种情况,一种是滑块风控,一种是acw_sc_v2,最后一种是正常跳转。除了正常跳转,剩下两个都需要再次请求payment
    acw_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逆向工程实战》)
相关推荐
布莱克6052 分钟前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
LabVIEW开发11 分钟前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
Dream-Y.ocean40 分钟前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
benchmark_cc1 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
维克兜率天1 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python
Highcharts.js2 小时前
Highcharts Gantt使用符号的自定义数据标签开发甘特图示例
javascript·甘特图·highcharts·图表开发·实战代码·响应式图表
Zenova EdgeOS2 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是2 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
梦想不只是梦与想2 小时前
PyTorch、CPU、GPU、CUDA
人工智能·pytorch·python·深度学习·机器学习·cuda
数字融合2 小时前
透明化视频孪生危化安全管控解决方案
人工智能·python·安全