如何注入从文件加载的shellcode?

问题描述

我有一个大问题困扰着我,而今天却要努力解决。我如何从二进制文件加载Shellcode并在目标进程中正确注入?如果仅在程序示例的自身源代码上使用shellcode进行测试,则可以正常工作。

当Shellcode来自文件时,为什么这不起作用?某天某人已经遇到了这个问题?

这里是经过测试的代码(改编自this显示一个MessageBox)>

return session.createquery(criteria).getResultList();

解决方法

这是因为您正在使用sizeof(xcode)。在第一种情况下,它是一个字符串常量,其大小在编译时已知。在您的情况下,第二个sizeof(xcode)返回4(或8,取决于体系结构)。您应该改用file_size_in_byte。看到这段代码:

pointer_after_allocated = (DWORD)VirtualAllocEx(process_handle,NULL,sizeof(xcode),MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
....
if (WriteProcessMemory(process_handle,(LPVOID)pointer_after_allocated,&xcode[0] /*(LPCVOID) shellcode*/,0))

在VirtualAllocEx和WriteProcessMemory中,sizeof都是没有意义的。考虑替换为文件大小:

pointer_after_allocated = (DWORD)VirtualAllocEx(process_handle,file_size_in_byte,&xcode[0],0))

如Botje所述:
更新1:您可以改为通过xcode.data()xcode.size()
更新2:C ++转义符号\x31(四个符号(字节))是二进制字节的C ++文本十六进制表示形式。是要由人类阅读/编辑的东西。真正的.bin文件不应是带有C ++转义符号的文本文件,而可以使用十六进制编辑器进行编辑。