关于网易闪电邮的逆向
字数 1306 2025-08-18 11:39:19

网易闪电邮逆向分析与批量导入实现

前言

本文档详细记录了网易闪电邮客户端的逆向分析过程,重点讲解了如何通过逆向工程实现批量导入邮箱账号和自动接收邮件功能。文档基于对网易闪电邮客户端主程序FlashMail.exe及其相关模块(Mail.dll和Common.dll)的逆向分析。

一、逆向环境准备

  1. 调试工具选择

    • 使用OllyDbg(OD)作为主要调试工具
    • 使用IDA Pro进行静态分析
  2. 绕过调试检测

    • 主程序FlashMail.exe启动时会检测调试器
    • 在OD中定位MessageBox调用点并跳过
    • 直接调试FlashMail.exe而非启动器Start.exe

二、邮件接收功能分析

  1. 关键模块定位

    • 主功能模块为Mail.dll
  2. 接收邮件断点定位

    • 通过观察接收邮件时写入的日志文件(in.mbox)定位关键点
    • 在WriteFile函数下断点捕获邮件接收过程
  3. 关键特征识别

    • 当EBX=9时表示正在处理新邮件
    • 关键信息在堆栈中的位置:
      • 接收邮箱: ESP - 0x2A4
      • 邮箱密码: ESP - 0x29C (BASE64加密)
      • 邮件发送邮箱: ESP - 0x4E0 (包含邮箱昵称)
      • 邮件标题: ESP - 0x4DC
      • 邮件内容: ESP - 0x4A0
  4. 邮件内容解析

    • 查找特定字符串标识内容开始:
      Content-Type: image/png; name="icon_warm.png"
      Mime-Version: 1.0
      
    • 结束标识:-- (前面有换行符)
    • 处理步骤:
      1. 去除所有{0xD,0xA}换行符
      2. 对内容进行BASE64解密

三、批量导入账号实现

1. 用户目录结构分析

  • 用户配置存储在特定目录中
  • 关键文件:
    • .cfg文件:SQLite3数据库格式,存储账户基本信息
    • indx文件:必须存在但可以为空文件

2. 密码加密机制分析

密码存储在.cfg文件中,加密过程如下:

  1. 初始加密:看似BASE64但实际无法直接解密
  2. 二次加密:通过Common.dll中的CommCalc方法处理
  3. 加密细节
    • 使用AES加密
    • 密钥固定为:
      0xF7,0x1E,0x19,0x18,0xFA,0x2E,0x26,0x25,
      0x10,0x4D,0x40,0x3F,0x10,0x8B,0x73,0x74
      
    • 加密后结果再进行BASE64编码

3. CommCalc函数逆向分析

int CommCalc(char *a1, int a2) {
    // 变量声明和初始化
    int v2 = a1[5];
    if (v2 % 16 > 0) {
        v2 += 16 - v2 % 16;
    }
    
    // 内存分配
    unsigned __int8 *v4 = (unsigned __int8 *)operator new[](v2 + 1);
    unsigned __int8 *v17 = (unsigned __int8 *)operator new[](v2 + 1);
    memset(v4, 0, v2 + 1);
    memset(v17, 0, v2 + 1);
    
    // 数据拷贝
    memcpy(v4, a1[6] < 0x10u ? (a1 + 1) : &a1[1], a1[5]);
    
    // 密钥处理
    char v27[32] = {0};
    strncpy(v27, v32, 0x20u);
    
    // 密钥转换
    int v6 = 0;
    char *v7 = v27;
    do {
        // 复杂的密钥转换逻辑
        // 包括十六进制字符到二进制数据的转换
    } while (v6 < 16);
    
    // AES加密
    // 使用固定密钥进行AES-128加密
    
    // BASE64编码
    base64_encode();
    
    // 结果存储到SQLite数据库
}

4. 批量导入实现步骤

  1. 创建必要的用户目录结构
  2. 构建.cfg文件(SQLite3数据库)
  3. 对密码进行加密处理:
    • 使用固定AES密钥加密
    • 对加密结果进行BASE64编码
  4. 创建必要的空indx文件

