正如在这里和这里的类似问题中所讨论的,我想保护我的代码免受逆向工程.
基本上,它归结为唯一的机会是你有一个非常具体的,难以设计的,与你的领域相关的算法,让你在竞争中占据优势.这是尝试对应用程序的一小部分进行逆向工程的唯一时间.
我确实有这种情况.一种难以设计的算法,对我们的特定领域而言是优雅且有价值的.
经过数月的微调和开发后,最终结果非常紧凑(大约100行代码)和优雅.我想保护代码的这一特定部分免受逆向工程或至少使其合理困难.
该场景是一个用C#编写的富客户端应用程序,我必须部署这部分代码 - 我无法从Web服务执行它.
我认为,由于性能原因(以及跨边界问题),提取代码并在非托管本机二进制文件中重写代码不是一种选择.
最初我想做简单的混淆,但考虑到代码的小,我不认为这会提供很多保护.
理想情况下,我想保护我的整个应用程序,但有两个主要问题似乎使普通的混淆器和第三方打包器难以使用:
该应用程序提供了一个插件接口,因此不应对某些程序集(和接口/类)进行模糊处理和打包
我们仍然希望能够在接收错误报告时获得真正的堆栈跟踪 - 这可能是我对映射模糊到真实代码所做的.
将这些问题放在一边(尽管我也很感激这方面的任何意见),保护我的一小部分代码免受逆向工程的好方法是什么?我并不担心任何人改变或破解代码,而是想让它难以理解和逆向工程.
我使用存储在名为tb_player的SQL表中的以下列:
Date of Birth (Date),Times Played (Integer),Versions (Integer)
计算以下公式中的"playvalue"(整数):
playvalue = (Today - Date of Birth) * Times Played * Versions
Run Code Online (Sandbox Code Playgroud)
我随时在网页上显示最多100条带有关联播放值的记录.
我的问题是,由于(今天的出生日期)变化,它每天只会改变一次,因此计算这个游戏值的最有效方法是什么?其他值(播放时间和版本)保持不变.
有没有比每次为100条记录动态计算更好的方法?如果是这样,在存储过程或VB.NET/C#中进行计算是否更有效?
我先安装了TSVN,并且已经使用了很长时间.然后我安装T-HG,当我点击右键时,我看不到任何TortoiseHG.
有没有人有同样的问题?
所有T-SVN覆盖仍然存在.
是否可以在Linq to SQL中执行公用表表达式(CTE)(如下所示).我对CTE和Linq to SQL都很陌生.
我目前正在免费存储过程(但不能以任何方式对付它们)所以我不想仅仅针对一个查询进行存储过程的跳跃,除非它是完全必要的.
这是我在SQL中做的一个例子,我想知道我是否可以在Linq to SQL中做:
WITH TaskHierarchy (TaskID, [Subject], ParentID, HierarchyLevel, HierarchyPath) AS
(
-- Base case
SELECT
TaskID,
[Subject],
ParentID,
1 as HierarchyLevel,
CONVERT(VARCHAR(MAX),'/') AS HierarchyPath
FROM Task
WHERE TaskID = 2
UNION ALL
-- Recursive step
SELECT
t.TaskID,
t.Subject,
t.ParentID,
th.HierarchyLevel + 1 AS HierarchyLevel,
CONVERT(varchar(MAX),th.HierarchyPath + CONVERT(VARCHAR(32),t.ParentID) + '/') AS HierarchyPath
FROM Task t
INNER JOIN TaskHierarchy th ON
t.ParentID = th.TaskID
)
SELECT *
FROM TaskHierarchy
ORDER BY HierarchyLevel, [Subject]
Run Code Online (Sandbox Code Playgroud) Python有一个标准的库模块ftplib来运行FTP通信.它有两种获取目录内容列表的方法.一,FTP.nlst()将返回给定目录名作为参数的目录内容列表.(如果给定文件名,它将返回文件的名称.)这是一种列出目录内容的可靠方法,但不会指示列表中的每个项目是文件还是目录.另一种方法是FTP.dir(),它给出了作为参数给出的目录的目录内容的字符串格式列表(或给定文件名的文件属性).
根据之前关于Stack Overflow的问题,解析结果dir()可能很脆弱(不同的服务器可能会返回不同的字符串).我正在寻找一些方法来列出通过FTP在另一个目录中包含的目录.据我所知,d在字符串的权限部分中抓取一个是我提出的唯一解决方案,但我想我无法保证权限将出现在不同服务器之间的同一位置.是否有更强大的解决方案来识别FTP上的目录?
我想重开stdin和stdout(也许stderr当我在它)的文件句柄,从而使未来的呼叫printf()或putchar()还是puts()会去到一个文件,以及未来的呼叫getc()和这种将来自一个文件.
1)我不想永久丢失标准输入/输出/错误.我可能希望稍后在程序中重用它们.
2)我不想打开新的文件句柄,因为这些文件句柄必须要么传递很多,要么全局传递(不寒而栗).
3)如果我无法帮助,我不想使用任何open()或fork()其他系统相关的功能.
所以基本上,这样做是否有效:
stdin = fopen("newin", "r");
Run Code Online (Sandbox Code Playgroud)
而且,如果确实如此,我怎样才能得到原来的价值stdin?我是否必须将其存放在一个FILE *以后才能将其取回?
为什么这个程序在第二次进入do while循环时没有执行,为什么它会给出异常"异常java.sql.SQLException:[MySQL] [ODBC 5.1驱动程序] [mysqld-5.0.51a-community-nt ]没有选择数据库"
//import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import java.util.Vector;
public class DataBase {
public void LoadDriver() {
// Load the JDBC-ODBC bridge driver
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException ee) {
ee.printStackTrace();
}
}
// 2.open a data source name by means of the jdbcodbcdriver.
static void connect() throws SQLException {
// Connect to the database
Connection con = DriverManager.getConnection("jdbc:odbc:MySQL", "root", "admin");
Statement stmt = con.createStatement();
// …Run Code Online (Sandbox Code Playgroud) 我肯定会在下面的代码中乱搞很多代码.似乎应该有一个更顺畅的方式.我基本上尝试使用构建器方法(CreateNewPattern)来处理创建传递的子类类型的新对象(通过CreateNewCircularPattern和CreateNewLinePattern方法).我目前只有两个子类型的CircularHolePattern和SingleLineHolePattern继承自HolePattern,但我希望随着我的应用程序的增长有更多.
这是一个使用委托或lambda的地方吗?它对它们一无所知,所以请尽可能具体和代码建议.
private CircularHolePattern CreateNewCircularPattern()
{
var CreatedPattern = CreateNewPattern(typeof(CircularHolePattern));
return (CircularHolePattern)CreatedPattern;
}
private SingleLineHolePattern CreateNewLinePattern()
{
var CreatedPattern=CreateNewPattern(typeof(SingleLineHolePattern));
return (SingleLineHolePattern)CreatedPattern;
}
private HolePattern CreateNewPattern(Type PatternTypeToCreate)
{
var NewHolePattern = (HolePattern)Activator.CreateInstance(PatternTypeToCreate);
NewHolePattern.PatternName = "Pattern #" + (HolePatterns.Count + 1).ToString();
this.AddPattern(NewHolePattern);
this.SetActivePattern(NewHolePattern);
return NewHolePattern;
}
Run Code Online (Sandbox Code Playgroud) 我有一个为视频文件创建缩略图的项目,它基于directshow.net中的互操作定义.
目前媒体浏览器是GPL所以一切都是兼容的,我很高兴剪切和粘贴这些代码(因为它的所有归属都正确).
但是......我正在考虑将此代码包含在衍生的MIT许可项目中.这留下了一点点.
Directshow.net是根据LGPL许可的,这意味着我可以依赖该DLL.但是......我不能在限制较少的许可下包含代码.
有问题的文件是互操作定义,可以通过阅读MSDN并将内容翻译成C#来轻松/繁琐地定义,如果我手动执行此操作,我很可能会得到相同的代码(或非常类似的东西).
我站在哪里?如何将此功能纳入我的MIT许可项目?
相关:http://sourceforge.net/forum/forum.php?thread_id = 3040125&forum_id = 460697
我在单独的解决方案中有两个C++/CLI项目A和B. 我使用A进行实验/测试,并在测试完成后将测试的代码移到B. 但是,我发现在向项目B添加Windows窗体类(header,cpp和resx)时,我不再能够使用IDE的可视窗体设计器.我如何启用它?