- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,我研究了使用 OnGuard 来帮助诚实的人遵守他们的原则。我同意这里许多人表达的观点,即任何许可制度都无法保护您免受那些想要使用您的软件但不想付费的人的侵害。另一方面,我希望避免让其他人太容易为我的程序创建有效 key 。
学习手册和示例后,我将以下内容添加到主表单的代码中:
const
TheKey: TKey = ($4A,$62,$F3,$2B,$9C,$D2,$84,$BF,$CB,$04,$0A,$C3,$3D,$11,$47,$1A);
function TfrmMain1.MakeCode(sName, sNumber: String; dtExpiration: TDate): String;
var Key: TKey;
Code: TCode;
sCode: String;
begin
Key := TheKey;
InitRegCode(Key, sName + ' - ' + sNumber, dtExpiration, Code);
sCode := BufferToHex(Code, SizeOf(Code));
Insert('-', sCode, 13);
Insert('-', sCode, 09);
Insert('-', sCode, 05);
Result := sCode
end;
function TfrmMain1.TestCode(sName, sNumber, sTestCode: String; dtExpiration: TDate): Boolean;
var Key: TKey;
Code: TCode;
sCode: String;
begin
sCode := MakeCode(sName, sNumber, dtExpiration);
Result := SameText(sCode, sTestCode);
end;
这提出了一些问题:
这看起来是正确的使用方法吗?我宁愿不将他们的组件添加到我的表单中。
既然 OnGuard 源代码可用,黑客就不能对我将选择的 key 进行逆向工程并生成有效的发布代码吗?因此,我是否应该在代码中添加一些额外的混淆,或者我可能会削弱系统。
此处将 key 设置为常量。它不会在代码中显示为连续字节并且易于复制吗?
我的程序将需要(至少)年度更新,并且我的计划是通过年度订阅来获得许可。在我的程序中添加年份作为常量,并在一些地方针对该年份测试带日期的用户条目会不会更好。
这里有 4 个密切相关且非常具体的问题。似乎在四个单独的条目中询问这些内容会更尴尬,并且必须添加上下文引用,但如果这样做更好的话,我会很高兴这样做。感谢您的帮助。
jack
最佳答案
constructor TLincenceManager.Create;
begin
FSpecialCode := TOgSpecialCode.Create(nil);
FSpecialCode.OnGetModifier := OgNetCodeGetModifier;
FSpecialCode.OnChecked := OgNetCodeChecked;
FSpecialCode.OnGetCode := OgNetCodeGetCode;
FSpecialCode.OnGetKey := OgNetCodeGetKey;
FSpecialCode.AutoCheck := False;
end;
function TLincenceManager.InitializeLicenceCode: Boolean;
begin
Result := FSpecialCode.CheckCode(True) = ogValidCode;
end;
procedure TLincenceManager.OgNetCodeChecked(Sender: TObject; Status: TCodeStatus);
begin
case Status of
ogValidCode : FMaxUsers := FSpecialCode.GetValue;
ogInvalidCode : FMaxUsers := 0;
ogPastEndDate : FMaxUsers := 0;
ogDayCountUsed : FMaxUsers := 0;
ogRunCountUsed : FMaxUsers := 0;
ogNetCountUsed : FMaxUsers := 0;
ogCodeExpired : FMaxUsers := 0;
else
FMaxUsers := 0;
end;
end;
procedure TLincenceManager.OgNetCodeGetCode(Sender: TObject; var Code: TCode);
var
FileName: string;
SerialData: string;
LicenceData: TStringList;
begin
FileName := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
FileName := FileName + cLicenseFileName;
SerialData := '';
LicenceData := TStringList.Create;
try
if FileExists(FileName) then
begin
LicenceData.LoadFromFile(FileName);
SerialData := LicenceData.Values['Serial'];
end;
{convert to proper form}
HexToBuffer(SerialData, Code, SizeOf(Code));
finally
LicenceData.Free;
end;
end;
procedure TLincenceManager.OgNetCodeGetKey(Sender: TObject; var Key: TKey);
const
CKey : TKey = ($4A,$62,$F3,$2B,$9C,$D2,$84,$BF,$CB,$04,$0A,$C3,$3D,$11,$47,$1A);
begin
Key := CKey;
end;
procedure TLincenceManager.OgNetCodeGetModifier(Sender: TObject; var Value: Integer);
begin
Value := GenerateMachineModifierPrim;
end;
我已经发布了我的做法。我不使用“视觉”组件。我这样做的方式就是要走的路,在你的情况下,你只需应用日期修饰符(我有机器修饰符)
理论上不会。您生成许可证所用的 key 至关重要。如果你有 key ,你就可以破解许可证。但只用代码你不能。这就像加密算法一样。你可以知道算法是如何工作的,但如果你没有 key ,你就无法破解它。看XTEA 。它非常简单但很难破解。
是的,如果知道在做什么,就可以从二进制文件中提取 key 。您可以在这里使用某种混淆。但我不会打扰。对于大多数人来说这样的保护就足够了,所以如果你不制作下一个 MS Office 我不会打扰。人们对他们的产品非常偏执。先卖掉再说吧。哦,因为它不是一个字符串,所以无论如何都很难找到。
只需查看 onGuard 附带的计时演示即可了解如何获得限时许可证。但请注意,只需简单地操作计算机时钟就足以愚弄它。在我看来,最好的试用软件就是这样,缺乏一些重要的功能(保存按钮......)。在我看来,好的计时赛很难做到。
关于delphi - OnGuard 许可,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4349165/
我正在设计一款支持签到的应用。 使用应用程序时的 GPS 权限是必须。但是有一个使用地理围栏自动 checkin 的可选功能,它需要“始终”gps 权限。 我想首先请求常规的“使用时”权限。然后,仅当
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 8 年前。 Improve
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
最近,我研究了使用 OnGuard 来帮助诚实的人遵守他们的原则。我同意这里许多人表达的观点,即任何许可制度都无法保护您免受那些想要使用您的软件但不想付费的人的侵害。另一方面,我希望避免让其他人太容易
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我试图在计算机上设置Windows Developer许可证,但失败。 我正在运行Visual Studio 2012。 当我单击“项目”->“商店”->“获取开发者许可证”时,它向我显示一个信息对话
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
我想购买 Delphi Xe2 Pro。我独自一人使用它,我有 2 台电脑:一台在办公室,一台可移植用于“在路上”工作。Delphi Xe2 许可证不是很清楚,因此有什么办法可以为 2 台 PC 只购
我正在我的应用程序中安装 Android Licensing,我想知道什么是检查许可证的良好形式 - 每次或仅一次并保存它已被许可共享偏好的事实?我担心的是,如果用户处于离线状态,他们将被锁定在应用程
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
有人知道 WinRT 应用程序的许可是如何工作的吗? 我已向 Microsoft 申请了免费的开发人员许可证,这似乎与 temporarykey.pfx 或 appxmanifest 文件相关联。问题
我一直在网上搜索如何接受 Xcode,以便使用 Xcode 为 MAC 重新编译 MATLAB Windows 文件,但我没有找到任何相关的答案。 我在 MATLAB 中得到的错误消息是: Xcode
一些工作推到 QA,一些工作推到生产。 应该只允许开发人员推送到 QA,并且只允许 QA 推送到生产。除了制作两个单独的构建服务器(通过某种方式共享工件)之外,我如何限制权限? 最佳答案 您需要基于项
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
在 MacOS Catalina 上升级到 Xcode 11.1 后,运行一些命令(例如 git status)会导致 Xcode 声明必须同意许可。显然,我们可以运行 git status 和 gr
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
在 MacOS Catalina 上升级到 Xcode 11.1 后,运行一些命令(例如 git status)会导致 Xcode 声明必须同意许可。显然,我们可以运行 git status 和 gr
我正在构建一个小型 winforms 应用程序:ayende rhino licensing .许可工作正常,我可以创建许可并按我的选择分发它们。 问题是,如何让每个许可证只在一台机器上工作?我知道在
我是一名优秀的程序员,十分优秀!