紫雨轩 .Net, DNGuard HVM , .Net VMProtect

DNGuard HVM - Advanced .NET Code Protection Technology

常用链接

统计

积分与排名

友情连接

最新评论

让 .Net 程序 脱离 .net framework框架 运行(源代码实现说明)

前面介绍了 “让 .Net 程序 脱离 .net framework框架 运行的方法”,
该方法主要是利用了Fetion的框架来实现的,
今天我们要介绍的是不使用Fetion的框架,自己来实现Fetion框架的相关功能,
并给出相关实现代码。

关于Fetion框架它主要是有两个文件,FetionVM.exe和FetionVM.rsm。其中对于第二个文件,我们在介绍 native compile 保护的dotNet本地程序还原成dotNet IL程序集 时已经给出了其实现的源代码。

今回就给出 FetionVM.exe 功能实现的,近似代码。

首先使用 remote的试用版 创建一个demo 程序,然后对这个demo程序进行分析,分析发现它的 loader 实际使用是通过调用 rsdeploy.dll 导出的三个函数完成初始化工作,并把控制权转交到dotNet程序集。

这三个函数的原型定义:
typedef BOOL (WINAPI* pInitialize)(HMODULE h, LPCSTR szModule, LPCSTR szMainExe);
typedef BOOL (WINAPI* pReloc)(HMODULE hModule, PIMAGE_NT_HEADERS pNtHeader);
typedef BOOL (WINAPI* pResolveImportDLL)(HMODULE);

有朋友对此多有不满,删除完整实现代码,只对实现代码进行说明,感兴趣的朋友可以参考自己实现一下。

首先是Load要运行的dotNet程序文件,得到HMODULE 句柄,在三个函数中都要用到了。
然后调用 Initialize函数,szModule 是 dotNet程序的文件名,szMainExe 当前执行文件的文件名。
再调用 Reloc 处理重定位表。pNtHeader 也是 dotNet程序在内存中加载后的 NtHeader。
然后 调用ResolveImport,处理导入的dll。
最后将jmp到 dotNet程序的入口,转移控制权。


另外我还发现了另外一种使用实现方法,就是上次提到的那个 dotNet加密壳的 vm unpacker,它也使用了remotesoft 的虚拟框架,但是它没有使用rsdeploy导出的那三个函数。

昨天上 ReTeam 的论坛看到这个 unpacker 更新了。下载回来研究了一下,对于其初始化 DotNetVM 的部分还没有细看,主要看了一下它对框架 hook 的变化,发现其在Jit层中的 Hook 位置移动了。好像是Hook了 emitter对象的一个成员函数,emitter对象是被 complie调用的,位置应该算比较深了,方法体重构方式没有变化。目前的加密壳核心似乎都无法逃过其Hook的拦截。
它拦截的位置比较深,DNGuard HVM标准版对其也没有检测,不过对于DNGuard HVM标准加密的程序集,其脱壳功能仍然无害。试用版的就不能幸免了。

目前对其使用 dotnetvm 的方法比较感兴趣了,简单的看了一下,它只是load了rsdeploy.dll。没有调用rsdeploy导出的三个函数。看起来好像是直接调用了mscorwks中的函数,有可能它自己实现了这三个函数的功能。
感兴趣的朋友可以一起来分析一下,有什么收获再跟大家分享。














posted on 2007-09-09 23:10 紫雨轩 .Net 阅读(4844) 评论(32)  编辑 收藏 所属分类: 心情

评论

#1楼  2007-09-09 23:55 亚历山大同志      

还是只有一个Loader的源代码啊?晕死   回复  引用  查看    

#2楼 [楼主] 2007-09-09 23:59 瑞克      

这个是真正的loader,不是通过命令行调用 Fetion Exe的那种。

它实现的功能和 fetionvm.exe 实现的是一样的。   回复  引用  查看    

#3楼 [楼主] 2007-09-10 00:09 瑞克      

Fetion的框架实际就是使用了remotesoft的核心文件rsdeploy实现的。

这里给出的源代码就是演示了如何直接使用 rsdeploy这个核心文件实现虚拟框架。   回复  引用  查看    

#4楼  2007-09-10 00:41 ekinwt [未注册用户]

hihi....   回复  引用    

#5楼  2007-09-10 01:36 1111 [未注册用户]

学到不少东西   回复  引用    

#6楼  2007-09-10 02:15 无语人 [未注册用户]

rsdeploy.dll哪来的?
和上次不一个样吗?做了层壳。   回复  引用    

#7楼  2007-09-10 08:44 大石头      

楼主老大,这个还是loader呀,只是一段加载dll,然后调用三个函数的代码而已。我们关心的是那三个函数的内容呀。

还有,楼主怎么会有那么多时间来研究这个呢?难道不用上班?

期待一个能用好用的脱离框架运行的程序。   回复  引用  查看    

