从文本文件中读取并在 IDA Pro 中打印

逆向工程 艾达 C 编码
2021-06-27 06:22:38

我有一个text.txt文件,我想阅读它并在 IDA Pro(免费版)的输出窗口中打印其内容。

我写了一个 .idc 脚本如下:

#include <idc.idc>

static main() {
    auto fp;
    auto toPrint;

    fp = fopen("C:\Users\bob\text.txt", "r"); // fp is a file handle

    toPrint = fgetc(fp);

    Message("%s is the string\n", toPrint);

}

在此处输入图片说明

但它给了我一个unknown character如上所示。我也尝试使用toPrint = readstr(fp),但它不起作用。(相同的未知字符)

PS:我正在分析一个 32 位的 PE 文件。我无法使用 IDAPython,因为我使用的是 x64 免费版本,所以我不得不求助于 IDC。任何帮助表示赞赏。

1个回答

下面的变体对我有用。

static main() {
    auto fp;
    auto toPrint;
    fp = fopen("C:\\Users\\[cenzored]\\desktop\\text.txt", "r"); // fp is a file handle
    do {
        toPrint = readstr(fp);
         if (toPrint != -1)Message(toPrint);
    } while (toPrint != -1);
}

实际上,您的代码和工作变体之间存在 3 个差异:

  • 它使用readstr返回字符串
  • 它避免在 Message 函数中使用格式字符串(但Message("%s", toPrint)也可以)
  • 与正常 CI 一样,文件路径使用双斜杠(\\而不是\)。这可能是您的问题的最初原因:以单斜杠开头的符号被解释为转义序列,这意味着文件名被错误解释并且未打开。

您所做的方式使用fgetc也是不正确的,因为它返回 long 或字符,而不是字符串,并且 Message 函数可能将 is 解释为指针。我在 IDA 6.9 上检查了这个。在以后的版本中,为此通过value_is_string函数检测 EOF 可能更好