tempad
Readygo技术搜索引擎 >>网络技术 >> 怎么找到EXE文件的数据区,并修改之?(VC)

怎么找到EXE文件的数据区,并修改之?(VC)

Readygo技术搜索引擎 网络搜索 efish 2008-1-17 16:28:00

怎么找到EXE文件的数据区,并修改之?(VC)

楼主haogong(浩公)2002-09-18 10:37:09 在 VC/MFC / 基础类 提问

比如文件为当前目录下cc.exe,我要找到“hello”这个字符串?怎么做? 问题点数:50、回复次数:11Top

1 楼wabc(wabc)回复于 2002-09-18 10:56:33 得分 5

用UltraEdit打开你的文件,查找hello这个关键字,即可。  
  程序中所用的其他预定义数据也在找到的哪个位置。Top

2 楼yaotang(baobao)回复于 2002-09-18 11:00:14 得分 5

看一下PE文件格式可能有帮助DumpBin还是什幺好象有这功能  
  在VCKBASE.com的杂志里有些内容可用吧  
  Top

3 楼haogong(浩公)回复于 2002-09-18 11:00:38 得分 0

不是,这个我会。我是说编程的时候,用什么函数等多谢!Top

4 楼mfkzj(鹰翔)回复于 2002-09-18 11:00:58 得分 10

executable-file   format  
   
  .exe   executable-file   header   format   (3.1)  
   
  an   executable   (.exe)   file   for   the   microsoft   windows   operating   system   contains   a   combination   of   code   and   data   or   a   combination    
  of   code,   data,   and   resources.   the   executable   file   also   contains   two   headers:   an   ms-dos   header   and   a   windows   header.   the    
  next   two   sections   describe   these   headers;   the   third   section   describes   the   code   and   data   contained   in   a   windows   executable   file.    
   
  ms-dos   header  
   
  the   ms-dos   (old-style)   executable-file   header   contains   four   distinct   parts:   a   collection   of   header   information   (such   as   the    
  signature   word,   the   file   size,   and   so   on),   a   reserved   section,   a   pointer   to   a   windows   header   (if   one   exists),   and   a   stub   program.    
  the   following   illustration   shows   the   ms-dos   executable-file   header:    
  if   the   word   value   at   offset   18h   is   40h   or   greater,   the   word   value   at   3ch   is   typically   an   offset   to   a   windows   header.   applications    
  must   verify   this   for   each   executable-file   header   being   tested,   because   a   few   applications   have   a   different   header   style.    
  ms-dos   uses   the   stub   program   to   display   a   message   if   windows   has   not   been   loaded   when   the   user   attempts   to   run   a    
  program.    
  for   more   information   about   the   ms-dos   executable-file   header,   see   the   microsoft   ms-dos   programmer"s   reference    
  (redmond,   washington:   microsoft   press,   1991).    
   
  windows   header  
   
  the   windows   (new-style)   executable-file   header   contains   information   that   the   loader   requires   for   segmented   executable   files.    
  this   information   includes   the   linker   version   number,   data   specified   by   the   linker,   data   specified   by   the   resource   compiler,   tables    
  of   segment   data,   tables   of   resource   data,   and   so   on.   the   following   illustration   shows   the   windows   executable-file   header:    
  the   following   sections   describe   the   entries   in   the   windows   executable-file   header.    
   
  information   block  
   
  the   information   block   in   the   windows   header   contains   the   linker   version   number,   the   lengths   of   various   tables   that   further    
  describe   the   executable   file,   the   offsets   from   the   beginning   of   the   header   to   the   beginning   of   these   tables,   the   heap   and   stack    
  sizes,   and   so   on.   the   following   list   summarizes   the   contents   of   the   header   information   block   (the   locations   are   relative   to   the    
  beginning   of   the   block):    
   
  location         description  
   
  00h         specifies   the   signature   word.   the   low   byte   contains   "n"   (4eh)   and   the   high   byte   contains   "e"   (45h).    
  02h         specifies   the   linker   version   number.    
  03h         specifies   the   linker   revision   number.    
  04h         specifies   the   offset   to   the   entry   table   (relative   to   the   beginning   of   the   header).    
  06h         specifies   the   length   of   the   entry   table,   in   bytes.    
  08h         reserved.    
  0ch         specifies   flags   that   describe   the   contents   of   the   executable   file.   this   value   can   be   one   or   more   of   the   following   bits:    
   
  bit         meaning  
   
  0         the   linker   sets   this   bit   if   the   executable-file   format   is   singledata.   an   executable   file   with   this   format    
  contains   one   data   segment.   this   bit   is   set   if   the   file   is   a   dynamic-link   library   (dll).    
  1         the   linker   sets   this   bit   if   the   executable-file   format   is   multipledata.   an   executable   file   with   this   format    
  contains   multiple   data   segments.   this   bit   is   set   if   the   file   is   a   windows   application.    
   
  if   neither   bit   0   nor   bit   1   is   set,   the   executable-file   format   is   noautodata.   an   executable   file   with   this   format    
  does   not   contain   an   automatic   data   segment.    
   
  2         reserved.    
  3         reserved.    
  8         reserved.    
  9         reserved.    
  11         if   this   bit   is   set,   the   first   segment   in   the   executable   file   contains   code   that   loads   the   application.    
  13         if   this   bit   is   set,   the   linker   detects   errors   at   link   time   but   still   creates   an   executable   file.    
  14         reserved.    
  15         if   this   bit   is   set,   the   executable   file   is   a   library   module.    
   
  if   bit   15   is   set,   the   cs:ip   registers   point   to   an   initialization   procedure   called   with   the   value   in   the   ax   register    
  equal   to   the   module   handle.   the   initialization   procedure   must   execute   a   far   return   to   the   caller.   if   the    
  procedure   is   successful,   the   value   in   ax   is   nonzero.   otherwise,   the   value   in   ax   is   zero.    
  the   value   in   the   ds   register   is   set   to   the   library"s   data   segment   if   singledata   is   set.   otherwise,   ds   is   set    
  to   the   data   segment   of   the   application   that   loads   the   library.    
   
  0eh         specifies   the   automatic   data   segment   number.   (0eh   is   zero   if   the   singledata   and   multipledata   bits   are    
  cleared.)    
  10h         specifies   the   initial   size,   in   bytes,   of   the   local   heap.   this   value   is   zero   if   there   is   no   local   allocation.    
  12h         specifies   the   initial   size,   in   bytes,   of   the   stack.   this   value   is   zero   if   the   ss   register   value   does   not   equal   the   ds    
  register   value.    
  14h         specifies   the   segment:offset   value   of   cs:ip.    
  18h         specifies   the   segment:offset   value   of   ss:sp.    
   
  the   value   specified   in   ss   is   an   index   to   the   module"s   segment   table.   the   first   entry   in   the   segment   table    
  corresponds   to   segment   number   1.    
  if   ss   addresses   the   automatic   data   segment   and   sp   is   zero,   sp   is   set   to   the   address   obtained   by   adding   the   size   of    
  the   automatic   data   segment   to   the   size   of   the   stack.    
  Top