#8楼  2007-09-10 08:45 亚历山大同志      

@无语人
上次是在飞信的壳外头加了个壳,现在是自己的壳了   回复  引用  查看    

#9楼  2007-09-10 09:01 航天奇侠      


好像这个标题我已经看了超过6次。   回复  引用  查看    

#10楼 [楼主] 2007-09-10 09:01 瑞克      

@无语人
rsdeploy.dll 是remotesoft 虚拟框架的运行库文件。
这个dll原理说起来比较简单,就是hook了注册表处理以及文件处理相关的api函数,对程序的注册表访问和文件访问进行重定向。

  回复  引用  查看    

#11楼 [楼主] 2007-09-10 09:07 瑞克      

@大石头
这三个函数的实际实现的东西相对简单,从它们的名字就能看出来它们是做什么用的。

最核心的还是,rsdeploy实现的虚拟注册表和虚拟文件系统。这是实现虚拟框架的关键。

目前rsdeploy兼容性应该还可以。

  回复  引用  查看    

#12楼  2007-09-10 09:50 @菜鸟 [未注册用户]

既然“删除实际实现代码”, 那你的标题就不要再加上“(源代码实现) “
拉吧, 因为我就是冲着这个来的哦。   回复  引用    

#13楼 [楼主] 2007-09-10 09:54 瑞克      

@@菜鸟
多谢提醒,标题已修改。   回复  引用  查看    

#14楼  2007-09-10 10:28 fannee [未注册用户]

早行还看到源代码的,不过没来得及看,现在有时间了,但却删除了,不知何故?   回复  引用    

#15楼  2007-09-10 10:36 programdev [未注册用户]

写的不错   回复  引用    

#16楼  2007-09-10 11:52 无常      

“让 .Net 程序 脱离 .net framework框架 运行”
学习研究一下还可以,但在实际项目应用中还是别这么无聊的好。   回复  引用  查看    

#17楼  2007-09-10 12:58 春风话语 [未注册用户]

还是用飞信的框架简单多了
开发的软件我有不拿去卖
无所谓的   回复  引用    

#18楼 [楼主] 2007-09-10 13:12 瑞克      

@无常
实际项目中是没有什么意义。
小型程序也许可以凑合用用。

如果用native complie方式保护程序,这个倒也还算有用的。

  回复  引用  查看    

#19楼  2007-09-10 13:39 llinzzi [未注册用户]

希望继续研究下去
也希望有一套完整的方案   回复  引用    

#20楼  2007-09-10 18:11 黑月      

能介绍一下飞信的框架吗?


2008-应届生工作之路   回复  引用  查看    

#21楼 [楼主] 2007-09-10 18:39 瑞克      

@黑月
参考这里
http://www.cnblogs.com/rick/archive/2007/08/19/861329.html   回复  引用  查看    

#22楼  2007-09-11 00:00 daqingshu [未注册用户]

能用类似clix.exe这样的loader吗?
不过好像得自己实现。   回复  引用    

#23楼  2007-09-11 09:40 风海迷沙      

每天脱一次的感觉   回复  引用  查看    

#24楼 [楼主] 2007-09-11 20:52 瑞克      

@风海迷沙
汗。。。   回复  引用  查看    

#25楼  2007-09-12 13:21 webqsoft [未注册用户]

研究精神可嘉
没有多大意义   回复  引用    

#26楼  2007-09-13 15:16 IPO [未注册用户]

@webqsoft
“研究精神可嘉
没有多大意义” 你知道个屁啊,意义大得很。   回复  引用    

#27楼 [楼主] 2007-09-14 23:58 瑞克      

大家各自需求不一样;P   回复  引用  查看    

#28楼  2007-10-25 22:11 梁 [未注册用户]

楼主啊,我利用FetionVM.exe 实现了这个功能,但是在我用.net写的winform程序中涉及到一个读取文件的操作,
代码如下:
string strRoot = Directory.GetCurrentDirectory();
string[] fileList = Directory.GetFiles(strRoot + "\\Code");

但在运行程序时,报文件未找到的异常(System.IO.FileNotFoundException:)

这是怎么回事啊,用WinExec(" ", )调用程序与直接运行程序有什么区别啊?   回复  引用    

#29楼 [楼主] 2007-11-29 17:51 瑞克      

注意在虚拟环境中后当前路径变化了.   回复  引用  查看    

#30楼  2008-01-25 17:33 webqsoft [未注册用户]

@IPO

我就知道个你呀,你这只屁
  回复  引用    

#31楼  2008-09-23 17:13 李玲 [未注册用户]

博主可以传一份代码给我不?40117637@qq.com   回复  引用    

#32楼  2008-10-08 10:16 madfox [未注册用户]

@webqsoft
如果你感觉没意义就别看这些东西啊   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-09-10 13:08 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: