我发现从二进制文件中提取硬编码字符串是可能的。
例如,Process Explorer 的属性视图显示了所有长度超过 3 个字符的字符串。
以下是我编写的一个简单可执行文件的代码,用于测试:
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
_TCHAR* hiddenString1 =_T("4537774B-CC80-4eda-B3E4-7A9EE77991F5");
_TCHAR* hiddenString2 =_T("hidden_password_or_whatever");
for (int i= 0; i<argc; i++) {
if (0 == _tcscmp(argv[i],hiddenString1)) {
_tprintf (_T("The guid argument is correct.\n")); }
else if (0 == _tcscmp(argv[i],hiddenString2)) {
_tprintf (_T("Do something here.\n")); }
}
_tprintf (_T("This is a visible string.\n"));
//Keep Running
Sleep(60000);
return 0;
}
这些字符串可以从相应的可执行文件中清晰地提取出来:
我认为这样太容易发现了。
我的问题是:
- 如何简单地隐藏可执行文件中的hiddenString1或hiddenString2?
- 有没有比使用一些隐秘输入更安全的“作弊码”使用方式?