某加速器配置信息解密
字数 1317 2025-08-29 22:41:24

加速器配置文件解密逆向分析教学文档

1. 背景与需求分析

1.1 背景介绍

  • 目标样本是一款被用于非法翻墙活动的加速器软件
  • 软件对存储的连接服务器地址、更新源及访问站点信息进行了加密
  • 需要破解加密机制以获取真实服务器信息用于防控和取证

1.2 任务目标

  1. 定位解密服务器信息的关键反汇编代码段
  2. 还原解密算法的高级语言等价源码
  3. 使用还原算法解密密文配置文件获取服务器地址

2. 分析思路与工具选型

2.1 分析思路

  • 使用OllyDbg动态调试工具
  • 监控Windows API调用,重点关注文件读取和内存访问
  • 配合断点调试逐步定位解密算法实现

2.2 工具资源

  • OllyDbg下载地址: https://tool.kanxue.com/index-detail-1.htm
  • 目标样本和API文档: https://drive.google.com/drive/folders/1HNGdEGAcJgMc6dCoI_aFDNdSmsMhqFob

3. 信息收集

3.1 目标样本特征

  • 加速器软件,对代理服务器地址进行加密
  • 目标目录下发现加密文件: system.ini等

3.2 关键API函数

API函数名 作用 调试意义
CreateFileA 打开system.ini文件 确定加密数据来源
ReadFile 读取密文至缓冲区 跟踪密文数据流向
WriteFile (可选)加密写回 判断是否为自修改型程序

4. 逆向分析过程

4.1 定位输入文件

  1. 用OllyDbg打开程序
  2. 搜索CreateFile调用
  3. 找到KERNEL32.CreateFileA调用点
  4. 查看函数参数:
    • lpFileName: "system.ini"
    • dwDesiredAccess: GENERIC_READ
    • dwCreationDisposition: OPEN_EXISTING

4.2 定位解密函数

  1. 获取文件句柄(0x20c)
  2. 跟踪句柄存储地址(0x00185690)
  3. 发现句柄被放入ecx寄存器并传递给后续函数

4.3 解密函数分析

  1. 函数内部调用ReadFile:
    • 读取system.ini内容到缓冲区(0x001857C8)
  2. 对内存区域设置访问断点
  3. 跟踪数据调用过程
  4. 发现密文被解密的过程

4.4 精准定位解密代码

  1. 计算密文长度的指令:

    mov eax, [ebp+arg_0]
    mov ecx, [eax]
    mov edx, [ecx+4]
    mov eax, edx
    
    • 结果保存在eax中
  2. 解密循环特征:

    • 逐字节处理密文
    • 处理后数据区域部分内容变为明文

5. 解密算法还原

5.1 算法分析

  • 采用逐字节异或与加法混合操作
  • 加密强度较低但具有一定迷惑性

5.2 高级语言代码还原

void decrypt(unsigned char* data, int length) {
    for(int i = 0; i < length; i++) {
        data[i] = (data[i] ^ 0x55) + 0x10;
    }
}

5.3 验证过程

  1. 读取密文数据与原始文件一致
  2. 解密后明文与预期结果一致
  3. 完整程序运行成功提取服务器信息

6. 完整解密程序实现

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void decrypt(unsigned char* data, int length) {
    for(int i = 0; i < length; i++) {
        data[i] = (data[i] ^ 0x55) + 0x10;
    }
}

int main() {
    HANDLE hFile = CreateFileA("system.ini", GENERIC_READ, FILE_SHARE_READ, 
                              NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(hFile == INVALID_HANDLE_VALUE) {
        printf("Failed to open file\n");
        return 1;
    }
    
    DWORD fileSize = GetFileSize(hFile, NULL);
    unsigned char* buffer = (unsigned char*)malloc(fileSize);
    
    DWORD bytesRead;
    if(!ReadFile(hFile, buffer, fileSize, &bytesRead, NULL)) {
        printf("Failed to read file\n");
        CloseHandle(hFile);
        return 1;
    }
    
    decrypt(buffer, fileSize);
    
    printf("Decrypted content:\n%s\n", buffer);
    
    free(buffer);
    CloseHandle(hFile);
    return 0;
}

7. 结论

  1. 成功定位并分析了目标样本的加密配置文件读取与解密流程
  2. 通过动态调试明确了程序调用关键API的时机与行为
  3. 识别出解密算法为逐字节异或与加法混合操作
  4. 还原算法并编写解密工具成功提取服务器地址等敏感信息
  5. 为网络审查和取证工作提供了技术支撑
加速器配置文件解密逆向分析教学文档 1. 背景与需求分析 1.1 背景介绍 目标样本是一款被用于非法翻墙活动的加速器软件 软件对存储的连接服务器地址、更新源及访问站点信息进行了加密 需要破解加密机制以获取真实服务器信息用于防控和取证 1.2 任务目标 定位解密服务器信息的关键反汇编代码段 还原解密算法的高级语言等价源码 使用还原算法解密密文配置文件获取服务器地址 2. 分析思路与工具选型 2.1 分析思路 使用OllyDbg动态调试工具 监控Windows API调用,重点关注文件读取和内存访问 配合断点调试逐步定位解密算法实现 2.2 工具资源 OllyDbg下载地址: https://tool.kanxue.com/index-detail-1.htm 目标样本和API文档: https://drive.google.com/drive/folders/1HNGdEGAcJgMc6dCoI_ aFDNdSmsMhqFob 3. 信息收集 3.1 目标样本特征 加速器软件,对代理服务器地址进行加密 目标目录下发现加密文件: system.ini等 3.2 关键API函数 | API函数名 | 作用 | 调试意义 | |-----------|------|----------| | CreateFileA | 打开system.ini文件 | 确定加密数据来源 | | ReadFile | 读取密文至缓冲区 | 跟踪密文数据流向 | | WriteFile | (可选)加密写回 | 判断是否为自修改型程序 | 4. 逆向分析过程 4.1 定位输入文件 用OllyDbg打开程序 搜索CreateFile调用 找到KERNEL32.CreateFileA调用点 查看函数参数: lpFileName: "system.ini" dwDesiredAccess: GENERIC_ READ dwCreationDisposition: OPEN_ EXISTING 4.2 定位解密函数 获取文件句柄(0x20c) 跟踪句柄存储地址(0x00185690) 发现句柄被放入ecx寄存器并传递给后续函数 4.3 解密函数分析 函数内部调用ReadFile: 读取system.ini内容到缓冲区(0x001857C8) 对内存区域设置访问断点 跟踪数据调用过程 发现密文被解密的过程 4.4 精准定位解密代码 计算密文长度的指令: 结果保存在eax中 解密循环特征: 逐字节处理密文 处理后数据区域部分内容变为明文 5. 解密算法还原 5.1 算法分析 采用逐字节异或与加法混合操作 加密强度较低但具有一定迷惑性 5.2 高级语言代码还原 5.3 验证过程 读取密文数据与原始文件一致 解密后明文与预期结果一致 完整程序运行成功提取服务器信息 6. 完整解密程序实现 7. 结论 成功定位并分析了目标样本的加密配置文件读取与解密流程 通过动态调试明确了程序调用关键API的时机与行为 识别出解密算法为逐字节异或与加法混合操作 还原算法并编写解密工具成功提取服务器地址等敏感信息 为网络审查和取证工作提供了技术支撑