【问题标题】:Access method's parameter with dll injection使用 dll 注入访问方法的参数
【发布时间】:2020-11-27 00:39:38
【问题描述】:

我有一个 64 位进程,我想出了它的静态链接库方法之一。

此方法的来源:

int SSL_connect(SSL *s)
{
    if (s->handshake_func == 0)
        /* Not properly initialized yet */
        SSL_set_connect_state(s);

    return (s->method->ssl_connect(s));
}

实际装配图:click here.

我想要做的是使用 dll 注入来访问SSL 参数。我正在使用 x64dbg + ScyllaHide 插件来注入 dll,因此不需要任何自定义注入工具。我成功地在这个进程中注入了一个简单的dll,所以我认为对于这个案例来说已经足够了。

是否有机会在不修改程序集的情况下从这里访问变量? 谁能给我一些骨头,好吗? (我不要求代码,我只需要一些提示,因为我是 C++ 和 dll 注入领域的新手,而不是专家)。

【问题讨论】:

    标签: c++ dll-injection


    【解决方案1】:

    如果你能找到 SSL_connect 函数的地址,你可以detour它。这意味着您可以在方法的开头将JMP 指令写入您的patched-方法。

    如果您的 jumped-to 方法具有相同的调用约定和签名,您可以简单地访问 SSL* 并使用它做您想做的事,然后您可以跳回去...

    要让跳转正常工作,您需要恢复 org 代码或创建 org 方法的副本...

    另一种方式是硬件断点:例如阅读here

    【讨论】:

    • 这涉及到 OP 特别想要避免的“修改程序集”,除非他/她指的是修改可执行文件。
    • 你不修改程序集,只修改内存中的loaded 版本...
    • 只需谷歌搜索“Detours”。但你也可以自己做。要使加载的代码可写,您需要在 Windows 上调用“VirtualProtect”...
    • 在这里你可以找到一个很好的用 Delphi 编写的“Detours-Library”:github.com/MahdiSafsafi/DDetours。或者您可以使用 Microsoft Detours-lib:github.com/microsoft/Detours
    • 这些库比简单的“拳头指令交换补丁”更好,因为这些库也可以用于多线程代码。
    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多