5 楼mfkzj(鹰翔)回复于 2002-09-18 11:02:03 得分 5

 
  1ch         specifies   the   number   of   entries   in   the   segment   table.    
  1eh         specifies   the   number   of   entries   in   the   module-reference   table.    
  20h         specifies   the   number   of   bytes   in   the   nonresident-name   table.    
  22h         specifies   a   relative   offset   from   the   beginning   of   the   windows   header   to   the   beginning   of   the   segment   table.    
  24h         specifies   a   relative   offset   from   the   beginning   of   the   windows   header   to   the   beginning   of   the   resource   table.    
  26h         specifies   a   relative   offset   from   the   beginning   of   the   windows   header   to   the   beginning   of   the   resident-name   table.    
  28h         specifies   a   relative   offset   from   the   beginning   of   the   windows   header   to   the   beginning   of   the   module-reference   table.    
  2ah         specifies   a   relative   offset   from   the   beginning   of   the   windows   header   to   the   beginning   of   the   imported-name   table.    
  2ch         specifies   a   relative   offset   from   the   beginning   of   the   file   to   the   beginning   of   the   nonresident-name   table.    
   
  30h         specifies   the   number   of   movable   entry   points.    
  32h         specifies   a   shift   count   that   is   used   to   align   the   logical   sector.   this   count   is   log2   of   the   segment   sector   size.   it   is    
  typically   4,   although   the   default   count   is   9.   (this   value   corresponds   to   the   /alignment     linker   switch.   when   the    
  linker   command   line   contains   /a:16,   the   shift   count   is   4.   when   the   linker   command   line   contains   /a:512,   the   shift    
  count   is   9.)    
  34h         specifies   the   number   of   resource   segments.    
  36h         specifies   the   target   operating   system,   depending   on   which   bits   are   set:    
   
  bit         meaning  
   
  0         operating   system   format   is   unknown.    
  1         reserved.    
  2         operating   system   is   microsoft   windows.    
  3         reserved.    
  4         reserved.    
   
  37h         specifies   additional   information   about   the   executable   file.   it   can   be   one   or   more   of   the   following   values:    
   
  bit         meaning  
   
  1         if   this   bit   is   set,   the   executable   file   contains   a   windows   2.x   application   that   runs   in   version   3.x   protected    
  mode.    
  2         if   this   bit   is   set,   the   executable   file   contains   a   windows   2.x   application   that   supports   proportional   fonts.    
  3         if   this   bit   is   set,   the   executable   file   contains   a   fast-load   area.    
   
  38h         specifies   the   offset,   in   sectors,   to   the   beginning   of   the   fast-load   area.   (only   windows   uses   this   value.)    
  3ah         specifies   the   length,   in   sectors,   of   the   fast-load   area.   (only   windows   uses   this   value.)    
  3ch         reserved.    
  3eh         specifies   the   expected   version   number   for   windows.   (only   windows   uses   this   value.)    
   
  segment   table  
   
  the   segment   table   contains   information   that   describes   each   segment   in   an   executable   file.   this   information   includes   the    
  segment   length,   segment   type,   and   segment-relocation   data.   the   following   list   summarizes   the   values   found   in   the   segment    
  table   (the   locations   are   relative   to   the   beginning   of   each   entry):    
   
  location         description  
   
  00h         specifies   the   offset,   in   sectors,   to   the   segment   data   (relative   to   the   beginning   of   the   file).   a   value   of   zero   means   no    
  data   exists.    
  02h         specifies   the   length,   in   bytes,   of   the   segment,   in   the   file.   a   value   of   zero   indicates   that   the   segment   length   is   64k,    
  unless   the   selector   offset   is   also   zero.    
  04h         specifies   flags   that   describe   the   contents   of   the   executable   file.   this   value   can   be   one   or   more   of   the   following:    
   
  bit         meaning  
   
  0         if   this   bit   is   set,   the   segment   is   a   data   segment.   otherwise,   the   segment   is   a   code   segment.    
  1         if   this   bit   is   set,   the   loader   has   allocated   memory   for   the   segment.    
  2         if   this   bit   is   set,   the   segment   is   loaded.    
  3         reserved.    
  4         if   this   bit   is   set,   the   segment   type   is   movable.   otherwise,   the   segment   type   is   fixed.    
  5         if   this   bit   is   set,   the   segment   type   is   pure   or   shareable.   otherwise,   the   segment   type   is   impure   or    
  nonshareable.    
  6         if   this   bit   is   set,   the   segment   type   is   preload.   otherwise,   the   segment   type   is   loadoncall.    
  7         if   this   bit   is   set   and   the   segment   is   a   code   segment,   the   segment   type   is   executeonly.   if   this   bit   is   set    
  and   the   segment   is   a   data   segment,   the   segment   type   is   readonly.    
   
  8         if   this   bit   is   set,   the   segment   contains   relocation   data.    
  9         reserved.    
  10         reserved.    
  11         reserved.    
  12         if   this   bit   is   set,   the   segment   is   discardable.    
  13         reserved.    
  14         reserved.    
  15         reserved.    
   
  06h         specifies   the   minimum   allocation   size   of   the   segment,   in   bytes.   a   value   of   zero   indicates   that   the   minimum   allocation    
  size   is   64k.    
   
  resource   table  
   
  the   resource   table   describes   and   identifies   the   location   of   each   resource   in   the   executable   file.   the   table   has   the   following   form:    
   
   
   
  word   rscalignshift;  
  typeinfo   rsctypes;  
  byte   rscendnames;  
   
  following   are   the   members   in   the   resource   table:    
   
  rscalignshift         specifies   the   alignment   shift   count   for   resource   data.   when   the   shift   count   is   used   as   an   exponent   of   2,    
  the   resulting   value   specifies   the   factor,   in   bytes,   for   computing   the   location   of   a   resource   in   the    
  executable   file.    
  rsctypes         specifies   an   array   of   typeinfo   structures   containing   information   about   resource   types.   there   must    
  be   one   typeinfo   structure   for   each   type   of   resource   in   the   executable   file.    
  rscendtypes         specifies   the   end   of   the   resource   type   definitions.   this   member   must   be   zero.    
  rscresourcenames         specifies   the   names   (if   any)   associated   with   the   resources   in   this   table.   each   name   is   stored   as    
  consecutive   bytes;   the   first   byte   specifies   the   number   of   characters   in   the   name.    
  rscendnames         specifies   the   end   of   the   resource   names   and   the   end   of   the   resource   table.   this   member   must   be    
  zero.    
   
  type   information  
   
  the   typeinfo   structure   has   the   following   form:    
   
   
   
  typedef   struct   _typeinfo   {  
  word   rttypeid;  
  word   rtresourcecount;  
  dword   rtreserved;  
  nameinfo   rtnameinfo[];  
  }   typeinfo;  
   
  following   are   the   members   in   the   typeinfo   structure:    
   
  rttypeid         specifies   the   type   identifier   of   the   resource.   this   integer   value   is   either   a   resource-type   value   or   an   offset    
  to   a   resource-type   name.   if   the   high   bit   in   this   member   is   set   (0x8000),   the   value   is   one   of   the   following    
  resource-type   values:    
  Top

