首页
社区
课程
招聘
[原创]从逆向的角度看几个.NET的基本概念
发表于: 2006-9-23 01:17 14209

[原创]从逆向的角度看几个.NET的基本概念

2006-9-23 01:17
14209

从逆向的角度看几个.NET的基本概念

    在英文版发了一篇,发现人气实在是低(人数=喜欢.net的 & 喜欢用英语看文章的),又想起了lccracker说过的,语言的障碍害死人啊,于是决定还是用母语写续篇。考虑到大多数人没看过前篇,因此一并写成中文,并加上新的内容。
    最近我在看《Essential .NET》,因为在玩了一段时间逆向后,我觉得有必要从大局和根本上了解一下.NET(学习-实践-再学习吗)。这本书虽主要从程序开发的角度上来讲.NET,但对基本概念解释的比较清楚,也让我理清了脑中一些曾经模糊的概念。下文有的是直接引用原文(或翻译),有的则是我的总结。下面开始。

Assembly:这个词用中文还不大好翻译,有的地方叫组合件,也算是表达它的意思。它比较容易和Module这个词混淆。来看书中怎么说:An assembly is a logical collection of one or more modules。这里有个词很关键,就是logical,说明assembly只是一个逻辑上的概念。它由一个或多个Module组成,其中只有一个Module含有manifest information。在程序中引用Assembly时,不需要加扩展名和路径(因为它不是文件),但调用它的最终结果是在一个文件路径(或网络地址)上找到组成它的Modules。比如,.NET系统最基础的mscorlib就是一个Assembly,这里也没加扩展名。现在,你可以往下看Module的定义,两个结合起来理解就很容易了。

Module:书中对Module的解释很到位:A CLR module is a byte stream, typically stored as a file of the local file system or on Web server. In contrast, module is physical and assembly is logical。很明显,我们通常说的文件就可以看成Module,它是物理的概念。这里文件有多种:一是不包含Manifest Information的,这种文件没法直接运行,只能被主程序调用;一种是含有Manifest,但是是Class Library,由于扩展名通常是dll,所以你可以把它看作win32的下的动态链接库,不同就是win32下的dll有入口程序DllMain,但是Class Library不含Entry Point;第三种就是我们用的最多的,含有Manifest,也定义了入口程序的exe文件。(记住,定义了Manifest的module已经升级成为assembly了)下面通过命令行看一下三种文件各是怎么生成的:

Csc.exe /t:module md.cs
(创建名叫md.netmodule的Module,当然,它不含ManifestInfo)
Csc.exe /t:library /addmodule:md.netmodule lib.cs
(用一个等式来解释吧:lib.dll+md.netmodule->lib.dll assembly。这时lib.dll升级为assembly)
Csc.exe /r:lib.dll main.cs
(创建main.exe,它是个assembly。它引用了(reference) lib.dll assembly,后者包含两个Module: md and lib.)

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

收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 47147
活跃值: (20460)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
tankaiha的几篇文章会让更多人关注.net逆向。下次写文章别忘参加“看雪学院2006金秋读书季”优秀文章评选,呵~
2006-9-23 07:38
0
雪    币: 5275
活跃值: (456)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
3
呵呵,有好文章就参加。这篇更像读书笔记,没啥技术含量。
2006-9-23 08:52
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
4
学习!拜一下!
2006-9-24 03:44
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
5
Interface:这个中文应该叫作界面。

学习ing......
Interface 中文更习惯性的称作接口。
2006-10-21 14:54
0
雪    币: 5275
活跃值: (456)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
6
最初由 hawking 发布
Interface 中文更习惯性的称作接口。


正解,应该是接口,已修改。很多东西我更喜欢直接称英文,所以看英文的MSDN比看中文的MSDN更容易理解。
2006-10-21 16:49
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
7
请教楼主,哪里有PEBrowse使用方面的资料,用它调试了几个.net程序,感觉太不舒服了,可能是自己还没有摸到门吧。在坛子里搜除了您的一篇之外,再没有找到跟其使用相关的资料了。
2006-10-27 11:52
0
雪    币: 5275
活跃值: (456)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
8
PEB网站上有个tutorial,PEB的调试习惯与OD相差较大,所以感觉不舒服,不过已经是.net下最好的调度器之一了。
2006-10-27 12:21
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
请问PEB网站的地址是什么啊?
想好好了解一下.net下的动态调试,我到现在为止都一直是反汇编成il后修改
2006-10-27 12:52
0
雪    币: 5275
活跃值: (456)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
10
汗,工具版里发了好多次了,你搜下

当然,程序能直接反编译成il是最好,可是你首先要脱壳,再就是要能看懂流程混淆和名称混淆。现在能直接反编译或直接调试的软件越来越少啦。
2006-10-27 21:48
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
11
LS
很少用QQ?
2006-10-27 22:01
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
12
首先要脱壳?
貌似目前能加。NET的强壳不多的哦
2006-10-28 11:37
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
强壳不多的哦
2006-10-28 20:46
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
强壳不多的哦
2006-10-28 20:54
0
雪    币: 5275
活跃值: (456)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
15
我觉得应该说.net下壳不多,但都不弱。
莫非楼上的已经搞定了不少,呵呵
2006-10-29 13:42
0
游客
登录 | 注册 方可回帖
返回
//