四、自动化实现方案

  1. HOOK方案

    • 通过注入DLL或代码HOOK关键函数
    • 监控邮件接收事件
    • 自动处理新邮件内容
  2. 批量导入方案

    • 直接构造用户目录和配置文件
    • 确保密码加密过程正确
    • 验证账户可正常登录

五、关键注意事项

  1. 调试技巧

    • 关注文件操作(WriteFile)作为切入点
    • 注意堆栈中关键信息的位置偏移
  2. 加密处理

    • 确保AES加密使用正确的固定密钥
    • 加密后必须进行BASE64编码
  3. 文件结构

    • .cfg文件必须包含所有必要字段
    • indx文件必须存在但可以为空

六、总结

通过逆向分析网易闪电邮客户端,我们成功实现了:

  1. 邮件接收过程的监控和内容提取
  2. 批量账户导入功能
  3. 密码加密机制的破解和重现

这种方法可以应用于类似邮件客户端的自动化处理场景,为批量操作和邮件内容自动化处理提供了可行方案。

网易闪电邮逆向分析与批量导入实现 前言 本文档详细记录了网易闪电邮客户端的逆向分析过程,重点讲解了如何通过逆向工程实现批量导入邮箱账号和自动接收邮件功能。文档基于对网易闪电邮客户端主程序FlashMail.exe及其相关模块(Mail.dll和Common.dll)的逆向分析。 一、逆向环境准备 调试工具选择 : 使用OllyDbg(OD)作为主要调试工具 使用IDA Pro进行静态分析 绕过调试检测 : 主程序FlashMail.exe启动时会检测调试器 在OD中定位MessageBox调用点并跳过 直接调试FlashMail.exe而非启动器Start.exe 二、邮件接收功能分析 关键模块定位 : 主功能模块为Mail.dll 接收邮件断点定位 : 通过观察接收邮件时写入的日志文件(in.mbox)定位关键点 在WriteFile函数下断点捕获邮件接收过程 关键特征识别 : 当EBX=9时表示正在处理新邮件 关键信息在堆栈中的位置: 接收邮箱: ESP - 0x2A4 邮箱密码: ESP - 0x29C (BASE64加密) 邮件发送邮箱: ESP - 0x4E0 (包含邮箱昵称) 邮件标题: ESP - 0x4DC 邮件内容: ESP - 0x4A0 邮件内容解析 : 查找特定字符串标识内容开始: 结束标识: -- (前面有换行符) 处理步骤: 去除所有 {0xD,0xA} 换行符 对内容进行BASE64解密 三、批量导入账号实现 1. 用户目录结构分析 用户配置存储在特定目录中 关键文件: .cfg 文件:SQLite3数据库格式,存储账户基本信息 indx 文件:必须存在但可以为空文件 2. 密码加密机制分析 密码存储在.cfg文件中,加密过程如下: 初始加密 :看似BASE64但实际无法直接解密 二次加密 :通过Common.dll中的CommCalc方法处理 加密细节 : 使用AES加密 密钥固定为: 加密后结果再进行BASE64编码 3. CommCalc函数逆向分析 4. 批量导入实现步骤 创建必要的用户目录结构 构建.cfg文件(SQLite3数据库) 对密码进行加密处理: 使用固定AES密钥加密 对加密结果进行BASE64编码 创建必要的空indx文件 四、自动化实现方案 HOOK方案 : 通过注入DLL或代码HOOK关键函数 监控邮件接收事件 自动处理新邮件内容 批量导入方案 : 直接构造用户目录和配置文件 确保密码加密过程正确 验证账户可正常登录 五、关键注意事项 调试技巧 : 关注文件操作(WriteFile)作为切入点 注意堆栈中关键信息的位置偏移 加密处理 : 确保AES加密使用正确的固定密钥 加密后必须进行BASE64编码 文件结构 : .cfg文件必须包含所有必要字段 indx文件必须存在但可以为空 六、总结 通过逆向分析网易闪电邮客户端,我们成功实现了: 邮件接收过程的监控和内容提取 批量账户导入功能 密码加密机制的破解和重现 这种方法可以应用于类似邮件客户端的自动化处理场景,为批量操作和邮件内容自动化处理提供了可行方案。