首页
社区
课程
招聘
[求助]PE文件中需要填写哪些字段,才能使之成为一个有效的PE文件?(解决了)
发表于: 2007-6-13 18:20 8025

[求助]PE文件中需要填写哪些字段,才能使之成为一个有效的PE文件?(解决了)

2007-6-13 18:20
8025
我在手工填写一个PE文件,写好以后执行不了,OD也无法加载。

已填写的字段如下:(未填写的字段均为0)

DOS HEADER:

    Signature: 5A4Dh
    .....
    e_lfanew : 44h

DOS stub:

    B4 4C CD 21

NT HEADERS:

    Signature: 4550h
   
    FILE_HEADER:

      Machine             : 14Ch
      NumberOfSections    : 2
      SizeOfOptionalHeader: 0E0h
      Characteristics     : 10Fh

    OPTIONAL_HEADER32:

      Magic                      : 10Bh
      SizeOfCode                 : 1000h
      AddressOfEntryPoint        : 1000h
      BaseOfCode                 : 1000h
      BaseOfData                 : 2000h
      ImageBase                  : 300000h
      SectionAlignment           : 1000h
      FileAlignment              : 200h
      MajorOperatingSystemVerSion: 5
      MajorSubsystemVersion      : 4
      SizeOfImage                : 3000h
      SizeOfHeaders              : 200h
      Subsystem                  : 2 (IMAGE_SUBSYSTEM_WINDOWS_GUI)
      SizeOfStackReserve         : 100000h
      SizeOfStackCommit          : 1000h
      SizeOfHeapReserve          : 100000h
      SizeOfHeapCommit           : 1000h
      NumberOfRvaAndSizes        : 10h
      
      DataDirectory[16]          : (一个也没有填写,因为我不需要导入表)

SECTION TABLE:

   Section 1:

      Name1              : "A01"
      VirtualSize        : 1000h
      VirtualAddress     : 1000h
      SizeOfRawData      : 400h
      PointerToRawData   : 200h
      Characteristics    : 0E00000E0h

   Section 2:

      Name1              : "A02"
      VirtualSize        : 1000h
      VirtualAddress     : 2000h
      SizeOfRawData      : 200h
      PointerToRawData   : 600h
      Characteristics    : 0E00000C0h

   Section 3:  (terminator)

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

收藏
免费
支持
分享
最新回复 (12)
雪    币: 224
活跃值: (85)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
不懂 帮顶 我也想知道
2007-6-13 23:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
代码区至少应有一条ret指令吧
2007-6-14 07:28
0
雪    币: 433
活跃值: (176)
能力值: ( LV13,RANK:1250 )
在线值:
发帖
回帖
粉丝
4
不是那个原因,现在OD根本就打不开,看不到代码
2007-6-14 11:35
0
雪    币: 2506
活跃值: (1040)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
5
http://bbs.pediy.com/showthread.php?threadid=28316

可以参考一下dwing给的那个附件。
2007-6-14 11:55
0
雪    币: 433
活跃值: (176)
能力值: ( LV13,RANK:1250 )
在线值:
发帖
回帖
粉丝
6
实际上,我在开始做这件事之前已经看过“一块三毛钱”前辈写的那个打造180字节PE的文章,上面那些字段基本上都是照着他那个文章填的,当然,导入表的数据目录没有填,因为我不需要。

我现在的问题不是怎样缩小文件体积,而是要怎样使文件跑起来?说具体点就是,我上面填的那些字段有哪些填得不对?有哪些应该填而没有填?Windows加载器是根据什么判断我的文件无效?等等。
2007-6-14 12:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
将你手工填写的那个PE文件传上来看看
2007-6-14 14:11
0
雪    币: 433
活跃值: (176)
能力值: ( LV13,RANK:1250 )
在线值:
发帖
回帖
粉丝
8
在这    
上传的附件:
2007-6-14 15:05
0
雪    币: 2506
活跃值: (1040)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
9
把下面这段代码编译一下和你的对照看看:

.386
.model flat, stdcall
option casemap :none

.code

start:
pushad
mov
ebp,esp
mov esp,ebp
popad
ret

end
start

代码是从你给的文件里面抄的。RadASM中的连接选项选这个:
5,O,$B\LINK.EXE /SUBSYSTEM:WINDOWS /MERGE:.rsrc=.text /RELEASE /VERSION:4.0 /LIBPATH:"$L" /OUT:"$5",3,4
还是传一个编译好的程序和RadASM的工程文件吧:
上传的附件:
2007-6-14 16:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
将文件偏移地址 0170处的数值 0010  改为 0020 就行了
2007-6-14 16:59
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
11
可以看看Yoda的网站,有这方面内容,好象要代理
以前貌似在哪里看到过,Win2K必须要输入表?
2007-6-14 18:11
0
雪    币: 433
活跃值: (176)
能力值: ( LV13,RANK:1250 )
在线值:
发帖
回帖
粉丝
12
嗯,确实是这样。我本来只想要一个区段,但是不知什么地方说WinXP下少于两个区段不行,就想干脆建两个区段,但都指向同一地址好了。谁知道还是不行,呵呵。

谢谢帮助
2007-6-15 08:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习了,什么时候我也能这样啊
2007-6-15 21:39
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册