在另一个进程中获取变量的地址

时间:2015-07-16 13:12:29

标签: c++ dll-injection

我有一个相当直接的目标(它太简单了,因为它只是一个测试),将DLL注入hello_world以更改它打印的内容,但不修改hello_world.exe以提供帮助。我的目的是让我学习如何将类似的东西发送到更大的应用程序,而这些应用程序与hello_world不同。

我有一个test.exe创建了hello_world.exe进程,并且远程线程在hello_world.exe中加载了dll库。所以现在问题是如何处理dll ...这里是dll和hello_world的来源。我在hello_world中有一个Sleep(1000),所以dll在打印之前有一个时刻可以改变它...但除此之外,目标是改变“str”而不改变hello_world源代码中的任何内容,只是dll。

dll:

Sub GiveItAWhirl()
    Dim oCmd As OLEObject

    Set oCmd = Sheet1.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Left:=100, Top:=100, Width:=100)
    oCmd.Object.BackColor = RGB(255, 0, 0)

End Sub

Hello world:

#include <cstdio>
#include <windows.h>

void main(){
    //this should be where i somehow get the "str" pointer from hello_world and change it
}

BOOL DllMain(HINSTANCE hInst,DWORD reason,LPVOID lpvReserved){
    switch(reason){
        case DLL_PROCESS_ATTACH:
            main();
            break;
        case DLL_PROCESS_DETACH:

            break;
    }
    return TRUE;
}

感谢任何回复的人。

1 个答案:

答案 0 :(得分:0)

简答:不要。

  • 根本不可能做到这一点:如果你没有源代码,你怎么知道变量的地址?你怎么知道它的大小?。
  • 几乎不可能做到正确:您如何测试原始应用程序是否仍能正常工作?
  • 即使你有源代码,你仍然需要找出原始变量的地址(很久以前链接器定义的内容......除非你的应用程序的符号映射是一个严重的障碍)。< / LI>
  • 根据您的操作系统,您会遇到额外的麻烦,因为地址可能会在不同的调用之间发生变化(如果变量位于动态库中)
  • 你肯定会成为所有病毒检查者的敌人(乱搞其他应用程序就像病毒一样)。