十多年C++/C、C#开发经验,.Net安全领域,熟悉.Net内核以及代码安全保护原理。
自从.Net 2.0的新特性被公开用来获取IL代码后,加密壳就成了鸡肋。就如tankaiha所说“.net下逆向暂时没啥新东西可搞,某软件的版本升级是一次不如一次强”,由于先天不足,这成了加密壳强度的一个瓶颈。
昨天晚上花时间测试了一下平台兼容性,发现无法在win98和winme中使用。今天晚上就搞了搞Win9X平台了的。唉,本来很简单的一件事竟然搞倒现在才搞好。Win9X真不是吹的,有兴趣的朋友可以试试写个程序加入 int 1,然后放在Win9X运行,马上就会经典重现。
针对DNGuard 版本V1.0 做了一下平台兼容性测试。首先 DNGuard 只支持32 位系统平台。分别在Win98 WinMe , Win2000系列,Win XP, Win2003进行了测试。1. Win98 WinMe 结果:不支持,无法运行。
DNGuard是一款绿色软件,下载后解压缩即可使用。软件包包含两个文件 DotNetGuard.exe DNGuard主程序文件DNGRuntime.dll DNGuard运行库文件DNGuard的界面很简洁,使用非常简单。
DNGuard 是一款免费的DotNet内核模式的加密保护工具。 这是第一个发布版本,版本号定为 1.0。只支持32位系统。 目前还只在 xp和2003上做过测试,其它版本的系统还未测试,大家有条件的麻烦帮忙试试。
被加密的程序集是 .Net 2.0的 winform程序。下载地址:http://www.bbsftp.com/temp/dngdemo.rar压缩包中共两个文件:dngtest.exe 被加密的主程序。
最近一直学习DotNet相关资料,sscli真是好东西啊:P。 一边学习一边把知识综合了一下,做了这个小工具。保护原理和国人的remotesoft,maxtocode差不多。加密后的程序发布时也需要附带一个运行库,不过和那两个不同,附带的运行库不是纯native的dll,而是C++/CLI的混合程序集。
在 .Net程序加密的原理及解密探讨三(实例解密) 一文中我们介绍了反射,主要提到三个函数 DumpAssembly,DumpType, DumpMethod。 这里我们将就 DumpMethod 这个函数讨论。
正如前面提到的DotNet 程序的脱壳和普通PE文件的脱壳是有密切关系的。传统PE文件dump大部分都是进程外dump,这里我们介绍的DotNet程序集的脱壳使用进程内dump。所以第一步就是注入问题,如何让我们的程序在目标进程内运行?传统的win32 注入dll,相信大家都熟悉了吧,得益于C++/CLI的特性,我们能依靠传统的方式注入我们的程序到目标进程中。
本次脱壳的测试对象是CodeLib 2 V14.9.2468.42911 更新日期是2006-10-5 目前的最新版本。运行脱机程序到如下界面:选中列表中的第二项,codelib.exe,选择一个保存路径,点击dump按钮,即可完成脱壳。
V2.0 增加对 mdTypeSpec 的解析。下载地址:http://www.bbsftp.com/temp/ILByteDecoderV2.0.rar解码效果如下(fannee提供的那段代码的解码结果): IL_0000: ldarg.
v1.85+支持nested class的全名解析v1.8+支持 字段,和方法的签名解析。解码效果如下基本上和 ildasm的一样,大家使用中如果遇到解码效果和ildasm不一样的欢迎给我留言,我会在研究后更新。
前一回讲了 IL字节码的解码问题,并提供了一个小工具,但解码的效果和 ildasm还是差很多,给阅读也带来了一些困难。还有就是有些文件选择文件后解码会出错,这是因为maxtocode对文件里面的元数据进行了随机加密。
在前面几章我们已经能够去掉被加密程序原始的IL字节码了。这些字节码是十六进制的,我人脑直接来阅读是非常困难的。这一章主要介绍将字节码翻译成 可阅读的 MSIL 汇编代码,以及前几章的遗留问题解决。 这里我们将用到上面这个工具软件 IlByteDecoder. 软件下载地址:http://www.bbsftp.com/temp/ILByteDecode.rar使用比较简单,注意中间那个 文件名 一项,这个可以填也可以不填,如果没有填的话,解码出来的 msil 代码中将无法显示字符串值和方法名称。
上一回我们试验了通过反射的方式获取method的源代码。这次我们就用一个实例来演示dump一个程序集中的所有类型和方法的IL源代码。首先打开VS2005 新建一个C#的windows程序:在窗体添加添加一个2个 button,2个label,一个textbox,一个 checkbox,一个savefiledialog。
自上次写第一篇文章到现在不知不觉两个月过去了,这篇文章我们将介绍怎么获取解密后的IL字节代码。我们先回顾一下前文,在上一回我们提到“InFaceMaxtoCode.Startup 正常启动后,在整个程序集中只会运行一次。
这里研究的对象是某壳3.1试用版.这里只探讨程序代码的加密. 对.Net程序代码的加密过程如下: 1. 运行 ildasm 将程序集反编译成 il代码文件. 2. 对IL代码文件进行处理.(*) 3. 运行 ilasm 将 IL代码文件编译成程序文件. 4. 直接对程序文件中的il字节码加密.(**) 粗体表示的 2 , 4 是关键步骤. 我们先来看看第四步.这一步就是加密的关键步骤,这里就是使用MaxtoCode的加密算法对程序代码进行加密。
DataGridView 绑定DataTable方式,进行编辑。如果只在表格的某一行内进行编辑,且保持焦点只在这一行变动。进行数据保存时这一行的变更就无法正常保存。然后我有试着在保存之前调用 DataGridView 的EndEdit .
在 C++ 中我们能够通过 LoadLibrary, GetProcAddress 来动态调用 dll 的导出函数.在 C# 中也能够用这样的方式吗?在 DotNet 2.0 里面这样是可以的, 这完全得益于 2.0新增的一个函数Marshal.GetDelegateForFunctionPointer 方法 此方法在 .NET Framework 2.0 版中是新增的。
家里的 vs 2005 不能调试了.提示: 无法启动调试 绑定句柄无效在网上搜索了一下解决方法两个1. 开启 Terminal Services 服务. 允许用户以交互方式连接到远程计算机。
前面已经实现了从 DataGridView 拖放数据到 TreeView.不过拖放是通过 鼠标右键完成的. 根据windows的一般标准,是通过鼠标左键来进行数据拖放操作的.像windows资源管理器,既能处理鼠标左键单机的选择,也能处理左键拖放操作.
实现方法,在datagridview的mousedown事件中开始 托放。然后在treeview 的 DragEnter 中接收托放。最后在treeview的 DragDrop 中处理托放结果。注:treeview的allowdrop属性要设置为 true。
将字段 assessortime 绑定到 DateTimePicker1.DateTimePicker1.DataBindings.Add("Value", bindingSource1, "assessortime");如果字段 assessortime的值 为 null 时 就会出现异常.
数据表: Users字段 ID ,类型 int字段 UserName, 类型 string字段 Group, 类型 int. (2 代表 管理员, 1 代表 认证用户 , 0 代表 注册用户)在一个winform上有一个 bindingNavigator, bindingNavigator1一个 bindingSource bindingSource1.