You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux上读取Windows DLL中指定ID的字符串(类WinAPI LoadString)

在Linux上分析Windows DLL字符串资源的可行方法

核心思路

Windows DLL属于PE格式文件,Linux上可借助PE解析工具提取其中的字符串资源,无需依赖Windows API。


方法一:使用GNU binutils工具链(wrestool + msgfmt)

  • 先安装依赖工具:
    Debian/Ubuntu系:sudo apt install binutils-mingw-w64 icu-devtools
    RHEL/CentOS系:sudo yum install mingw-binutils icu
  • 将Windows上的目标DLL(如sensrsvc.dll)复制到Linux服务器,注意匹配架构(32位/64位)
  • 提取字符串资源(资源类型14对应RT_STRING):
    wrestool -x --type=14 sensrsvc.dll > resource.bin
    
  • 将二进制资源转换为可读文本:
    msgfmt --output-file=- resource.bin | msgunfmt
    
  • 直接组合命令输出结果:
    wrestool -x --type=14 sensrsvc.dll | msgfmt --output-file=- - | msgunfmt
    
    输出结果中可根据目标ID(如1001)找到对应字符串。

方法二:基于Python的pe-tools脚本解析

  • 安装依赖库:
    pip install pefile
    
  • 编写简单脚本定位目标ID字符串:
    import pefile
    
    def get_string_from_dll(dll_path, target_id):
        pe = pefile.PE(dll_path)
        for res in pe.DIRECTORY_ENTRY_RESOURCE.entries:
            if res.id == pefile.RESOURCE_TYPE['RT_STRING']:
                for entry in res.directory.entries:
                    for sub_entry in entry.directory.entries:
                        rva = sub_entry.data.struct.OffsetToData
                        size = sub_entry.data.struct.Size
                        data = pe.get_data(rva, size)
                        block_id = sub_entry.id
                        base_id = (block_id - 1) * 16
                        string_list = pefile.LANG_STRING(data).strings
                        for idx, s in enumerate(string_list):
                            current_id = base_id + idx + 1
                            if current_id == target_id:
                                print(f"ID {target_id}: {s}")
        pe.close()
    
    if __name__ == "__main__":
        get_string_from_dll("sensrsvc.dll", 1001)
    
  • 运行脚本即可直接获取目标ID对应的字符串。

方法三:使用Ghidra可视化逆向工具

  • 安装Ghidra后启动,导入目标DLL
  • 打开Window -> Resource Manager,在资源树中展开String Table,即可查看所有语言版本的字符串资源,定位目标ID内容。

注意事项

  • 确保复制的DLL与原Windows系统架构一致(x86/x64),否则工具可能解析失败
  • 部分DLL包含多语言字符串资源,需根据需求选择对应语言ID(如0x0409为英文、0x0804为中文)

内容的提问来源于stack exchange,提问作者typeryougishiki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:22:25