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

DNGuard HVM - Advanced .NET Code Protection Technology

常用链接

统计

积分与排名

友情连接

最新评论

直接在.Net程序(C#)中执行 native code

不使用C++CLI,不使用 native dll.
直接在 .Net 程序 中之行 native code。

在vb时代就曾经有不少好事者做过在vb中直接调用之行汇编代码。
还专门做出了通用的模块来进行汇编代码的动态生成。

实际上这就是执行 inline asm 。

.Net 中这个老方法仍然有效。不过今天要介绍的不是这个,而是一个函数接口更多样的方式。

大概是06年写过一个帖子 在 C# 中动态调用 native dll 的导出函数  。

今天介绍的方法和这个有一个公共点,都是利用了.Net 2.0的一个新特性。

Marshal.GetDelegateForFunctionPointer

和动态调用api不一样的是,函数指针不是从外部 dll 获取的,而是.Net程序动态分配的。
实际上也是执行  inline asm。

它相比vb时代的老方法,优点是,函数原型可以多样化,
调用可以通过委托方式,参数中的.Net类型到本地类型由框架自动转换。

可能这个一般人可能会很少用到。

实际用途有哪些呢?
拿来玩玩,显摆显摆;)

在安全保护方面还是可以适当利用利用。
如纯开发员的角度来看,可以将这个应用到注册授权认证的代码中。

另外可以用在 .Net 安全保护工具上,加密工具加密.Net程序后自动给程序集中注入这些调用。
甚至可以把一些简单方法体在加密时就编译成native代码插入。
而且可以不用附带一个native dll。

posted on 2008-01-22 21:46 紫雨轩 .Net 阅读(2289) 评论(12)  编辑 收藏 所属分类: C# Winform编程

评论

#1楼  2008-01-22 21:58 tweg [未注册用户]

想法是非常好的,实验看看……   回复  引用    

#2楼  2008-01-22 22:50 无常      

继续啊   回复  引用  查看    

#3楼  2008-01-22 22:59 Zealic      

See here:
http://www.cnblogs.com/zealic/archive/2007/02/28/658836.html   回复  引用  查看    

#4楼 [楼主] 2008-01-23 09:24 瑞克      

@zealic
如果是动态调用dll中的函数,函数原型基本上都是已知,使用委托的方式更方便一些,这样编译器能帮助做很多有效的检测,如参数传递错误.
虽然效率优势不是很大,但也还是有的.

这种动态调用一般用在模块化程序中,像固定的调用直接用PInvoke更好一些.

正常程序开发中,一般不会遇到要去调用一个原型未知的函数.   回复  引用  查看    

#5楼  2008-01-23 09:35 巫云      

可以支持内嵌x86汇编语言吗?   回复  引用  查看    

#6楼 [楼主] 2008-01-23 09:51 瑞克      

@巫云
就是执行内嵌汇编代码.   回复  引用  查看    

#7楼  2008-01-23 12:35 装配脑袋      

这样子我是不是要自己建一个栈帧,然后把栈操作也给做了呢。我看到JIT中有利用这种做法(动态执行一段汇编函数)来初始化值类型。   回复  引用  查看    

#8楼  2008-01-23 13:30 A.Z! [未注册用户]

3楼好像分析比较透彻   回复  引用    

#9楼 [楼主] 2008-01-23 18:01 瑞克      

@装配脑袋
不用那样,就像调用api函数一样.   回复  引用  查看    

#10楼  2008-01-23 20:27 孤帆1 [未注册用户]

本人已经有实现的程序   回复  引用    

#11楼 [楼主] 2008-01-24 01:40 瑞克      

@孤帆1
呵呵,拿出来秀一秀啊。   回复  引用  查看    

#12楼  2008-01-24 09:17 孤帆1 [未注册用户]

以前在大学时入魔的结果.
能辅助生成vb6和C#内嵌汇编.
有需要的请给我发email:roisegufan@126.com   回复  引用