ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c – 使用注入的DLL从远程进程调用函数

2019-08-31 11:07:49  阅读:431  来源: 互联网

标签:dll-injection c code-injection dll codecave


我看到了一个类似但仍然不同的问题,所以只是为了澄清这不是13428881的欺骗(在注入的DLL中调用函数).

我现在有什么:
一个DLL,注入到目标进程中,显示​​一个消息框并摆弄数学运算.

我将来想要的是什么:
一个DLL,它可以操纵和玩弄目标进程的内部.

实现所需操作的下一步是在我注入的进程中调用远程线程中的方法.

我们来举个例子:
我有一个C应用程序,它有int main,让我们说它看起来像这样:

int PrintText(string text)
{
    cout << text;
    return 1;
}

int main()
{
    while (true)
    {
        PrintText("From the DLL");
    }
}

好吧,这很可爱,我的目标应用程序当前正在打印一些文本,而且它似乎非常愉快地这样做.它以令人难以置信的速度向它发送垃圾邮件,但如果我需要的话,我可以使用线程和睡眠等来降低速度.事实是这不是问题,这里的代码没有编译或测试,我也不打算使用这个确切的代码.我实际上正在玩游戏.

现在,假设我创建了一个指向方法PrintText的指针,并且我知道该进程中的地址.我如何在外部调用它,传递参数?

在本地,我相信它看起来像这样:

int i;
int (*PrintSomeText)(string) = PrintText;

然后,我可以使用引用调用此函数,如下所示:

i = operation("Text to be printed", PrintSomeText);

根据我的理论,这应该声明一个名为i的整数,然后定义一个指向返回int的方法的指针,将一个字符串作为参数,指针存储PrintText中指针的值. (或者那种性质的东西).

非常好,所以我可以通过指针调用我自己的函数,这很好,实际上是破解.我真的对这种能力感到惊讶,现在我感觉像是超人.我会去保存一些婴儿或其他东西,brb.

回来,所以现在我想再继续下去,并采取下一步措施.假设我知道该方法位于目标进程中的地址100处(十进制,我可能会以十六进制表示,因为我正在使用CheatEngine / OllyDBG在目标进程中查找方法,但对于此示例我们’保持简单).

我假设我注入的DLL完全拥有自己的空间,它是否有更高的目标进程访问权限?我怎么能找到这个?

谢谢你的时间,
玩笑

编辑:一个小小的注释,我正在阅读C教程书,到目前为止它已被证明是非常有用的.我注意到我忘了包含我的操作方法,所以对于遗失的道歉.如果需要,请告诉我.谢谢!

编辑nr 2:我刚刚制作了一些可编译的代码来测试这个,因为我在没有IDE的情况下从书中写下了大部分这个免费的手,而IDE终于自己配置了,所以这里是我目前的代码与…合作

#include "stdafx.h"
#include <iostream>

using namespace std;

int PrintText(char * Text)
{
    cout << Text << endl;
    return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int (*Print)(char*) = PrintText;
    char Text[] = "Hello, world!";
    PrintText(Text);
    int x = (*Print)("Oh my word, it really works!");
    cin.get();
    return 0;
}

注意我还没有让它无限期地运行,所以是的,请原谅,我会很快添加它.

解决方法:

Dauphic几乎是爆炸性的,我完全可以控制,就像我想要的那样,对目标进程来说.所以,这就是我正在做的调用目标流程方法(对于未来读者的兴趣):

>在内存中找到该方法.为此,我首先禁用了ASLR (Address space layout randomization),然后在目标程序中本地创建了一个指向我方法的指针,然后使用iostream将指针转储到屏幕,现在我知道了方法的地址.
>在要注入的dll中创建一个typedef.这是我有点卡住的地方,但我知道有些人这么做了,所以我设法把它从它们中解脱出来.就我而言,这就是typedef的样子:

typedef int __printPrototype(char* text);

>将目标应用程序中方法的地址绑定到注入的dll中的再现:

int (*Print)(char*);
Print = (__printPrototype*)0x0041121C;
Print("I'm injecting myself into you.");

完善!

感谢dauphic和一位名叫DarkstaR的好朋友.

标签:dll-injection,c,code-injection,dll,codecave
来源: https://codeday.me/bug/20190831/1775198.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有