PE 空白区注入shellcode

实现流程:

1、载入程序到注入shellcode的地方,运行shellcode

2、运行完之后跳转回原程序的入口地址

3、继续原程序的运行


注入过程:

1、将要执行的代码进行反编译转换为汇编语言的形式,例如MessageBoxA(0,0,0,0)

那么就为:

6A 00 6A 00 6A 00 6A 00

2、还需要调用MessageBoxA的函数地址,CALL的硬编码为E8,那么就是E8 XX XX XX XX,这里只是作为本地演示,那么直接取本地user32.dll中的MessageBoxA的函数地址为77D507EA

根据公式进行计算:填写地址 = 要调用的函数的地址 - 当前写入shellcode的地址 - 当前程序的基址 - 5

3、此时硬编码已经是E8 XX XX XX XX,然后我们把自己写入的shellcode运行完之后还需要回到原始程序OEP,那么还需要进行跳转F9 XX XX XX XX

根据公式进行计算:填写地址 = 要跳转到的地址 - 当前写入shellcode的地址 - 当前程序的基址 - 5

4、最后程序打开还需要先到shellcode处进行,所以需要在原程序的入口地址修改为当前shellcode的位置!

缺点:这也只能算是单机版,因为没有进行动态加载获取MessageBoxA的地址,因为每个机器中的内存中user32.dll中MessageBoxA地址都不是唯一的

你可能感兴趣的:(PE 空白区注入shellcode)