每当Android Market Licensing ping服务器返回GRANT_ACCESS pong时,我都会缓存用户的身份验证.
有没有人看到这个策略有任何漏洞?我相信它非常强大,因为我混淆了一把钥匙,而且不混淆的唯一方法就是知道盐.现在,有人可以想象打开apk并寻找盐,但这并不是真正的破解程度,我认为太重要了,不用担心.
如您所见,设备特定信息正被添加到混淆技术中.
// Try to use more data here. ANDROID_ID is a single point of attack.
String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
obfuscator = new AESObfuscator(SALT, getPackageName(), deviceId);
mChecker = new LicenseChecker(this, new ServerManagedPolicy(this, obfuscator), BASE64_PUBLIC_KEY );
Run Code Online (Sandbox Code Playgroud)
接下来创建持久化数据:
public void allow() {
SharedPreferences settings = getSharedPreferences(PREFERENCES_EULA, 0);
SharedPreferences.Editor editor = settings.edit();
String uid = UUID.randomUUID().toString();
if(!settings.contains(ACCESS_KEY)) {
editor.putString(ACCESS_KEY,uid);
editor.commit();
}
if(!settings.contains(OBFU_ACCESS_KEY)) {
String obfu = obfuscator.obfuscate(uid);
editor.putString(OBFU_ACCESS_KEY,obfu);
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
然后,我使用另一种方法来检查缓存内容的状态:
boolean isCachedLicense() {
SharedPreferences settings = …
Run Code Online (Sandbox Code Playgroud) 我们都从根本上知道a Constructor
和用户定义Initialize()
方法之间的区别.
我的问题集中在对象创建的最佳设计实践上.我们可以将所有Initialize()
代码放入Constructor()
,反之亦然(将所有预热代码移动到Initialize
方法并从中调用此方法Constructor
).
目前,设计一个新类,我在里面创建任何新实例,constructor()
并将任何其他热身代码移动到Initialize()
方法中.
您认为最好的权衡点是什么?
如何在Visual Studio 2010中向我的C#项目添加DirectX引用?谢谢.
我在我的机器上成功设置了gitosis,我的项目安全地放在gitosis服务器上.它目前没有分支(只是主人).如何添加分支?(我不是在谈论它的配置,我可以想出来,但字面上添加一个分支)
我在本地仓库中添加分支并推送吗?我是否会在gitosis做些什么?
干杯.
假设我有一个叫做的类Composite
,它包含另一个类的集合Component
,所有这些类都有一个属性Name
.使用a Dictionary
来存储组件会更好吗,或者使用动态对象会更好吗?
例如,这样做会更好:
Component component = someComposite.Components["RandomComponent"];
或者:
Component component = someComposite.Components.RandomComponent;
其中someComposite.Components dynamic
在第二个例子中.
第二种情况似乎更好,但没有类型安全......
我想补充一点,在某些时候我最终会这样做:
DerivedComponent component = someComposite.Components["RandomComponent"] as DerivedComponent;
在这种情况下dynamic
可以节省我输入转换.
那么哪个更好的设计呢?
我找到了M. Fowler关于被动视图模式的文章.我想在我的申请中申请.我使用Swing for UI.我花了几个小时搜索教程或示例如何实现它,但没有找到太多有用的东西.有人可以帮助理解设计或提供好的例子吗?通过MVP中的"M",我理解"域模型".
我试图这样做:
SELECT COUNT(*),
(
SELECT COUNT(*) FROM attend
WHERE (DATEPART(WEEKDAY,start_date) = 2 OR DATEPART(WEEKDAY,start_date) = 6)
AND empl_no = 12345
)
FROM attend as a
WHERE empl_no = 12345
Run Code Online (Sandbox Code Playgroud)
但这看起来有点难看.有一个更好的方法吗?
我正在使用Microsoft.VisualBasic.Fileio.TextFieldParser来解析使用Excel 2003创建的CSV文件.解析器工作得很好,除了它将扩展的ascii值转换为问号!所以如果文件内容是:
±3
TextFieldParser正在返回
?3
我已经尝试了System.Text.Encoding包中的所有编码而没有运气.我以为我使用UTF7,但它正在删除其他字符,例如用空格替换+符号.
任何帮助将不胜感激.
另一篇文章质疑将语言编译成Javascript是多么实际.除了实用性,解释器从一些语言X转换为Javascript并在Javascript中实现?我特别感兴趣的是X的设计目的不是针对Javascript.即使口译员没有完全完成,我也想听听.
你可能对这个问题的动机感到好奇.Javascript当然不能像汇编程序那样充分利用它,但代码分发和执行的灵活性有时可能会超过这个成本.
这些解释器的一个用例是教学和学习编程语言的模型.考虑在交互式书籍Eloquent Javascript中使用Javascript解释器是多么有用.当然,在本地编译它可能会有性能损失,但在某些情况下,成本肯定是值得的.是的,我意识到依靠服务器编译或解释代码总是一种选择,但我对客户端方法特别感兴趣.
更新:许多响应包括对未在Javascript中实现的编译器的引用.我只想强调解释器本身应该用Javascript实现,这样它和源语言代码都可以在祖父母的计算机上的浏览器上运行.
我试图使用C#2010 Express在C#应用程序中引用本机x64 dll.我有一个演示项目,该项目是从2008项目转换而来的,该项目在其属性中有配置和平台选项,但我创建的新项目却没有!下拉列表不存在 - 实际上我甚至无法从Debug切换到Release.他们都使用.Net Framework 4,其他一切看起来都是一样的.
在C++和转换后的C#项目中,它很简单,你只需打开解决方案的配置管理器即可,但我的新C#项目在上下文菜单中没有.
由于存在大量内存需求,我需要能够在x64下引用x64 dll,在x86下引用x86 dll.任何人都可以解释为什么选项缺失或指出我如何解决它?
c# ×4
.net ×1
64-bit ×1
android ×1
ascii ×1
client ×1
constructor ×1
directx ×1
dynamic ×1
exploit ×1
git ×1
gitosis ×1
interpreter ×1
java ×1
javascript ×1
mvp ×1
passive-view ×1
security ×1
sql ×1
sql-server ×1
swing ×1
vb.net ×1