HoRain云--JavaScript逆向工程:破解Mytoken的请求参数

  

HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

JavaScript逆向工程:破解Mytoken的请求参数

步骤 1:捕获目标请求

步骤 2:定位关键JavaScript代码

步骤 3:动态调试代码

步骤 4:还原加密逻辑

步骤 5:验证与优化

注意事项


 

JavaScript逆向工程:破解Mytoken的请求参数

步骤 1:捕获目标请求
  1. 使用抓包工具

    • 打开浏览器开发者工具(F12),进入 Network 面板。
    • 刷新页面或触发目标API请求(如点击“查询数据”按钮)。
    • 找到目标请求(通常为XHRFetch类型),记录其 URLHeadersQuery Parameters。重点关注加密参数(如signtoken)。
  2. 分析请求参数

    • 检查参数是否包含时间戳(如timestamp=1620000000)、随机数(nonce=12345)或加密签名(sign=abcd1234)。
    • 对比多次请求,观察哪些参数是动态变化的,推测其生成逻辑。

步骤 2:定位关键JavaScript代码
  1. 全局搜索关键词

    • 在开发者工具的 Sources 面板,使用 Ctrl+Shift+F 全局搜索以下内容:
      • 参数名(如signencryptKey)。
      • 加密算法关键词(如md5sha256CryptoJS)。
      • 拼接字符串的操作(如params.join(''))。
  2. 定位加密函数

    • 示例代码片段:
      function generateSign(params) {
          const sortedKeys = Object.keys(params).sort();
          let rawStr = '';
          sortedKeys.forEach(key => {
              rawStr += `${key}=${params[key]}&`;
          });
          rawStr = rawStr.slice(0, -1) + 'SECRET_KEY'; // 拼接密钥
          return md5(rawStr);
      }
      
    • 关键点:参数排序、拼接方式、密钥处理、哈希算法。

步骤 3:动态调试代码
  1. 设置断点

    • 在疑似生成参数的代码行设置断点(点击行号左侧)。
    • 重新触发请求,代码执行会在断点处暂停。
  2. 跟踪变量值

    • 使用 Scope 面板查看局部变量(如rawStrsign)。
    • Console 中实时执行表达式(如md5(rawStr))。
  3. 绕过反调试

    • 若遇到无限debugger语句,点击调试器的 Deactivate breakpoints(停用断点)图标。
    • 使用插件(如 Tampermonkey)注入脚本覆盖debugger函数:
      // ==UserScript==
      // @name         Bypass Debugger
      // @namespace    http://tampermonkey.net/
      // @version      1.0
      // @description  绕过无限debugger
      // @match        https://mytoken.com/*
      // @run-at       document-start
      // ==/UserScript==
      window._originalDebugger = window.debugger;
      window.debugger = function() {};
      

步骤 4:还原加密逻辑
  1. 参数拼接规则

    • 常见方式:按字母排序参数键,拼接为key1=value1&key2=value2
    • 可能附加固定字符串(如&secret=xxx)或动态密钥。
  2. 哈希算法识别

    • MD5:生成32位十六进制字符串(如d41d8cd98f00b204e9800998ecf8427e)。
    • SHA-1:40位十六进制字符串。
    • HMAC:需要密钥,常见于CryptoJS.HmacSHA256
  3. 代码模拟示例(Python)

    import hashlib
    import time
    
    def generate_sign(params, secret_key):
        # 1. 参数按key排序
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        # 2. 拼接为 key1value1key2value2...
        raw_str = ''.join([f"{k}{v}" for k, v in sorted_params])
        # 3. 附加密钥并MD5哈希
        sign_str = raw_str + secret_key
        return hashlib.md5(sign_str.encode()).hexdigest()
    
    params = {
        "symbol": "BTC",
        "timestamp": int(time.time())
    }
    secret = "mytoken_secret_123"  # 从JS代码中提取的密钥
    sign = generate_sign(params, secret)
    print(f"Generated sign: {sign}")
    

步骤 5:验证与优化
  1. 发送测试请求

    • 使用工具(如 PostmanPython requests)携带生成的参数发送请求。
    • 示例代码:
      import requests
      
      url = "https://api.mytoken.com/data"
      headers = {
          "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..."
      }
      params = {
          "symbol": "BTC",
          "timestamp": 1620000000,
          "sign": sign
      }
      response = requests.get(url, params=params, headers=headers)
      print(response.json())
      
  2. 处理动态密钥

    • 若密钥通过接口动态获取(如GET /api/get_secret),需先请求密钥再生成签名。
  3. 应对代码混淆

    • 使用反混淆工具(如 de4jsJStillery)还原代码结构。
    • 动态Hook关键函数(示例使用 Chrome Overrides):
      • Sources > Overrides 中创建本地文件夹。
      • 找到混淆的JS文件,右键选择 Save for overrides,编辑后保存,刷新页面生效。

注意事项
  1. 法律与道德

    • 仅用于学习或授权测试,不得用于非法爬取或商业用途。
    • 遵守目标网站的robots.txt和服务条款。
  2. 反爬策略

    • IP限制:使用代理池轮换IP。
    • 验证码:集成打码平台或OCR识别。
    • 请求频率限制:添加随机延迟(如time.sleep(random.uniform(1,3)))。
  3. 调试技巧

    • 使用 Charles Map Local 功能替换线上JS文件为本地修改版本。
    • Console 中重写加密函数,直接输出中间值:
      window._originalMD5 = window.md5;
      window.md5 = function(input) {
          console.log("MD5 input:", input);
          return _originalMD5(input);
      }
      

 

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!

如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!

Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!

你可能感兴趣的:(javascript,开发语言,ecmascript)