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