.NET逆向工程 (一)

简介: 本文讲的是.NET逆向工程 (一),不知道你有没有这样的感觉,有时候你只是一个只知道如何从StackOverflow扒各种源码的Shit? 这种感觉挑战着我去学习新的东西,找到新的方法来测试我的大脑,开始把玩逆向工程是一个正确的事情,我再次感觉到自己像一个有点牛逼的开发人员了(也可能只是一个有点不同的shit!)。
本文讲的是 .NET逆向工程 (一)不知道你有没有这样的感觉,有时候你只是一个只知道如何从StackOverflow扒各种源码的Shit?

这种感觉挑战着我去学习新的东西,找到新的方法来测试我的大脑,开始把玩逆向工程是一个正确的事情,我再次感觉到自己像一个有点牛逼的开发人员了(也可能只是一个有点不同的shit!)。

下面是我学习新事物的秘诀:

感觉自己像一坨shit。
做了一些“很酷”的东西。
过了15分钟,继续转到了第1点(不要在源代码中使用gotos ;)

好的,当你有了好的心情,那就让我们开始本文的主题吧。

最近,我们遇到了一个使用VB.NET编写的加密器,但是源码被混淆过了。我们的主要目的是找出加密的逻辑和方法。我认为玩逆向最难的部分之一是确定代码逻辑,而不仅仅是编写补丁或者是从程序中找出了一个密钥。

本文将会重点讲述下面两个部分:

移除各种反逆向保护。
反编译程序并运行。

在对一个巨大的文本尝试了多个反混淆器后,依旧没有结果。这真是一个连没有运气都没有的非常完美的地方,让我们跳过这一步,先试试手。 (用右手是最有效的,这样能感觉好点)。

让我们使用dnSpy加载程序集。然后,让我们看看我们的模块和类,我们注意到的,在程序集中定义的方法没有反编译成功。

.NET逆向工程 (一)

这意味着我们要寻找的方法加密到了一些隐藏的节中(不在IL节),当程序运行时,会解密这些方法并把它们放在正确的位置。 为了确认,让我们用CFF资源管理器打开我们的程序集并导航到PE节。

.NET逆向工程 (一)

是的,我们想的是对的。 现在我们必须在源代码中找到函数解密和修复发生的地方。 经过一些观察,发现该过程发生在<Module> .ctor。 此构造函数在应用程序的主入口点之前调用。 这意味着它是实施这些工作的完美点。

重新打开dnSpy,然后右击程序集 – >转到.cctor。

.NET逆向工程 (一)

由于在<Module>类中有一些没有被很好的反编译的函数,所以,我们得出的结论是,在第一次调用期间必须会发生方法的修改,so,让我们继续深挖一下。

这里我们看到程序导入了kernel32.dll 的VirtualProtect函数的调用。 此功能用于设置存储器块的访问属性。 好吧,这给了我们这一信息:程序获取了方法真正存放的地址并在这个地址上设置了PAGE_EXECUTE属性,对于其他的信息,我们不需要知道了。 我们找到了修复方法的确切地址,没错,就是它。

.NET逆向工程 (一)

让我们在调用之后设置一个断点,然后从内存中导出程序集。

.NET逆向工程 (一)

保存并使用dnSpy打开新保存的程序模块。 现在我们看到我们要找的方法已经被反编译了,感觉很好。 我们做到了!

但仍然有一个问题,我们的.exe是有问题的,因为我们忘记删除掉“方法修复函数”。 程序运行后仍然会执行修复的方法(但方法已经被我们固化了),这是一件完全混乱的事情。

现在让我们删除该函数并再次保存程序集。

.NET逆向工程 (一)

.NET逆向工程 (一)

然后单击模块,然后单击文件 – >保存模块。 不要忘记设置MD Writer选项,如:

.NET逆向工程 (一)

好的,现在我们就有了一个用反编译的方法操作过的可运行的可执行文件。




原文发布时间为:2017年3月7日
本文作者:李白
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
2月前
|
开发框架 网络协议 .NET
深入.net框架
深入.net框架
12 0
|
5月前
|
SQL 开发框架 关系型数据库
16个值得推荐的.NET ORM框架
16个值得推荐的.NET ORM框架
178 1
|
监控
.Net“.NET研究”语言中关于AOP 的实现详解
文章主要和大家讲解开发应用系统时在.Net语言中关于AOP 的实现。LogAspect完成的功能主要是将Advice与业务对象的方法建立映射,并将其添加到Advice集合中。由于我们在AOP实现中,利用了xml配置文件来配置PointCut,因此对于所有Aspect而言,这些操作都是相同的,只要定义了正确的配置文件,将其读入即可。
971 0
|
监控
一起谈.NET技术,.Net语言中关于AOP 的实现详解
文章主要和大家讲解开发应用系统时在.Net语言中关于AOP 的实现。LogAspect完成的功能主要是将Advice与业务对象的方法建立映射,并将其添加到Advice集合中。由于我们在AOP实现中,利用了xml配置文件来配置PointCut,因此对于所有Aspect而言,这些操作都是相同的,只要定义了正确的配置文件,将其读入即可。
983 0
一起谈.NET技术,.Net Framework源代码中的模式——前言
  随着Visual Studio 2008的发布,微软根据MS-RL协议向开发人员提供了.NET Framework的源代码,包括基础类库 (BCL)、 ASP.NET、 WinForms和WPF等代码。
878 0
|
数据库 Windows
.NET 打包入门“.NET研究”
  1、在这个安装包制作的过程中,所用到的一些图片或者文件,如:快捷键图片,安装步骤中每个图形界面的背景图片等都要事先在[应用程序文件夹]中事先添加好这些图片,即在安装项目中添加这些图片,文件好像是解决方案下debug下的所有文件都拷贝,如exe、config、rpt还有图片等   2、安装包中的那个Install里面的方法的执行时间是在:所以的文件都安装好了后再执行其中的号码。
978 0
|
XML 数据格式
一起谈.NET技术,通过FxCop来验证.NET编码规范
  最近研究了fxcop,有些心得,写出来分享一下。   FxCop介绍:   FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly进行检查。它使用基于规则的引擎,来检查出你代码中不合规范的部分;你也可以定制自己的规则加入到这个引擎。
844 0
一起谈.NET技术,20条.NET编码习惯
1、不要硬编string/ numeric,可以使用一些常量代替。 (提高可读性) int Count;Count = 100;private static const int ZERO  =  0;if(  Count  ==  ZERO ){// 执行一些操作} 2、对于字符串比较-使用String. Empty ,而不是""。
789 0
|
数据库 Windows
一起谈.NET技术,.NET 打包入门
  1、在这个安装包制作的过程中,所用到的一些图片或者文件,如:快捷键图片,安装步骤中每个图形界面的背景图片等都要事先在[应用程序文件夹]中事先添加好这些图片,即在安装项目中添加这些图片,文件好像是解决方案下debug下的所有文件都拷贝,如exe、config、rpt还有图片等   2、安装包中的那个Install里面的方法的执行时间是在:所以的文件都安装好了后再执行其中的号码。
820 0
|
.NET Windows
“.NET研究”理解.NET程序集的执行过程
  对于一个已编译好的.NET程序集,Windows操作系统是如何启动执行的呢?日常使用中我们发现对于托管的和非托管的程序集编译器都会吧程序集编译成上海企业网站制作以.exe或.dll等为扩展名的文件,可见Windows加载器并没有区分是托管还是非托管的程序集,而且我们也知道对非托管的程序集是在编译器直接编译成了机器码,自然可以由CPU直接执行,而托管的.
864 0