我正在尝试从具有基于源代码的已知变量的 Win32 应用程序访问变量:
Foo foo; // Class foo
foo.mystring = "All your base are belong to us"; // where this is defined as: 'string mystring'
现在我尝试使用反汇编程序来反汇编 PE,我发现了这个
.rdata:00446074 aAllYourBaseAre db 'all your base are belong to us',0
现在我有另一个 win32 进程,它获取前一个 win32 应用程序的图像基地址,该应用程序具有我需要的类变量。
我使用以下代码获取进程地址:
HMODULE parent = ::GetModuleHandle(NULL);
if (parent) {
const BYTE* imageBase = reinterpret_cast<const BYTE*> ( parent );
const char* strMemberValue = *reinterpret_cast<const char**>((unsigned char*)imageBase + 0x00446074);
std::cout << "Value=" << strMemberValue;
}
父进程是我试图访问的进程。我还测试了父母是正确的过程。问题是,当我尝试通过转换基地址 + 偏移量来获取字符串时,我什么也得不到。
编辑:
我错过了我的观点。我无法重新编译目标 Win32 应用程序,它已经在生产中。但是我需要访问该可执行文件上的一些变量。我在这里的代码只是一个概念证明**
我也在做“DLL注入”
调试:
由于类是带有方法的结构,因此我假设我使用 IDAPro 挖掘的这段代码是Foo
00000000 ; ---------------------------------------------------------------------------
00000000
00000000 ; (Class Informer)
00000000 type_info struc ; (sizeof=0x8, variable size)
00000000 vftable dd ? ; offset (00000000)
00000004 _m_data dd ?
00000008 _m_d_name db 0 dup(?) ; string(C)
00000008 type_info ends
00000008
00000000 ; ---------------------------------------------------------------------------
但是,我仍然不确定这一点。