逆向分析_DLL基础(1)

DLL基础

(一) 相关名词
简写 全称
DLL Dynamic Link Library
PE Portable Executable
COM Component Object Model
COFF Common Object File Format

DLL 动态链接库 ,PE源于Unix COFF文件。

(二) 调用DLL文件

powershell查看可执行后缀名

$env:PATHEXT
#.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL

dll不能直接运行,用rundll32regsvr32调用dll中的函数

rundll32 shell32.dll,Control_RunDLL     #控制面板
rundll32 CreatDLL,ShowDlg

regsvr32 /s regsvr32 /s CreatDLL.dll
regsvr32 /u /s CreatDLL.dll

系统中的dll文件

Kernel32.dll    #包含用于管理内存\进程和线程的各个函数 
User32.dll  #包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数
GDI32.dll   #包含用于画图和显示文本的各个函数
ComDlg32.dll    #包含常用对话框(如File Open和File Save)
ComCtl32.dll    #支持所有的常用窗口控件
(三) VC++ DLL编程基础
  • 环境: VC++ 6.0/Visual Studio

这里只介绍Non-MFC DLL,导出函数为标准的C接口,能被一般程序所调用

  • 用VC++6.0新建Win32 Dynamic-Link Library 工程,项目名称PrintDll,添加C++源文件PrintDll.cpp,内容如下:
extern "C" _declspec(dllexport) void print();
#include
//#include "stdafx.h"
void print()
{
	MessageBox(NULL,"content","title",MB_OK);
}

MessageBox原型

int MessageBox(
HWND hWnd,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType);
#hWnd 是指向父窗口的句柄,如果没有父窗口,可以把这个参数设置为 NULL
#lpText 是需要显示的文字。显示字符串的起始地址
#lpCaption 是在窗口上标题显示。 
#uType 是窗口组合按钮和显示图标的类型

比普通C添加了extern "C" _declspec(dllexport)字段和导出函数

(四) 运行测试

编译生成dll文件后,在项目Debug目录下有PrintDll.dll文件,shift + 右键打开cmd/powershell(win10),运行

rundll32 PrintDll.dll,print

出现窗口。

(五) 用自己的程序调用外部DLL函数

CreateDll工程类型为Win32 Dynamic-Link Library

//CreateDll.cpp
extern "C" _declspec(dllexport) int sum(int a,int b);
int sum(int a,int b)
{
	return a+b;
}

UseDll工程类型为Win32 Console Application

//UseDll.cpp
#include
using namespace std;
extern "C" _declspec(dllimport) int sum(int a,int b);

int main(int argc,char *argv[])
{
	int a;
	a = sum(8,10);
	cout << "a=" <<a <<endl;
	return 0;
}

编译CreateDll生成CreateDll.dllCreateDll.lib,复制到UseDll项目的Debug目录,在UseDll项目添加文件:CreateDll.lib,CreateDll.dll,编译运行UseDll。

(六) DLL相关的工具软件
软件 功能
PEID 察看软件所用的编程语言和加壳类型
eXeScope 解析、修改E格式文件中的资源
Dependency Walker DLL的基本分析工具
PE Explorer 浏览、修改软件资源,具备有W32DASM 软件的反编译能力和PEditor软件的PE文 件头编辑功能
PPEE 高级PE工具
CFF Explorer PE工具

你可能感兴趣的:(Binary)