首页
社区
课程
招聘
[原创]dotNet程序另类注册机--反射技术初探
发表于: 2008-5-9 12:11 14240

[原创]dotNet程序另类注册机--反射技术初探

2008-5-9 12:11
14240
“反射(Reflection)是.NET中的一个重要技术,通过反射,可以在运行时获得某个类型的各种信息,包括方法、属性、事件及构造函数等,还可以获得每个成员的名称、限定符和参数等信息。可以说有了反射,即可对每个类型了如指掌。知道了类型信息,就可以在程序运行时动态的创建对象,调用方法,设置属性和激发事件,所有这些都是在程序运行时而不是编译时完成的。”
以上引自《.NET2.0面向对象编程揭秘》一书的第15章。
反射原来是这么回事,可以在运行时获得某类的各种信息,我们也不难理解为何通过反射技术可以脱掉大部分加壳的.NET程序。联想到以前跟踪软件时找到了计算注册码的关键call,却苦于看不懂算法而郁闷,这时很多人想过能不能把这个call的代码提取出来放到我们自己的程序里,记得以前laomms好像写过这样一篇文章,讲如何从程序中扣代码出来为自己所用。然而.NET时代来了,不用我们费那么大劲,反射技术为我们解决了所有问题。下面我们来看一个例子:

上图是用Reflector反编译的一个.NET程序,可以看到此程序的名称被混淆了,不过没有流程混淆,各个方法还是能看到,这样我们就能很快定位我们的关键call,关键方法如下:

其实这时我们已经可以编写注册机了,不过这不是我们今天的重点,我们要做到的是在我们的程序里调用这个函数,而不是我们自己重写这个函数。
我们在VS里新建一个工程,将.NET的程序添加到我们的资源里,这样做的目的只是为了最后的注册机只需要一个文件即可使用,不像用keymaker制作的内存主机那样非要放着程序目录才能使用。好了,开始写我们的注册机:
//从资源中读取程序程序集xx
Byte[] yuan = WindowsFormsApplication1.Properties.Resources.xx;
//载入程序集
Assembly ass = Assembly.Load(yuan);
//获取关键方法所在的类
Type t = ass.GetType(".bk");
//获取关键方法
MethodInfo reg = t.GetMethod("b", new Type[] { typeof(String) });
//定义变量
object sn;//注册码
String hardno;//硬件码
hardno = textBox1.Text;
//调用关键方法得到,让他为我们完成注册码的计算
sn = reg.Invoke(null, new object[]{hardno});
textBox2.Text = (String)sn;


至此,此另类注册机完成。附上运用反射技术时有用的图:

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 234
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
支持樓主發表.net文章,呵呵
2008-5-9 12:41
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
向大牛们学习。
2008-5-9 12:55
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
4
真的好方便
2008-5-9 13:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很好。
不过写这种注册算法的应该是比较笨的那种了。。。
哪能在程序里面直接计算注册码了再比较的,最多也只是比较个中间码好点。
2008-5-9 14:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
真的好方便!!!!!
2008-5-9 19:44
0
雪    币: 5275
活跃值: (451)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
7
支持,不过现在这种可被直接反射的程序较少
2008-5-9 21:05
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
8
现在都有哪些anti,tankaiha能否先透漏些。期待tankaiha的书早日出版
2008-5-9 21:21
0
雪    币: 5275
活跃值: (451)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
9
anti反射?最简单的,加密壳,IL是加密的,所以反射无法直接得到,需要invoke后hook jit。再一个例子,native loader,本地程序的根本无法assembly.load。

呵呵,不过支持elance原创,一般被仅被混淆的程序还是可以使用这种方法的。
2008-5-10 01:08
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
10
tankaiha tracky .net玩的都不错 哈哈 学习学习
2008-5-11 08:11
0
雪    币: 195
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习学习学习学习学习学习学习学习学习学习
2008-6-25 20:14
0
雪    币: 204
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
tankaiha tracky .net玩的都不错 哈哈 学习学习
2008-6-26 16:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
很好,很强大。
2008-6-27 10:46
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好文章,以后将一直关注
2008-9-2 19:43
0
雪    币: 211
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
只能反射简单的类,如果被反射类的构造函数调用了其他类的函数, 这种方法可行吗,?尤其是构造函数无参数调用其他类的方法时.
2009-1-11 21:34
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
支持楼主,接着发表一些文章
2009-5-16 08:53
0
雪    币: 86
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
了解了解

学习之
2009-5-16 08:59
0
游客
登录 | 注册 方可回帖
返回
//