巫妖易语言+js逆向+安卓逆向hook培训教程

65 阅读5分钟

JS 逆向串联全链路技术解析

一、JS逆向概述

// download:itazs.fun/4804/

JavaScript逆向工程是指通过分析、理解和修改JavaScript代码,揭示其内部逻辑和实现机制的过程。在现代Web开发中,JS逆向技术广泛应用于:

  1. 安全审计与漏洞挖掘
  2. 爬虫开发与数据采集
  3. 前端性能优化分析
  4. 第三方接口研究
  5. 反爬机制破解

二、逆向技术基础

1. 必备工具集

调试工具:

  • Chrome DevTools (Elements/Network/Sources/Console面板)
  • Firefox Developer Tools
  • Fiddler/Charles (网络抓包)
  • Wireshark (底层协议分析)

反混淆工具:

  • AST反混淆工具 (Babel、esprima)
  • js-beautify (代码格式化)
  • de4js (在线反混淆)
  • WebStorm (代码分析)

辅助工具:

  • Postman (API测试)
  • Node.js (本地执行环境)
  • Python + Requests (自动化测试)
  • IDA Pro/Ghidra (二进制分析)

2. 核心分析技能

  • 调用栈分析 (Call Stack)
  • 断点调试 (Breakpoint)
  • Hook技术 (Proxy/Object.defineProperty)
  • 内存分析 (Memory Snapshot)
  • 事件监听分析 (Event Listeners)

三、逆向全链路流程

1. 目标定位阶段

1.1 网络请求分析

  • 使用Network面板记录所有请求
  • 过滤XHR/Fetch请求
  • 分析关键API请求参数
  • 检查请求签名/加密逻辑

1.2 关键入口定位

  • 搜索关键字符串 (如"encrypt"、"sign")
  • 全局搜索API端点
  • 事件监听器分析
  • 调用栈回溯

2. 代码分析阶段

2.1 反混淆处理

// 典型混淆代码示例
var _0x3f2a = ['\x48\x65\x6c\x6c\x6f', '\x77\x6f\x72\x6c\x64'];
function _0x45a1(_0x3f2a12, _0x45a1d2) {
    return _0x3f2a[_0x3f2a12];
}
console[_0x45a1('0x0')](_0x45a1('0x1'));

反混淆策略:

  1. 字符串提取还原
  2. 控制流平坦化处理
  3. 常量传播优化
  4. 死代码消除

2.2 AST分析与重构

// 使用Babel进行AST转换示例
const parser = require('@babel/parser');
const traverse = require('@babel/traverse').default;
const generator = require('@babel/generator').default;

const code = `function add(a, b) { return a + b; }`;
const ast = parser.parse(code);

traverse(ast, {
  BinaryExpression(path) {
    if (path.node.operator === '+') {
      path.node.operator = '*';
    }
  }
});

const output = generator(ast).code;
// 输出: function add(a, b) { return a * b; }

3. 算法还原阶段

3.1 加密算法识别

  • 常见加密特征识别:
    • AES: 固定块大小(128bit),常见模式(CBC/ECB)
    • RSA: 使用公钥/私钥对
    • Base64: 结尾常有'='填充
    • MD5/SHA: 固定长度哈希值

3.2 参数逆向示例

// 假设目标网站签名算法逆向示例
function generateSign(params) {
  // 1. 参数排序
  const sortedParams = Object.keys(params)
    .sort()
    .map(k => `${k}=${params[k]}`)
    .join('&');
  
  // 2. 拼接密钥
  const secret = 'x$12*_d#@';
  const signStr = sortedParams + secret;
  
  // 3. MD5哈希
  return md5(signStr).toUpperCase();
}

4. 模拟实现阶段

4.1 Node.js实现示例

const crypto = require('crypto');

function md5(text) {
  return crypto.createHash('md5').update(text).digest('hex');
}

function createRequest(params) {
  const sign = generateSign(params);
  
  return {
    url: 'https://api.example.com/data',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-Signature': sign
    },
    body: JSON.stringify(params)
  };
}

4.2 Python实现示例

import hashlib
import requests

def generate_sign(params):
    sorted_params = '&'.join([f'{k}={v}' for k, v in sorted(params.items())])
    sign_str = sorted_params + 'x$12*_d#@'
    return hashlib.md5(sign_str.encode()).hexdigest().upper()

def make_request(params):
    sign = generate_sign(params)
    headers = {
        'X-Signature': sign,
        'Content-Type': 'application/json'
    }
    return requests.post(
        'https://api.example.com/data',
        json=params,
        headers=headers
    )

