09 2007 档案
摘要: 前面提到了form关闭时的两个奇怪现象,有不少朋友参与了讨论。
有些朋友还没有看清楚问题的所在就很轻率的评论。
A.Z. 在讨论中已经找到的问题的基本所在,问题关键还是在 CalledClosing 这个变量的状态。
这个问题要从另外一个奇怪现象说起。
为什么直接给 form的DialogResult属性赋值会导致form关闭?
这个属性的set函数如下:
public void set_DialogResult(DialogResult value)
{
if (!ClientUtils.IsEnumValid(value, (int) value, 0, 7))
{
throw new InvalidEnumArgumentException("value", (int) value, typeof(DialogResult));
}
this.dialogResult = value;
}
很明显,这个set函数不可能直接导致 form的关闭。
阅读全文
摘要: 今天查一个错误时发现这个问题。
有一个frmEdit。在Closing事件里面判断数据是否修改,然后提示用户是否需要保存数据。
提供了三个按钮,yes,no,cancel。
yes:保存数据,关闭窗体。
no:直接关闭窗体。
cancel:不关闭窗体。
实际运行,点yes,cancel,处理都对,但是点 no,就会重复弹出这个对话框,
如果一直点 no的话,就会一直出现。
看一眼代码没有发现明显问题,实际调试才发现问题所在。
代码如下:
阅读全文
摘要: 前面介绍了利用第三方虚拟环境来实现 .Net程序脱离框架运行,
并介绍了如何自己编写加载器程序。
今回我们介绍虚拟框架的核心实现原理,感兴趣的朋友可以参考自己实现。
在 让 .Net 程序 脱离 .net framework框架 运行(源代码实现说明) 中我们介绍的脱
离框架运行的方法,仍然需要依赖 rsdeploy.dll 才行。
今回我们就介绍这个 dll 的实现原理。
简单的实现方式:
首先我们需要用到一个 undocumented features
阅读全文
摘要: 增加了一种加密算法。
对加密数据的保存结构进行了变更。
阅读全文
摘要: 前面介绍了 “让 .Net 程序 脱离 .net framework框架 运行的方法”,
该方法主要是利用了Fetion的框架来实现的,
今天我们要介绍的是不使用Fetion的框架,自己来实现Fetion框架的相关功能,
并给出相关实现代码。
阅读全文
摘要: 前面我们介绍了目前主流的双层加密壳核心实现原理,
以及应对兼容性,同时考虑安全性的前提下对加密壳核心进行简化。
并就加密壳核心的兼容性以及安全性进行了讨论 ,提到了加密壳核心兼容性和安全性共赢的实现模式,纯Jit层核心。
今回我们将介绍这种加密壳核心的实现。
这种核心可以基本保障方法体局部变量签名以及异常处理表的安全,但仍然无法保证IL字节码的安全。
那么它的保护意义何在?
阅读全文
摘要: 前面我们介绍了目前主流的双层加密壳核心实现原理,
同时提到了应对兼容性,同时考虑安全性的前提下对加密壳核心进行简化。
今回主要讨论一下安全性、兼容性需要注意哪些因素。
阅读全文
摘要: 前面介绍了虚拟机预处理层的加密壳核心的实现,今回将在这个基础上介绍另一个目前主流的加密壳核心实现方式--EE、Jit双层加密壳核心
前一回的核心模式解决了反射漏洞的问题,今回将就双层模式介绍两种实现实例。
在今回的双层核心中,
阅读全文
摘要: 前面介绍了 让 .Net 程序 脱离 .net framework框架 运行的方法 ,
但是有些朋友应用中还是遇到了一些问题,主要时需要自己提取框架程序以及应用的dll问题。
这里介绍一个偷懒提取方式。
阅读全文
摘要: .Net中的泛型和C++中的模版很相似,但在编译行为上有些不同。
之前做DNGuard HVM 时就遇到了加密泛型的麻烦问题,最近又发现了泛型在 ngen 加强保护模式下也有问题,在.Net解密中它同样也是一个麻烦。
C++中的模版在编译时就生成了实例代码,出现代码膨胀。
.Net的泛型,在编译时只会生成一份MSIL代码
阅读全文
摘要: 前面介绍了 EE 层核心的实现,以及针对反射漏洞的改进,
但是仍然没有达到彻底阻止反射的目的。
今回将介绍实现一个虚拟机预处理层的加密壳核心,使反射彻底失效。
前面提到 第二种模式 已经将核心向预处理层拉近了,
今回就在这个基础上介绍实现预处理层的加密壳核心。
阅读全文
摘要: 前面我们讨论了 ngen 生成的 ni 文件的还原,以及它的加强保护方式阻止还原。
今天我在测试一个 ORM 程序时发现, 用加强保护模式的 ni 文件运行会出现
BadImageFormat 的 异常。
阅读全文
摘要: 前面介绍了 EE 层加密壳核心的实现,但是那个实现模式存在反射漏洞,
今回介绍针对反射,对核心的增强方法。
方式一、破坏反射
阅读全文
摘要: 在上一回 .Net 加密原理,方法体加密信息对应关系的实现 中介绍了实现加密壳首要解决的基础问题,
今回以第一种实现模式介绍如何实现一个纯EE层(mscorwks.dll)的加密壳内核。
加壳运行库的核心代码
DWORD* __fastcall DNGuard_GetILHeader(DWORD_PTR MethodPtr)
{
DWORD* pIL = OrgGetILHeader(MethodPtr);
if(*pIL == gdwMagic)
{
pIL = DecryptMethod(pIL[1]);
}
return pIL;
}
阅读全文
摘要: 在 per method 的dotNet加密中,首要解决的方法体对应关系,即在运行时加密壳如何确定当前要解密的方法体所对应的加密信息。
目前大部分加密壳都直接利用了dotNet的元数据来保存这种对应关系,
阅读全文