- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在我的应用程序中存储一个密码来加密安装日期并将其存储在某个文件夹中,也许还存储在注册表中以获取我的应用程序的 30 天版本。我一直在谷歌上搜索很多,大多数人建议存储加密的安装日期。 我知道我所做的一切仍然可以被破解,但我希望它在不打电话回家之类的情况下相当难以破解。例如,我可以让一个 const 字符串存储一个密码,该密码使用存储在另一个 const 字符串中的密码加密,等等。这会使它变得有点复杂。但是由于字符串混淆似乎是混淆器的一项常见任务,我想知道是否有更好的方法来做到这一点,以防你们中的任何人知道混淆器通常如何混淆代码中的字符串,以便我可以重复该过程。
(我不打算购买混淆器。我使用的是 dotfuscator 的免费版本,它不会混淆字符串,这很好,但我不会购买付费版本只是为了混淆单个字符串(在如果付费版本混淆了我不关心的字符串)。)
(而且我仍然想进行 30 天试用。我已经阅读了很多关于其他选项的信息,例如制作自由光版本等等。30 天版本是我的最佳选择。)
最佳答案
您还需要考虑当用户删除您的所有注册表项并重新安装您的应用以再获得 30 天时会发生什么。 “最佳”选项是生成具有内置日期的注册码。如果他们决定重新安装您的应用程序,他们必须使用有效的注册 key ,并且他们唯一拥有的是日期较早的 key 。
然后您必须确保他们不会继续注册新 key 等。
除此之外的任何事情都可以通过反编译和重新编译您的应用程序来规避。
建立一个日期
我做了一些更复杂的事情来识别用户计算机的特征。我会解释一个简单的方法。请记住,如果他们真的想反编译/重新编译,这是行不通的,但我会说它相当困难。
01/10/2011 30 Andrew Finnell
作为最终字符串。这是您的新许可证 key 。当他们去注册时,您可以让他们将其剪切并粘贴到您的应用程序中。
如果该 key 太难管理,您可以做一些不同的事情。基本上你按照我说的做,但只取前 16 个十六进制字符。然后,您将其与他们的姓名、日期和天数一起存储在注册表中。当您的应用程序加载时,您会使用这些存储的值(名称、日期、日期等)生成一个新 key ,并将前 16 个字符与存储在注册表中的内容进行比较。
请记住,这只是一种防止用户共享或利用您的软件的简单方法。 这些都不是高安全级别的技术,如果他们真的愿意的话,会导致破解 key 。
关于c# - 混淆器中的字符串混淆是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4644017/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!