摘要: .Net 框架提供的基础类库中并没有枚举AppDomains的功能,只提供了获取当前执行代码所在的AppDomain功能。
...
基础类库中并没有枚举AppDomains的功能,那是否可以在C#中实现呢?...
阅读全文
摘要: .Net 2.0开始提供了两个混淆相关的属性,ObfuscationAttribute 和 ObfuscateAssemblyAttribute 。
为开发者提供一种批注二进制文件的方法,以便混淆处理工具能够使用最少的外部配置正确处理这些二进制文件。
混淆处理工具就处理每个对象时就需要判断这个对象是否有这样的属性,如果有还需要把属性的参数值读取出来。然后进行相应处理。
阅读全文
摘要: 在 net 2.0 中 ngen 能生成 native code 的 image,但是它同时会保留原始程序集的 MetaData 和ILCode 。
这就是还原的关键。同样的,知道了还原方法后加强保护也很容易实现。
阅读全文
摘要: 本文将在 .Net 反射脱壳机核心源代码 的基础上介绍,实现 Jit层脱壳机 的一些思路 以及加密壳在这方面可能采取的加强方式。
阅读全文
摘要: 本文主要介绍一些dotNet加密保护工具的原理以及就其脱壳进行简单探讨。remotesoft protector、maxtocode、.Net Reactor、Cliprotector
、themida .Net、xenocode native compiler、DNGuard。
阅读全文
摘要: 提到 .Net 的保护,首推就是混淆保护了,而名称混淆基本上是所有混淆保护工具都具有的功能。
可以说不支持名称混淆的工具称不上混淆保护工具。
对于混淆保护,大家有一个认识,就是 混淆是一个不可逆的过程。而加密保护是一个可逆的过程。
名称混淆真的完全不可逆吗?答案是否定的。
名称混淆有一部分是可以精确还原的。
.Net的名称混淆在 剖析DotNet的名称混淆保护技术 中有详细介绍。今回注意介绍名称混淆中可逆的部分,以及还原的方法。
阅读全文
摘要: 之前发了一个实验品
http://bbs.pediy.com/showthread.php?t=45184
功能还不完善,这个是完整的版本。
能脱压缩壳,整体加密壳,有反射漏洞的加密壳。
阅读全文
摘要: 在前面介绍mscorwks的时提到了,.net的程序是以函数为单位编译。而在 mscorjit中提供了一个函数
compileMethod 。mscorwks就是通过调用这个函数来编译.Net方法的。
对于EE层,或者虚拟机预处理层的加密壳,只需要hook这个函数就可以dump出方法体的代码了。
需要注意一点,这个函数是 thiscall 调用约定的。
.Net方法体进入 compileMethod 之后是怎么样的处理流程呢?
阅读全文
摘要: 本文主要对 《.Net 反射脱壳机核心源代码 》一文代码的原理和使用进行详细介绍。
首先介绍一下代码主要流程:
入口函数
void DumpAssembly(Assembly ass,string path)
枚举所有type,调用
void DumpType(Type tp, BinaryWriter sw)
枚举所有方法,调用
void DumpMethod(MethodBase mb, BinaryWriter sw)
{
MethodBody mbd = mb.GetMethodBody();
if (mbd == null)
return;
SetOffset(sw, mb.MetadataToken);
WriteHeader(sw, mbd);
WriteILCode(sw, mbd);
WriteSEH(sw, mbd);
}
阅读全文
摘要: 入口函数
void DumpAssembly(Assembly ass,string path)
枚举所有type,调用
void DumpType(Type tp, BinaryWriter sw)
枚举所有方法,调用
void DumpMethod(MethodBase mb, BinaryWriter sw)
{
MethodBody mbd = mb.GetMethodBody();
if (mbd == null)
return;
SetOffset(sw, mb.MetadataToken);
WriteHeader(sw, mbd);
WriteILCode(sw, mbd);
WriteSEH(sw, mbd);
}
阅读全文
摘要: 今天一个朋友拿一个OA系统程序让我看是什么加密壳。
这个壳还是第一次遇到,anti ildasm,anti 反射。
reflector 和9ray的工具都不灵。
很有特色的名称混淆"o10l1o0l"。
但是从库的导出表来看似曾相识。
阅读全文
摘要: mscorwks.dll是dotNet的核心文件,尤其是在net2.0中,以前分散的功能都集中到了这个dll中。
net1.1中,还有一个文件mscorsvr.dll 和 mscorwks.dll 是同等地位的。
它们分别对应于 windows service程序以及 desktop 程序。
在net2.0中,它们都统一到了 mscorwks。dll中。
同时在net2.0中mscorsn.dll 的功能也合并到了 mscorwks.dll中。
EE层的加密壳,其工作的核心也是和 mscorwks.dll 密切相关的。
阅读全文
摘要: 学习过了名称混淆,最近又看了一些字符串加密方面的东西。
在混淆保护和加密壳中都有字符串加密保护功能。
总体上字符串加密可以分为两类,
第一类是混淆保护中的字符串加密技术。主要特征是修改代码执行路径。
大部分混淆保护工具的字符串加密都是这一类。
第二类就是加密壳中的字符串加密技术。这种不用修改IL代码,直接对元数据中的字符串加密。
阅读全文
摘要: 混淆在目前的DotNet保护中占主流地位。名称混淆是最基础的混淆保护技术。
DotNet加密保护工具MaxToCode也在最近的更新中加入了部分混淆保护功能---名称混淆。
我们先谈谈名称混淆技术,名称混淆从本质上可以分为两类。
阅读全文
摘要: 这段时间在测试.Net Jit的容错性,为了方便,就直接将代码插入到Jit中进行测试了。
这个种方式就是我前面介绍DNGuard时提到的第一种增加内核强度防反射脱壳的方法。
这种技术即可用在dotnet代码的保护上,也可以用在dotnet加密壳的解密上。
DNGuard 2.0的内核使用的就是Jit层,容错性测试差不多了。
DNGuard目前的内核基调就不会再调整了。
接下来就要着手DNGuard H-VM的试验和测试了。这个也是纯Jit层的。(H = half)
DNGRuntime在运行时动态还原程序集,进行程序集方法的拆分(即一个方法被拆分为两个或多个),
拆分后的方法差不多是一半走jit,一半走DNG H-VM。
遵循如下约定:
如果方法A走Jit,则被方法A所调用的方法都走 DNG H-VM。
阅读全文
摘要: 自从.Net 2.0的新特性被公开用来获取IL代码后,加密壳就成了鸡肋。
就如tankaiha所说“.net下逆向暂时没啥新东西可搞,某软件的版本升级是一次不如一次强”,由于先天不足,这成了加密壳强度的一个瓶颈。
但是还有相当一部分人认为1.1的程序集加密后是安全的。
阅读全文
摘要: 在 .Net程序加密的原理及解密探讨三(实例解密) 一文中我们介绍了反射,
主要提到三个函数
DumpAssembly,DumpType, DumpMethod。
这里我们将就 DumpMethod 这个函数讨论。
前一篇我们已经提到的dump的整体流程。
先把PE整体dump出来,然后在文件后面增加一个段。
接下来就是这次要讲的反射和方法体重建。
阅读全文
摘要: 正如前面提到的DotNet 程序的脱壳和普通PE文件的脱壳是有密切关系的。
传统PE文件dump大部分都是进程外dump,这里我们介绍的DotNet程序集的脱壳
使用进程内dump。
所以第一步就是注入问题,如何让我们的程序在目标进程内运行?
传统的win32 注入dll,相信大家都熟悉了吧,
得益于C++/CLI的特性,我们能依靠传统的方式注入我们的程序到目标进程中。
阅读全文
摘要: 本次脱壳的测试对象是CodeLib 2 V14.9.2468.42911 更新日期是2006-10-5 目前的最新版本。
运行脱机程序到如下界面:
选中列表中的第二项,codelib.exe,选择一个保存路径,点击dump按钮,即可完成脱壳。
脱壳完的程序保存到codedump.exe。
注意这个文件是直接dump脱壳的结果,不能直接运行。
使用ildasm 反编译,然后打开il文件
查找 IL_0000: call void InFaceMaxtoCode::Startup()
替换为 //IL_0000: call void InFaceMaxtoCode::Startup()
即取消对 maxtocode 运行库的引用。
然后运行 ilasm 编译成exe文件。
放在codelib的安装目录中即可正常运行了
阅读全文
摘要: V2.0 增加对 mdTypeSpec 的解析。
下载地址:
http://www.bbsftp.com/temp/ILByteDecoderV2.0.rar
解码效果如下(fannee提供的那段代码的解码结果):
阅读全文
摘要: v1.85
+支持nested class的全名解析
v1.8
+支持 字段,和方法的签名解析。
解码效果如下基本上和 ildasm的一样,
大家使用中如果遇到解码效果和ildasm不一样的欢迎给我留言,我会在研究后更新。
阅读全文
摘要: 前一回讲了 IL字节码的解码问题,并提供了一个小工具,但解码的效果和 ildasm还是差很多,给阅读也带来了一些困难。还有就是有些文件选择文件后解码会出错,这是因为maxtocode对文件里面的元数据进行了随机加密。这一回主要解决元数据的还原以及对解码进行改进。
阅读全文
摘要: 在前面几章我们已经能够去掉被加密程序原始的IL字节码了。这些字节码是十六进制的,我人脑直接来阅读是非常困难的。这一章主要介绍将字节码翻译成 可阅读的 MSIL 汇编代码,以及前几章的遗留问题解决。
阅读全文
摘要: 上一回我们试验了通过反射的方式获取method的源代码。
这次我们就用一个实例来演示dump一个程序集中的所有类型和方法的IL源代码。
阅读全文
摘要: 自上次写第一篇文章到现在不知不觉两个月过去了,这篇文章我们将介绍怎么获取解密后的IL字节代码。
阅读全文
摘要: 对.Net程序代码的加密过程如下:
1. 运行 ildasm 将程序集反编译成 il代码文件.
2. 对IL代码文件进行处理.(*)
3. 运行 ilasm 将 IL代码文件编译成程序文件.
4. 直接对程序文件中的il字节码加密.(**)
粗体表示的 2 , 4 是关键步骤.
我们先来看看第四步.这一步就是加密的关键步骤,这里就是使用MaxtoCode的加密算法对程序代码进行加密。
阅读全文