• dll劫持


    首先构建一个正常的dll 创建动态链接库

    // dllmain.cpp : 定义 DLL 应用程序的入口点。
    #include "pch.h"
    #include <stdio.h>
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
                         )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH: puts("init");
        case DLL_THREAD_ATTACH: break;
        case DLL_THREAD_DETACH:break;
        case DLL_PROCESS_DETACH:break;
            break;
        }
        return TRUE;
    }
    void test1()
    {
        puts("test1");
    }

    void test2()
    {
        puts("test2");
    }

    写2个函数做测试 编写def 文件

    LIBRARY
     EXPORTS
        test2
        test1

    让后生成 复制 dll和lib 文件到调用文件位置

     接着编写调用这个dll 文件

    #pragma comment(lib,"Dll1.lib")
    void test1();
    void test2();
    
    int main()
    {
    
        test1();
        test2();
    
        system("pause");
    }

    可以成功运行 后,编写一个dll  劫持刚刚那个dll 功能 先把他dll 改成old.dll  b编一个新的dll1.dll 替换它

    // dllmain.cpp : 定义 DLL 应用程序的入口点。
    #include "pch.h"
    #include <stdio.h>
    
    void test();
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
                         )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH: puts("int new"); break;
        case DLL_THREAD_ATTACH: break;
        case DLL_THREAD_DETACH:break;
        case DLL_PROCESS_DETACH:break;
            break;
        }
        return TRUE;
    }
    typedef void (*fun)();
    //函数转发
    #pragma comment(linker,"/export:test2=old.test2")
    void test()
    {
        HMODULE hModule=LoadLibrary(L"old.dll");
        //获取导出函数地址
        fun pfn = (fun)GetProcAddress(hModule, "test1");
        printf("%p", pfn);
        if (pfn!=NULL)
        {
            puts("success");
            pfn();
        }
        //卸载
        FreeLibrary(hModule);
    }

    def 编写

     接着在运行exe 看到成功劫持原先函数 

    如果中间有什么问题 可以在 dll 项目添加调试断点

     

     填写 调用方的exe 地址  就可以f5直接调试运行了

    从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。
  • 相关阅读:
    翻译:实时通信协议UDP-RT——Michael Pan
    翻译:为DAW优化Windows
    翻译:Windows and Real-Time——Daniel Terhell
    笔记4:IIS6发布网站后“对XX路径的访问被拒绝”
    杂记3:VS使用Web Deploy一键发布网站到服务器
    杂记2:VS2013创建Windows服务实现自动发送邮件
    杂记1:不安装Oracle客户端远程连接Oracle的方法
    DevExpress随笔系列
    DevExpress(5): ASPxUploadControl上传照片后用ASPxBinaryImage展示
    DevExpress(4): ASPxGridView随笔
  • 原文地址:https://www.cnblogs.com/feizianquan/p/15115132.html
Copyright © 2020-2023  润新知