首页
社区
课程
招聘
IceExt分析文章系列 1.如何判断一个程序是传统程序还是.Net assemblly.
发表于: 2006-6-12 19:03 6700

IceExt分析文章系列 1.如何判断一个程序是传统程序还是.Net assemblly.

2006-6-12 19:03
6700

我在分析IceExt时,想研究一下它的Startup Code.分析了一半,忽然映入眼中一个函数,起初以为作用仅是分析PE格式是否合法,分析到一半,才恍然大悟,是验证它是否.Net Assembly。

原理相当简单,验证数据目录是否有第16项(0x0f),第16项是否有值。
传统的可执行程序是只有15项数据目录(0-0x0E)。

.text:01002E25 IsPEdotNetAssembly proc near            ; CODE XREF: start+9Fp
.text:01002E25                 cmp     word ptr ds:1000000h, 5A4Dh
.text:01002E2E                 jnz     short loc_1002E57
.text:01002E30                 mov     eax, ds:100003Ch
.text:01002E35                 lea     eax, [eax+1000000h]
.text:01002E3B                 cmp     dword ptr [eax], 4550h
.text:01002E41                 jnz     short loc_1002E57
.text:01002E43                 movzx   ecx, word ptr [eax+18h]
.text:01002E47                 cmp     ecx, 10Bh
.text:01002E4D                 jz      short loc_1002E6D
.text:01002E4F                 cmp     ecx, 20Bh
.text:01002E55                 jz      short loc_1002E5A
.text:01002E57
.text:01002E57 loc_1002E57:                            ; CODE XREF: IsPEdotNetAssembly+9j
.text:01002E57                                         ; IsPEdotNetAssembly+1Cj ...
.text:01002E57                 xor     eax, eax
.text:01002E59                 retn
.text:01002E5A ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:01002E5A
.text:01002E5A loc_1002E5A:                            ; CODE XREF: IsPEdotNetAssembly+30j
.text:01002E5A                 cmp     dword ptr [eax+84h], 0Eh
.text:01002E61                 jbe     short loc_1002E57
.text:01002E63                 xor     ecx, ecx
.text:01002E65                 cmp     [eax+0F8h], ecx
.text:01002E6B                 jmp     short loc_1002E7B
.text:01002E6D ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:01002E6D
.text:01002E6D loc_1002E6D:                            ; CODE XREF: IsPEdotNetAssembly+28j
.text:01002E6D                 cmp     dword ptr [eax+74h], 0Eh
.text:01002E71                 jbe     short loc_1002E57
.text:01002E73                 xor     ecx, ecx
.text:01002E75                 cmp     [eax+0E8h], ecx
.text:01002E7B
.text:01002E7B loc_1002E7B:                            ; CODE XREF: IsPEdotNetAssembly+46j
.text:01002E7B                 setnz   cl
.text:01002E7E                 mov     eax, ecx
.text:01002E80                 retn
.text:01002E80 IsPEdotNetAssembly endp

如果它是.net assembly,开始代码会怎么做了?分析中。


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

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 47147
活跃值: (20480)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
就是数据目录表中的COM字段有没有值吧?
不知道这方法准不准,.net PE结构是从COM字段扩展开去的,所以.net PE此处肯定是有值的。
2006-6-12 19:27
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
3
是编译器自动生成的启动代码,方法一定是对的。
2006-6-12 19:35
0
游客
登录 | 注册 方可回帖
返回
//