6 楼mfkzj(鹰翔)回复于 2002-09-18 11:04:20 得分 10

 
  value         resource   type  
   
  rt_accelerator         accelerator   table    
  rt_bitmap         bitmap    
  rt_cursor         cursor    
  rt_dialog         dialog   box    
  rt_font         font   component    
  rt_fontdir         font   directory    
  rt_group_cursor         cursor   directory    
  rt_group_icon         icon   directory    
  rt_icon         icon    
  rt_menu         menu    
  rt_rcdata         resource   data    
  rt_string         string   table    
   
  if   the   high   bit   of   the   value   in   this   member   is   not   set,   the   value   represents   an   offset,   in   bytes   relative   to   the    
  beginning   of   the   resource   table,   to   a   name   in   the   rscresourcenames   member.    
   
  rtresourcecount         specifies   the   number   of   resources   of   this   type   in   the   executable   file.    
  rtreserved         reserved.    
  rtnameinfo         specifies   an   array   of   nameinfo   structures   containing   information   about   individual   resources.   the    
  rtresourcecount   member   specifies   the   number   of   structures   in   the   array.    
   
  name   information  
   
  the   nameinfo   structure   has   the   following   form:    
   
   
   
  typedef   struct   _nameinfo   {  
  word   rnoffset;  
  word   rnlength;  
  word   rnflags;  
  word   rnid;  
  word   rnhandle;  
  word   rnusage;  
  }   nameinfo;  
   
  following   are   the   members   in   the   nameinfo   structure:    
   
  rnoffset         specifies   an   offset   to   the   contents   of   the   resource   data   (relative   to   the   beginning   of   the   file).   the   offset   is   in   terms   of    
  alignment   units   specified   by   the   rscalignshift   member   at   the   beginning   of   the   resource   table.    
  rnlength         specifies   the   resource   length,   in   bytes.    
  rnflags         specifies   whether   the   resource   is   fixed,   preloaded,   or   shareable.   this   member   can   be   one   or   more   of   the   following    
  values:    
   
  value         meaning  
   
  0x0010         resource   is   movable   (moveable).   otherwise,   it   is   fixed.    
  0x0020         resource   can   be   shared   (pure).    
  0x0040         resource   is   preloaded   (preload).   otherwise,   it   is   loaded   on   demand.    
   
  rnid         specifies   or   points   to   the   resource   identifier.   if   the   identifier   is   an   integer,   the   high   bit   is   set   (8000h).   otherwise,   it   is   an    
  offset   to   a   resource   string,   relative   to   the   beginning   of   the   resource   table.    
  rnhandle         reserved.    
  rnusage         reserved.    
   
  resident-name   table  
   
  the   resident-name   table   contains   strings   that   identify   exported   functions   in   the   executable   file.   as   the   name   implies,   these   strings    
  are   resident   in   system   memory   and   are   never   discarded.   the   resident-name   strings   are   case-sensitive   and   are   not    
  null-terminated.   the   following   list   summarizes   the   values   found   in   the   resident-name   table   (the   locations   are   relative   to   the    
  beginning   of   each   entry):    
   
  location         description  
   
  00h         specifies   the   length   of   a   string.   if   there   are   no   more   strings   in   the   table,   this   value   is   zero.    
  01h   -   xxh         specifies   the   resident-name   text.   this   string   is   case-sensitive   and   is   not   null-terminated.    
  xxh   +   01h         specifies   an   ordinal   number   that   identifies   the   string.   this   number   is   an   index   into   the   entry   table.    
   
  the   first   string   in   the   resident-name   table   is   the   module   name.    
   
  module-reference   table  
   
  the   module-reference   table   contains   offsets   for   module   names   stored   in   the   imported-name   table.   each   entry   in   this   table   is   2    
  bytes   long.    
   
  imported-name   table  
   
  the   imported-name   table   contains   the   names   of   modules   that   the   executable   file   imports.   each   entry   contains   two   parts:   a   single    
  byte   that   specifies   the   length   of   the   string   and   the   string   itself.   the   strings   in   this   table   are   not   null-terminated.    
   
  entry   table  
   
  the   entry   table   contains   bundles   of   entry   points   from   the   executable   file   (the   linker   generates   each   bundle).   the   numbering    
  system   for   these   ordinal   values   is   1-based--that   is,   the   ordinal   value   corresponding   to   the   first   entry   point   is   1.    
  the   linker   generates   the   densest   possible   bundles   under   the   restriction   that   it   cannot   reorder   the   entry   points.   this   restriction   is    
  necessary   because   other   executable   files   may   refer   to   entry   points   within   a   given   bundle   by   their   ordinal   values.    
  the   entry-table   data   is   organized   by   bundle,   each   of   which   begins   with   a   2-byte   header.   the   first   byte   of   the   header   specifies   the    
  number   of   entries   in   the   bundle   (a   value   of   00h   designates   the   end   of   the   table).   the   second   byte   specifies   whether   the    
  corresponding   segment   is   movable   or   fixed.   if   the   value   in   this   byte   is   0ffh,   the   segment   is   movable.   if   the   value   in   this   byte   is    
  0feh,   the   entry   does   not   refer   to   a   segment   but   refers,   instead,   to   a   constant   defined   within   the   module.   if   the   value   in   this   byte   is    
  neither   0ffh   nor   0feh,   it   is   a   segment   index.    
   
  for   movable   segments,   each   entry   consists   of   6   bytes   and   has   the   following   form:    
   
  location         description  
   
  00h         specifies   a   byte   value.   this   value   can   be   a   combination   of   the   following   bits:    
   
  bit(s)         meaning  
   
  0         if   this   bit   is   set,   the   entry   is   exported.    
  1         if   this   bit   is   set,   the   segment   uses   a   global   (shared)   data   segment.    
  3-7         if   the   executable   file   contains   code   that   performs   ring   transitions,   these   bits   specify   the   number   of   words    
  that   compose   the   stack.   at   the   time   of   the   ring   transition,   these   words   must   be   copied   from   one   ring   to   the    
  other.    
   
   
  Top

