+ -
当前位置:首页 → 问答吧 → 如何修改文件属性?

如何修改文件属性?

时间:2011-04-11

来源:互联网

磁盘上有一dll文件 如何将.text段的属性改为可写?

以下方法是失败的Assembly code

    invoke CreateFile,offset szMykernel32,GENERIC_WRITE ,FILE_SHARE_WRITE ,NULL, OPEN_EXISTING ,FILE_ATTRIBUTE_NORMAL,NULL
        mov esi,eax
    invoke SetFilePointer,eax,20ch,NULL,FILE_CURRENT
    invoke WriteFile,esi,offset szProperty,4h,NULL,NULL



作者: feinushen   发布时间: 2011-04-11

在 pe 头部的节表,搜索到 .text 节,然后将其属性域加上 Writable 就可以了吧。

作者: zara   发布时间: 2011-04-11

校验和修改了没?

作者: Areslee   发布时间: 2011-04-11

引用 1 楼 zara 的回复:
在 pe 头部的节表,搜索到 .text 节,然后将其属性域加上 Writable 就可以了吧。
这句不太理解,就是加上可写属性对吧,可是不可写啊 ,加不上去,需要用到什么api函数?

作者: feinushen   发布时间: 2011-04-11

用LoadPE等工具修改不是很方便吗,为什么要写代码?写代码的话需要熟悉PE文件结构的,比较麻烦也没有必要

作者: aiwnx   发布时间: 2011-04-11

就是要用代码写啊

作者: feinushen   发布时间: 2011-04-11

现在到底是哪个阶段出现什么问题了?写方式打开文件正常吗?那个 20ch 的偏址是正确的、固定的?读取属性后,与 80000000h 或下再写回,拿个文件来测试的话,通过 ExeScope 之类的软件查看相应的 .text 节的属性成什么了?

作者: zara   发布时间: 2011-04-11

20cH是属性(60000020)的地址 我想直接把它改成(C0000040可读可写),可是失败了

作者: feinushen   发布时间: 2011-04-11

.const
szProperty db 040h, 000h, 000h, 0C0h,  


.code

invoke SetFilePointer,eax,20ch,NULL,FILE_CURRENT ;20Ch固定值
invoke WriteFile,esi,offset szProperty,4h,NULL,NULL

作者: feinushen   发布时间: 2011-04-11

lpNumberOfBytesWritten 这个参数不能位 NULL 造成的?给它个临时的空间试试。Win32API 里说,该参数不能与其后的 lpOverlapped 参数同为 NULL

作者: zara   发布时间: 2011-04-11