windows中dllmain,创建进程和转发dll

dllmain
dll模块的函数入口

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
/*
DLL_PROCESS_ATTACH
用途:用于初始化资源
调用时机:第一次使用Loadlibrary加载到进程地址空间时调用
返回值:若此时返回FALSE, 会弹出一个错误, 然后立刻调用DLLMain, 并传入DLL_PROCESS_DETACH
DLL_PROCESS_DETACH
用途:用于释放资源
调用时机:调用FreeLibrary每次调用会减少引用计数, 当计数值为0, 则卸载dll
*/

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
OutputDebugString(TEXT("INterdll"));
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
main函数之前执行的代码
dllmain
全局对象的构造
全局变量使用函数赋值
函数转发
函数转发:加载的DLL模块内部不提供函数实现,通过转发的形式,让其在其他DLL模块中查找函数实现并调用
//标准写法
#pragma comment(linker, "/EXPORT:[查找的函数名]=[函数实现所在的DLL模块].[实际导出的函数名]")

//案例
#pragma comment(linker, "/EXPORT:?fnDll@@YAHXZ=Dllorg.?fnDll@@YAHXZ")
 

替换dll: 通过函数转发的机制,替换自身的所创建的DLL为库DLL,从而使目标EXE程序在运行DLL时运行的是自己的DLL
替换流程
通过Depends工具,查找原DLL导出的函数名
新建一个DLL工程,在模块内通过函数转发调用该原DLL中的所有函数
将自己工程生成的DLL文件名替换为原DLL名字
将原DLL文件名更改为函数转发中的DLL名字
 

创建API
Winexec:早期兼容16位的操作系统提供的API
WinExec("cmd /k copy D:\\process.exe d:\\1.exe", SW_NORMAL);
// 指令 显示模式
ShellExecute
//打开一些文本文件:如tet、ppt、doc等
ShellExecute(NULL,
_T("edit"),
_T("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt"),
NULL,
NULL,
SW_NORMAL);

//打开文件夹
ShellExecute(NULL,
_T("explore"),
_T("C:\\Users\\Administrator\\Desktop"),
NULL,
NULL,
SW_NORMAL);

//打开搜索栏,不过一般无法准确定位到根目录搜索栏
ShellExecute(NULL,
_T("find"),
NULL,
NULL,
_T("C:\\Users\\Administrator\\Desktop"),
SW_NORMAL);

//打印文件
ShellExecute(NULL,
_T("print"),
_T("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt"),
NULL,
NULL,
SW_NORMAL);

//打开程序
ShellExecute(NULL,
_T("open"),
_T("cmd"),
NULL,
NULL,
SW_NORMAL);

//打开网页
ShellExecute(NULL,
_T("open"),
_T("www.baidu.com/s?wd=武汉科锐"),
NULL,
NULL,
SW_NORMAL);

HINSTANCE hRet = ShellExecute(NULL,
_T("open"),
_T("\"F:\\CR33\\windows\\03 dlmain,dll劫持和进程创建\\dir.bat\""),
NULL,
NULL,
SW_NORMAL);
命令行
cmd + /c :启动命令行,执行后面的命令,立即关闭窗口
cmd + /k :启动命令行,执行后面的命令,保持窗口不关闭
————————————————
版权声明:本文为CSDN博主「code_greenhand」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35426012/article/details/95931876

windows中dllmain,创建进程和转发dll

上一篇:DataGridView中DataGridViewComDaboBoxColumn控件点击一次即可显示下拉菜单


下一篇:c#面试题(1)笔试题