mcpField
D
deobf-string

deobf-string

github.com/p4nda0s安全140100 次安装23 周前更新
代码仓库

关于 deobf-string

deobf-string 是用于从代码或二进制文件中还原加密字符串的逆向分析技能。它通过 IDA Pro MCP 检查解密例程,再引导选择 Python 实现或 Unicorn 仿真。

主要功能

  1. 01识别加密字符串模式
  2. 02通过 IDA Pro MCP 检查解密例程
  3. 03推断算法与参数
  4. 04用 Python 解密简单算法
  5. 05用 Unicorn 仿真复杂例程
  6. 06按地址展示解密字符串

适用场景

  1. 01还原混淆二进制文件中的字符串
  2. 02分析 XOR 或替换式字符串加密
  3. 03仿真依赖运行时状态的解密过程
  4. 04在修补前检查解密结果

MCP 相关

该技能需要连接 IDA Pro MCP 来检查并反编译解密函数,并在分析开始前确认连接状态。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/p4nda0s/bin-deobf-skills --skill deobf-string

安装后在 Claude Code 中输入/deobf-string确认已加载。

详细介绍

解密字符串

前提条件

开始分析前,请检查 IDA Pro MCP 是否已连接。使用 MCP 工具验证连接。如果 IDA Pro MCP 不可用,请告知用户:

IDA Pro MCP 未连接。请打开已加载 MCP 插件的 IDA Pro,并确保 MCP 服务正在运行,然后重试。

工作流

第 1 步:识别加密字符串

分析用户提供的代码片段或函数,识别字符串加密模式:

  • 查找看起来像加密字符串的字节数组或数据引用
  • 识别解密例程(通常在字符串使用处调用)
  • 通过逆向分析解密函数,确定加密算法

常见模式:

  • 使用单字节或密钥数组进行异或
  • 自定义替换密码
  • RC4 或其他流密码
  • Base64 + 异或组合
  • 通过算术变换在栈上构造字符串
第 2 步:分析解密例程

使用 IDA Pro MCP 来:

  • 反编译解密函数
  • 识别参数:加密数据指针、长度、密钥
  • 确定算法类型和复杂度
第 3 步:选择解密策略

简单算法(纯计算,无外部依赖):

  • 单字节或多字节异或
  • ADD/SUB/ROT 变换
  • 简单查找表

→ 编写独立的 Python 脚本进行解密。

复杂算法(依赖状态、使用库函数或难以重新实现):

  • 多轮自定义加密
  • 解密依赖运行时状态或全局变量
  • 算法本身经过高度混淆

→ 使用 Unicorn Engine 直接从二进制文件中模拟解密函数。

第 4 步:实现解密
简单解密(Python 脚本):
def decrypt_string(enc_bytes, key):
    # Example: XOR decryption
    return bytes([b ^ key[i % len(key)] for i, b in enumerate(enc_bytes)])
复杂解密(Unicorn 模拟):
from unicorn import *
from unicorn.arm64_const import *

def emulate_decrypt(binary_path, func_addr, enc_data, enc_len, key_ptr):
    with open(binary_path, 'rb') as f:
        code = f.read()

    mu = Uc(UC_ARCH_ARM64, UC_MODE_LITTLE_ENDIAN)
    # Map code segment
    mu.mem_map(base_addr, align(len(code)))
    mu.mem_write(base_addr, code)
    # Map stack
    mu.mem_map(stack_base, stack_size)
    mu.reg_write(UC_ARM64_REG_SP, stack_top)
    # Set up arguments (AArch64 calling convention)
    mu.reg_write(UC_ARM64_REG_X0, enc_data_addr)
    mu.reg_write(UC_ARM64_REG_X1, enc_len)
    mu.reg_write(UC_ARM64_REG_X2, key_addr)
    # Emulate
    mu.emu_start(func_addr, func_end)
    # Read decrypted result
    result = mu.mem_read(output_addr, enc_len)
    return bytes(result)
第 5 步:输出结果

解密后,向用户展示结果:

  1. 以表格形式显示解密后的字符串及其地址:
Address      | Decrypted String
-------------|------------------
0x00412000   | "Hello, World!"
0x00412020   | "/dev/null"
  1. 询问用户是否要生成补丁文件:

解密完成。是否要将结果写入 .patched 文件,以替换二进制文件中的加密字符串?

如果用户同意,请生成一个已打补丁的二进制文件,将加密字节替换为明文(以空字符结尾),并保存为 <original_name>.patched。

评论

支持 Markdown