问题描述
我有一个大问题困扰着我,而今天却要努力解决。我如何从二进制文件加载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 ++转义符号的文本文件,而可以使用十六进制编辑器进行编辑。