识别可移植可执行文件是否是 ssh 客户端应用程序

问题描述 投票:0回答:2

如标题所示,我需要开发一个 C++ 程序来识别

.exe
文件是否是 ssh 客户端应用程序。我做了一些研究,但我的头脑并不清楚,这些解决方案中的哪些可能适用于这个问题:

我是否已解析引用可移植可执行文件格式的 .exe,或者只是读取二进制文件并检查特定的“客户端 ssh 应用程序事物”。

ssh 客户端应用程序与其他应用程序有何不同,它们的独特特征是什么,可以帮助我区分或指出它们。显示原始二进制文件的简单、幼稚的解决方案将由下面的代码表示。现在有人说在这个数据上搜索单词“ssh”(这意味着我可以在字符串上应用正则表达式模式并找到 ssh 旁边的任何内容)。还有其他方法可以解决这个问题吗?

int main(int argc, char* argv[])
{
    std::ifstream fs;

    fs.open(argv[0], std::ios::binary);
    if (fs.fail())
    {
        std::cerr << "Failed to open file!" << std::endl;
        return 0;
    }

    fs.seekg(0, std::ios::end);
    std::size_t index = fs.tellg();

    char* buff = new char[index];
    fs.seekg(0, std::ios::beg);
    fs.read(buff, index);
    fs.close();

    std::string s;
    s.assign(buff, index);
    delete[] buff;

    std::cout << s;

    std::cin.ignore();
}
c++ ssh
2个回答
0
投票

根据赖斯定理,查看程序并自动找出程序是否执行某项操作是“不可能”的。这就是为什么病毒扫描程序如此复杂且并不总是准确的原因。 您可能会查找字符串“ssh”,但是如果有人不想让您知道他们的程序是 SSH 客户端程序,那么它会存储字符串“tti!dmjfou”,然后在以下情况下从所有 ASCII 代码中减去 1:你运行它吗?


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.