首先把dll调起来看看

方法一

自己写loadlibrary()和GetProcAddress()来加载dll。

编写有一个导出函数的测试 的 A.dll

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"

extern "C" _declspec(dllexport)DWORD Sum(int nArg1,char*nArgv2)
{
    MessageBox(0,"this Sum call",0,MB_OK);
    return nArg1;
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        MessageBox(0,"The DLL_PROCESS_ATTACH...",0,MB_OK);
        break;
    case DLL_THREAD_ATTACH:
        MessageBox(0,"The DLL_THREAD_ATTACH...",0,MB_OK);
        break;
    case DLL_THREAD_DETACH:
        MessageBox(0,"The DLL_THREAD_DETACH...",0,MB_OK);
        break;
    case DLL_PROCESS_DETACH:
        MessageBox(0,"The DLL_PROCESS_DETACH:...",0,MB_OK);
        break;
    }
    return TRUE;
}

编译后到ida中看看他的导入表
在这里插入图片描述
双击看看结构
在这里插入图片描述
注意这里的个call的方法

我们这里编写一个load.exe来加载上面的A.dll

#include "windows.h"

//定义dll中要用的函数
typedef unsigned int  (*Sum)(int nArg1, char *nArgv2);

int main()
{
    //加载dll
    HMODULE Hmo = LoadLibraryA("A.dll");
    //获取函数地址
    Sum Abo = (Sum)GetProcAddress(Hmo,"Sum");
    //调用函数
    Abo(1,NULL);
    return 0;
}

我们可以使用OD或x64dbg来调试看看

调试前可以先把exe的地址随机化关了。
用010edit打开load.exe十六进制搜索40 81,改为 00 81,保存就OK了

在这里插入图片描述

执行到main函数,看到了这个load dll的地方
在这里插入图片描述
loadLibrary()返回地址在eax中
在这里插入图片描述
获取到函数地址后
在这里插入图片描述

开始真正调用执行这个dll中的函数了,接着F7进去就是DLL中的代码了。

方法二

直接拖进OD,这样只能调试dll的入口函数。



逆向  

调试dll

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!