首页
社区
课程
招聘
[求助][讨论]判断PE是exe还是dll
发表于: 2018-1-4 16:47 8504

[求助][讨论]判断PE是exe还是dll

2018-1-4 16:47
8504
问题如题;
<加密与解密>第10章开头讲PE文件格式有说
" EXE和DLL文件之间的区别完全是语义上的,他们使用完全相同的PE格式.唯一的区别就是用一个字段标识出这个文件是EXE还是DLL."  
翻了很久也没有找到到底是那个字段标识出来的?
少许涉及的地方就是IMAGE_FILE_HEADER.Characteristics这个关键字了,提到:"DLL文件这个字段一般是0210h",
当有2000h属性位也指明是dll文件;
但是我碰到了很多文件非0210,2000h的属性位也没有;
那么到底怎么判断是exe还是dll呢?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
2
那个bit设置就是dll,不设置就是exe,应该是这样
2018-1-4 20:02
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

IMAGE_FILE_DLL
0x2000
The  image  is  a  DLL  file.  While  it  is  an  executable  file,  it  cannot  be  run  directly.
2018-1-5 00:15
0
雪    币: 474
活跃值: (846)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
Diabloking https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313%28v=vs.85%29.aspx?f=255&MSPPEr ...
谢谢三楼,  一直想着pe是微软没公开的内容,忘了这个还有官方文档呢
2018-1-5 10:34
0
雪    币: 474
活跃值: (846)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
根据Characteristics的2000h属性位来判断感觉也是不靠谱的,有的dll这个位是没有设置的
2018-1-5 10:38
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
安全裤 根据Characteristics的2000h属性位来判断感觉也是不靠谱的,有的dll这个位是没有设置的
哪些没有?  你发个上来看看?
2018-1-5 13:15
0
雪    币: 222
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
holing 那个bit设置就是dll,不设置就是exe,应该是这样
那个bit位,是那个字段的第几位?
2018-6-20 11:28
0
雪    币: 277
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
typedef  struct  _IMAGE_FILE_HEADER  {
    WORD    Machine;
    WORD    NumberOfSections;
    DWORD  TimeDateStamp;
    DWORD  PointerToSymbolTable;
    DWORD  NumberOfSymbols;
    WORD    SizeOfOptionalHeader;
    WORD    Characteristics;
}  IMAGE_FILE_HEADER,  *PIMAGE_FILE_HEADER;

Characteristics
The  characteristics  of  the  image.  This  member  can  be  one  or  more  of  the  following  values.
Value        Meaning
IMAGE_FILE_RELOCS_STRIPPED
0x0001
Relocation  information  was  stripped  from  the  file.  The  file  must  be  loaded  at  its  preferred  base  address.  If  the  base  address  is  not  available,  the  loader  reports  an  error.
IMAGE_FILE_EXECUTABLE_IMAGE
0x0002
The  file  is  executable  (there  are  no  unresolved  external  references).
IMAGE_FILE_LINE_NUMS_STRIPPED
0x0004
COFF  line  numbers  were  stripped  from  the  file.
IMAGE_FILE_LOCAL_SYMS_STRIPPED
0x0008
COFF  symbol  table  entries  were  stripped  from  file.
IMAGE_FILE_AGGRESIVE_WS_TRIM
0x0010
Aggressively  trim  the  working  set.  This  value  is  obsolete.
IMAGE_FILE_LARGE_ADDRESS_AWARE
0x0020
The  application  can  handle  addresses  larger  than  2  GB.
IMAGE_FILE_BYTES_REVERSED_LO
0x0080
The  bytes  of  the  word  are  reversed.  This  flag  is  obsolete.
IMAGE_FILE_32BIT_MACHINE
0x0100
The  computer  supports  32-bit  words.
IMAGE_FILE_DEBUG_STRIPPED
0x0200
Debugging  information  was  removed  and  stored  separately  in  another  file.
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
0x0400
If  the  image  is  on  removable  media,  copy  it  to  and  run  it  from  the  swap  file.
IMAGE_FILE_NET_RUN_FROM_SWAP
0x0800
If  the  image  is  on  the  network,  copy  it  to  and  run  it  from  the  swap  file.
IMAGE_FILE_SYSTEM
0x1000
The  image  is  a  system  file.
IMAGE_FILE_DLL
0x2000
The  image  is  a  DLL  file.  While  it  is  an  executable  file,  it  cannot  be  run  directly.
IMAGE_FILE_UP_SYSTEM_ONLY
0x4000
The  file  should  be  run  only  on  a  uniprocessor  computer.
IMAGE_FILE_BYTES_REVERSED_HI
0x8000
The  bytes  of  the  word  are  reversed.  This  flag  is  obsolete.

楼上的    多找找答案就在MSDN里面
2018-6-20 12:50
0
游客
登录 | 注册 方可回帖
返回
//