zoukankan      html  css  js  c++  java
  • 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直接调试运行了

    从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。
  • 相关阅读:
    公司的CMS参数
    Kafka 如何保证消息可靠性
    我来了
    spring解决乱码
    mybatis反向工程
    Unicode控制字符
    功能跟进记录
    创建IDataProvider实例
    腾讯2016研发工程师笔试题36车 6跑道 没有计时器 最少要几次取前三
    .net mvc下拉列表DropDownList控件绑定数据
  • 原文地址:https://www.cnblogs.com/feizianquan/p/15115132.html
Copyright © 2011-2022 走看看