我使用visual studio 2015开发了一个c ++项目。我的项目的输出是一个可执行文件,每个客户端必须有一个唯一的ID,并且该ID必须可以在代码中访问。一个简单的方法是在代码中定义一个常量变量,并为每个客户端更改其值并构建它多次,但我有一个Linux服务器,我不确定我是否可以构建它只是因为我使用了很多Winapi库。我在想,也许还有另一种方法可以改变输入或为输出添加一些常量值,就像操作可执行文件一样。 例如:
#include <string>
#include <iostream>
#include <Windows.h>
const std::string ID = "some unique ID";
int main() {
std::cout << "Your ID: " << ID << std::endl;
getchar();
return(0);
}
答案 0 :(得分:1)
在程序的init函数中。生成基于SHA-1的唯一ID 当前时间的哈希值,IP地址,用户名(同样更多)。你可以随后在该程序中做任何你想做的事情(即保存在数据库中)。那会有用吗?
答案 1 :(得分:1)
似乎只有两种方法。一种是在Linux环境中构建项目,这是一种更好的方法,但必须使用一些工具,如Mono XBuild
link here。
另一种可能更简单的选择就是打开二进制文件并操纵特定的字符串。正如@aloMalbarez评论这是一个基于this的简单脚本。
假设这个例子:(我使用50 m
作为我的ID的固定长度
#include <string>
#include <iostream>
#include <Windows.h>
#define ID "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
using namespace std;
int main() {
cout << "Your ID: " << ID << "\nlen:" << strlen(ID) << endl;
getchar();
return(0);
}
生成可执行文件后,使用以下脚本创建输出。
我不是Linux人,所以你可以帮我改进这个。
./build.sh input.exe output.exe "myfixedID"
#!/bin/bash
# build.sh input_file output_file <ID>
input_file=$1
output_file=$2
ID=$3
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
echo "wrong parameters"
echo "build.sh input_file output_file <ID>"
exit 1
fi
# use fixed string (ID) in the source file
# this creates 50 of "m"s
search_value=$(printf 'm%.0s' {1..50})
extension=".back"
temp_file="$input_file$extension"
tmpstring_file="./tmp"
null_termin='\0'
echo "copying the original file..."
yes | cp -rf $input_file $temp_file
address=$(strings -t d $temp_file | grep $search_value | grep -o '[0-9]*')
echo "Address:"
echo $address
if ! [[ $address =~ ^[0-9]+$ ]]; then
echo "cannot find valid ID in executable"
echo "removing temps"
rm $temp_file
exit 1
fi
# make the tempstring file
printf "$ID$null_termin" > $tmpstring_file
dd if=$tmpstring_file of=$temp_file obs=1 seek=$address conv=notrunc
echo "make new file"
yes | cp -rf $temp_file $output_file
echo "removing temps"
rm $temp_file $tmpstring_file
echo "Done!"
答案 2 :(得分:-4)
常量不是变量,它们是相反的类型。常量是一个元素,它被赋予一个不会改变的特定值,因此单词常量不变 另一方面,变量是一个存储在内存中作为可变值的元素,当程序运行时,VARIABLE可以改变它的当前值。
在Visual Studio中,您可以创建一个配置文件,将设置值传递给您的程序,这些值是可变的,并且可以通过编程和手动更改。但是,正如您所说,您不希望单独的文件从中查找信息。
如果您想按用户ID跟踪用户,那么您必须拥有可以记录新用户并发布唯一ID的数据库,或者您可以根据帐户的日期和时间创建唯一ID如果要为每个创建唯一的可执行文件,则创建日期/时间信息包含在文件创建信息中,因此您只需使用它,因为每个文件都是在唯一的日期/时间创建的,这始终表示ID。您可以为每个文件保留相同的名称,或将日期/时间合并到文件名中,例如myPro20180522183231.exe,这将是2018年05月22日22分32秒31,这可以通过日期/时间信息确认文件创建数据。