首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

代码注入PE文件的代码有关问题~

2012-01-12 
代码注入PE文件的代码问题~~代码《加密解密技术内幕》:if(strstr((const char *)header-section_header[0].

代码注入PE文件的代码问题~~
代码《加密解密技术内幕》:

if(strstr((const char *)header->section_header[0].Name,".text")!=NULL) 

virtsize=header->section_header[0].Misc.VirtualSize; 
//此段的真实长度 
physaddress=header->section_header[0].PointerToRawData; 
//此段的物理偏移 
physsize=header->section_header[0].SizeOfRawData; 
//此段的物理长度 
peaddress=dos_head->e_lfanew; 
//得到PE文件头的开始偏移 

peHeader peH; 
tmpaddress=(unsigned long )&peH; 
//得到结构的偏移 
tmpaddress1=(unsigned long )&(peH.section_header[0].Characteristics); 
//得到变量的偏移 
flagaddress=tmpaddress1-tmpaddress+2; 
//得到属性的相对偏移 
flags=0x8000; 
//一般情况下,“.text”段是不可读写的,如果我们要把数据写入这个段需要改变其属性,实际上这个程序并没有把数据写入“.text”段,所以并不需要更改,但如果你实现复杂的功能,肯定需要数据,肯定需要更改这个值, 

space=physsize-virtsize; 
//得到代码段的可用空间,用以判断可不可以写入我们的代码 
//用此段的物理长度减去此段的真实长度就可以得到 
progRAV=header->opt_head.ImageBase; 
//得到程序的装载地址,一般为400000 
codeoffset=header->opt_head.BaseOfCode-physaddress; 
//得到代码偏移,用代码段起始RVA减去此段的物理偏移 
//应为程序的入口计算公式是一个相对的偏移地址,计算公式为: 
//代码的写入地址+codeoffset 

entrywrite=header->section_header[0].PointerToRawData+header->section_header[0].Misc.VirtualSize;
//代码写入的物理偏移
mods=entrywrite%16; 
//对齐边界 
if(mods!=0) 
{
entrywrite+=(16-mods);
} oldentryaddress=header->opt_head.AddressOfEntryPoint; 
//保存旧的程序入口地址 
newentryaddress=entrywrite+codeoffset; 
//计算新的程序入口地址 
return; 


问题:
1.entrywrite=header->section_header[0].PointerToRawData+header->section_header[0].Misc.VirtualSize;
为什么entrywrite等于物理偏移+真实长度?
2.entrywrite+=(16-mods); 是什么意思 为什么这样写?
想了好久没明白,忘高手解释下,谢谢~~ 


[解决办法]
不懂,帮顶
[解决办法]
entrywrite+=(16-mods); 是对齐啊
你才看第二章,接着看就会明白
[解决办法]
lz,在搞加壳,免杀?
你要看看PE文件结构。。
忘记了,以前搞过一段时间。
好像有什么DOS根,PE头,还有好多节。
在节目录可以计算出节位置。。

热点排行