四、高级逆向技术

1. WebAssembly逆向

分析流程:

  1. 提取wasm模块
  2. 使用wabt工具链反编译
  3. 分析导出函数
  4. 使用Emscripten生成胶水代码
# 使用wasm2wat反编译
wasm2wat module.wasm -o module.wat

# 使用wasm-decompile
wasm-decompile module.wasm -o module.dcmp

2. 反调试技术绕过

常见反调试手段:

  • console.log检测
  • devtools检测
  • 调试器断点检测
  • 执行时间检测

绕过方法:

// 重写console方法
console.log = function(){};
console.warn = function(){};

// 禁用调试器检测
Object.defineProperty(window, 'debuggerCheck', {
  get: function() { return false; },
  configurable: false
});

// 使用Worker执行关键代码
const workerCode = `postMessage(computeSomething());`;
const blob = new Blob([workerCode]);
const worker = new Worker(URL.createObjectURL(blob));

3. 浏览器自动化

Puppeteer示例:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

puppeteer.use(StealthPlugin());

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  
  // 绕过WebDriver检测
  await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', { get: () => false });
  });
  
  await page.goto('https://target.site');
  
  // 执行逆向后的函数
  const result = await page.evaluate(() => {
    return window.encryptData('test123');
  });
  
  console.log('Encrypted:', result);
  await browser.close();
})();

五、防护与对抗

1. 常见防护措施

代码层面:

  • 变量名混淆
  • 控制流混淆
  • 字符串加密
  • 代码分块加载
  • WebAssembly核心逻辑

架构层面:

  • 动态密钥轮换
  • 请求频率限制
  • 行为指纹分析
  • 验证码验证
  • 设备指纹识别

2. 混淆技术示例

高级混淆实现:

// 控制流平坦化示例
function obfuscatedAdd(a, b) {
  const states = [0, 1, 2, 3, 4];
  let state = 0;
  let result;
  
  while (states.includes(state)) {
    switch (state) {
      case 0:
        result = 0;
        state = 1;
        break;
      case 1:
        result += a;
        state = 2;
        break;
      case 2:
        result += b;
        state = 3;
        break;
      case 3:
        return result;
      default:
        throw new Error('Invalid state');
    }
  }
}

六、实战案例分析

案例1:某电商平台签名算法逆向

分析过程:

  1. 发现所有请求都有x-sign头部
  2. 全局搜索"x-sign"定位生成代码
  3. 分析生成逻辑包含:
    • 参数按ASCII排序
    • 拼接时间戳
    • HMAC-SHA256加密
    • Base64编码

还原实现:

const crypto = require('crypto');

function generateECommerceSign(params, timestamp, secret) {
  const sorted = Object.keys(params)
    .sort()
    .map(k => `${k}=${params[k]}`)
    .join('&');
  
  const signStr = `${sorted}&t=${timestamp}`;
  const hmac = crypto.createHmac('sha256', secret);
  hmac.update(signStr);
  return hmac.digest('base64');
}

案例2:某视频网站加密参数破解

挑战:

  • 核心逻辑在WebAssembly中
  • 动态加载代码片段
  • 反调试保护

解决方案:

  1. 使用Memory断点定位关键数据
  2. 导出wasm模块进行静态分析
  3. 使用Emscripten生成C伪代码
  4. 发现核心是AES-CBC加密
  5. 通过XHR断点捕获动态密钥

七、法律与道德边界

  1. 合法合规逆向

    • 仅用于安全研究
    • 遵守网站robots.txt
    • 不绕过付费内容
    • 不侵犯用户隐私
  2. 风险规避

    • 控制请求频率
    • 使用合理User-Agent
    • 不传播逆向结果
    • 遵守DMCA规定
  3. 推荐实践

    • 优先使用官方API
    • 联系平台获取合作
    • 遵循数据最小化原则
    • 尊重知识产权

八、未来发展趋势

  1. Wasm的普及:更多核心逻辑转向WebAssembly
  2. AI辅助逆向:机器学习辅助代码分析
  3. 动态防护增强:运行时代码自修改技术
  4. 硬件级验证:WebAuthn等硬件绑定技术
  5. 联邦学习应用:分布式模型保护关键算法

结语

JS逆向工程是一项需要深厚技术积累的工作,涉及网络协议、加密算法、浏览器原理等多领域知识。随着Web技术的不断发展,逆向与防护的对抗将持续升级。技术人员应当以提升安全防御能力为目的,在法律和道德框架内合理应用这些技术。