【发布时间】:2021-09-01 20:48:01
【问题描述】:
如标题所示,我需要开发一个 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();
}
【问题讨论】:
-
怀疑您可以以任何可靠的方式对所有可能的可执行文件执行此操作。为什么需要这样做?基本目标是什么?
-
如果您的目标是在二进制文件中查找给定的字符串,而您的代码无法正常工作,那么这就是 Stack Overflow 的主题。
-
99% 的问题可以通过“是叫 putty.exe 还是 ssh.exe?”来解决。剩下的 1% 可能包括加密的可执行文件,如果不运行它们,你就无法知道它们做了什么(并且使用一些调试器和 VM 检测技术甚至可能还没有)。