我正在制作一个Flash程序,可以在收到付款后在一台计算机上下载和解锁。为此,我想为计算机创建一个UUID,可以检查以确保该程序没有被移动到另一台计算机,但我不知道有任何方法可以访问有关计算机的足够信息来制作它唯一可识别(甚至接近)。
我还考虑过用不同语言编写的单独程序可以访问这些信息,但我不知道我是否可以从Flash运行它。
对原始问题的任何想法或替代解决方案将不胜感激。
答案 0 :(得分:4)
您可以创建一个小的外部EXE(在AIR中),它将运行本机命令并检索有关个人计算机的特定信息。有关源代码,请参阅我的答案:
例如,在Windows上你可以用C ++编写一个exe(使用eclipse和mingw而不是微软的C ++,除非你想用你的exe重新分发.net)。只需使用系统命令:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() {
std::cout << system("wmic csproduct") << std::endl;
return 0;
}
输出这个:
Caption Description IdentifyingNumber Name SKUNumber UUID Vendor Version
Computer System Product Computer System Product OEM OEM 00000000-0000-0000-0807-XXXXXXXXXX(Hidden cause it's mine :D) OEM OEM 0
根据microsoft,此命令返回本地计算机唯一的S / N.如果这不能令人满意,你可以随时获得一个计算机分区序列号,你只需要谷歌就可以了。
无论如何,无论你使用什么,只需要做到这一点,当用户第一次注册时,需要使用此信息,使用AS3CoreLib加密包将其处理成摘要(可能使用SHA256类转换为哈希),然后发送该数据连同服务器及其注册信息。每当他们启动应用程序时,只需让应用程序连接到服务器并重新运行此命令,将新哈希值(启动时)与服务器上保存的哈希值进行比较,如果它们不匹配,则表示他们已将其移动到另一台计算机上或将其送去盗版。来源:
http://support.microsoft.com/kb/558124
http://www.cplusplus.com/reference/clibrary/cstdlib/system/
https://github.com/mikechambers/as3corelib/tree/master/src/com/adobe/crypto