-
-
[IDA使用技巧]#013: 字符串文本和自定义编码
-
发表于:
2024-4-15 13:44
3956
-
[IDA使用技巧]#013: 字符串文本和自定义编码
翻译:梦幻的彼岸
原文地址:https://hex-rays.com/blog/igor-tip-of-the-week-13-string-literals-and-custom-encodings/
大多数 IDA 用户可能会分析使用英语或其他拉丁字母的软件。因此,用于字符串文本的默认值(Windows 上的操作系统系统编码和 Linux 或 macOS 上的 UTF-8)通常已经足够好了。不过,偶尔也会遇到使用其他语言的程序。
Unicode 字符串
如果程序使用宽字符串,通常只需在创建字符串文本时使用相应的 "Unicode C-style "选项即可:
一般来说,Windows 程序倾向于使用 16 位宽字符串(wchar_t为 16 位),而 Linux 和 Mac 则使用 32 位字符串(wchar_t为 32 位)。不过,也有例外情况,您可以根据所分析的特定二进制文件使用其中一种。
提示:您可以使用加速器快速创建特定字符串类型,例如 Alt + A,U 表示 Unicode 16 位。
自定义编码
在某些情况下,被分析的二进制文件使用的编码可能与 IDA 选定的编码不同,甚至在同一文件中存在多个互不兼容的编码。在这种情况下,你可以为单个字符串文本分别设置编码,或者为所有新字符串全局设置编码。
添加新编码
在默认列表中添加自定义编码(通常为 UTF-8、UTF-16LE 和 UTF-32LE):
- Options > String literals… (Alt + A);
- 单击“Currently:”旁边的按钮;
- 在上下文菜单中, “Insert…” (Ins);
- 指定编码名称
编码名称可以使用
- Windows 代码页(如 866、CP932、windows-1251)
- 知名字符集名称(如 Shift-JIS、UTF-8、Big5)
在 Linux 或 macOS 上,运行 iconv -l查看可用编码。
注意:并非所有系统都支持某些编码,因此你的 IDB 可能会因系统而异。
使用特定字符串文本的编码
- Invoke Options > String literals… (Alt + A);
- 单击“Currently:”旁边的按钮;
- 选择要使用的编码;
- 如果创建一个新文本,请单击特定字符串按钮(如C-Style);如果修改现有文本,请单击 "OK"。
为所有新字符串文本设置默认编码
- Invoke Options > String literals… (Alt + A);
- 单击 “Manage defaults”;
- 单击“Default 8-bit”旁边的按钮,选择要使用的编码
从现在起,快捷键 A 将使用新的默认编码创建字符串文本,但您仍可以根据具体情况覆盖它,如上所述。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!