7 楼yaotang(baobao)回复于 2002-09-18 11:13:29 得分 5

不如看一下侯Sir上的<<Windows系统大奥秘>>了Top

8 楼VisualStudio(万物皆框架)回复于 2002-09-18 11:18:23 得分 5

学习Top

9 楼timeguest(三少爷)回复于 2002-09-18 11:36:46 得分 5

要是你愿意,可以分析PE文件格式;  
  要是你不愿意,直接读exe文件到内存中来个字符串搜索就可以了。  
  Top

10 楼haogong(浩公)回复于 2002-09-18 12:56:18 得分 0

好主意Top

11 楼yaotang(baobao)回复于 2002-09-18 13:57:38 得分 0

要是你不愿意,直接读exe文件到内存中来个字符串搜索就可以了  
  这办法不错  
  怎么读呀  
  Top

责任编辑: efish 参与评论 查找更多:
相关文章
麦克风的音量如何控制? 麦克风的音量如何控制?
为什么不能调用呢? 为什么不能调用呢?
关于OFFICE XP的激活问题 关于OFFICE XP的激活问题
關於一個printer做打印的問題?在線等 關於一個printer做打印的問題?在線等
关于windows2000server利用组策略指派应用程序给客户… 关于windows2000server利用组策略指派应用程序给客户机(windows 2000 professional)的问题?
如何做一个坐标图 如何做一个坐标图
谁有金蝶K/3系统的实施文档? 谁有金蝶K/3系统的实施文档?
怎样让下拉框架中显示图片 怎样让下拉框架中显示图片
excel下拉列表的问题 excel下拉列表的问题
数据库名称 数据库名称
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