Dll释放可执行文件用途很广泛。一种实现木马注入的方法就是将dll加载到某进程的地址空间后释放木马。接下来
介绍下详细的步骤,为后来者提供参考。
需要释放的文件首先必须以资源的形式存储在dll中。然后被读取、写入文件等。创建dll的步骤就不介绍了。不
明白的可以参考我的博客《windows核心编程系列》谈谈dll。http://blog.csdn.net/ithzhang/article/details/7021274或
是参考网上使用vc创建dll的帖子。
Dll工程建好后,就需要添加资源。在资源视图右击添加资源--》导入。然后选中需要加入的文件。如calc.exe。为
资源定一个类型如EXE。资源就添加完毕了。展开该EXE资源,下面就是该资源的ID,如ID_EXE1。这在后面会用
到。
首先关注DllMain函数。这个函数在dll被加载到应用程序地址空间后以及从进程地址空间卸载时都会被调用。此外
还有另外两种情况此函数也会被调用。ul_reason_for_call标识了此函数被调用的原因。我们关注的是
DLL_PROCESS_ATTACH。在dll被加载到进程地址空间时DllMain被调用,ul_reason_for_call被赋值
DLL_PROCESS_ATTACH。在这里我们将执行所有的动作。我的博文《windows核心编程系列》谈谈dll高级技术
http://blog.csdn.net/ithzhang/article/details/7051558
HINSTANCEhIns=GetModuleHandle("AudioEngine.dll");这句话会获得此dll的实例句柄。
FindResource会在指定的地址空间内搜索。由于我们将要释放的文件存储在dll内,因此传给它的句柄应该是hIns。
如果是在exe中,第一个参数可以省略默认当前进程地址空间。详细内容请参考:http://blog.csdn.net/ithzhang/article/details/7995102
看代码:
case DLL_PROCESS_ATTACH:
{
HINSTANCE hIns=GetModuleHandle("AudioEngine.dll");
HRSRC hRsrc =::FindResource(hIns, MAKEINTRESOURCE(IDR_EXE1), "exe");//IDR_XXXXXX就是你刚才导入的a.exe或b.dll的ID了
if (NULL == hRsrc)
{
MessageBox(NULL,TEXT("资源查找失败!!!"),TEXT("失败!!"),MB_OK);
return FALSE;
}
DWORD dwSize = SizeofResource(hIns, hRsrc);
if (0 == dwSize)
{
MessageBox(NULL,TEXT("资源查找失败!!!"),TEXT("失败!!"),MB_OK);
return FALSE;
}
//加载资源
HGLOBAL gl = LoadResource(hIns, hRsrc);
if (NULL == gl)
{
MessageBox(NULL,TEXT("加载资源失败!!!"),TEXT("失败!!"),MB_OK);
return FALSE;
}
//锁定资源
LPVOID lp = LockResource(gl);
if (NULL == lp)
{
MessageBox(NULL,TEXT("锁定资源失败!!!"),TEXT("失败!!"),MB_OK);
return FALSE;
}
TCHAR filename[256]=TEXT("calc1111.exe");//保存的临时文件名
// CREATE_ALWAYS为不管文件存不存在都产生新文件。
STARTUPINFO si={0};
PROCESS_INFORMATION pi;
DWORD a;
HANDLE fp= CreateFile(filename ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if((fp==INVALID_HANDLE_VALUE))
{
MessageBox(NULL,TEXT("写入文件失败!!!"),TEXT("失败!!"),MB_OK);
return 0;
}
if (!WriteFile (fp,lp,dwSize,&a,NULL))
{
MessageBox(NULL,TEXT("释放资源失败!!!"),TEXT("失败!!"),MB_OK);
return false;
}
FreeResource (gl);//释放内存
CloseHandle (fp);//关闭句柄
bool ret=CreateProcess(NULL,filename,NULL,NULL,false,0,NULL,NULL,&si,&pi);
if(!ret)
{
int r=GetLastError();
char buff[256];
sprintf(buff,"进程创建失败!!错误码为:%d",r);
MessageBox(NULL,buff,TEXT("失败!!"),MB_OK);
return 0;
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
本例中最后一步还调用CreateProcess让可执行文件执行。
在dll中添加资源这很常见。如对话框、位图等等。这跟dll释放exe文件原理都是类似的。
分享到:
相关推荐
实现功能:有些程序运行需要加载dll,为了减少文件数量或防止dll被发现,可以在编译阶段将dll文件加密后添加到可执行程序的资源文件中,该程序实现了(1)读取资源文件并释放到内存中(没有加解密,明文存储,但是...
介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“DLL Hell”提供...
DLL动态链接库嵌入exe可执行文件; 目录 一 DLL动态链接库实现 ① 通过MFC建立的MFC规则链接库 二 在执行文件中EXE自定义动态链接库资源文件加载到资源文件中 ① 在EXE插入自定义资源 三 嵌入到EXE文件...
介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“DLL Hell”提供...
介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自 动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临 时文件的自动删除,从而为解决“DLL Hell”...
2. 由于静态库很吃可执行文件的生成(Link期)时间,所以如果对可执行文件的Link时间比较敏感,那么就用DLL。 使用DLL 在介绍如何创建DLL之前,让我们先了解它是如何被使用的。 1. 显式调用(也叫动态调用) 显 ...
netz是一个可以将.net编译生成的可执行文件(EXE)DLL合并成为单一文件的工具,并具有压缩.net exe dll的功能. netz的同时还能起到混淆的作用,从而保护.net代码. 该程序适用与.net 2.0或3.X的程序...1.1不支持. 本...
将多个文件、文件夹一键封装成单个exe可执行文件,支持的文件格式有*.exe、*.bat、*.cmd、*.reg、*.dll、*.ocx,兼容所有Windows版本,包括:Windows 2000/XP/2003/Vista/2008 and Windows 7。 选项说明: 1、DOS ...
绿色软件封装工具,将多个文件、文件夹一键封装成单个exe可执行文件,支持的文件格式有*.exe、*.bat、*.cmd、*.reg、*.dll、*.ocx,兼容所有Windows版本,包括:Windows 2000/XP/2003/Vista/2008 and Windows 7。...
个DLL文件,在使用DLL文件的时候不需要先把DLL释放到硬盘。 在动态加载的这个DLL中定义了一个函数MRun,该函数可以动态执行一 个EXE,即:调用资源中的EXE文件或TMemoryStream中被载入的EXE流。 此技术的好处:...
Resource Tuner(Windows可执行文件资源修改工具)是一款Windows可执行文件的资源修改工具,可以查看、提取、编辑、修改、翻译、修改32位Windows可执行文件中的资源。Resource Tuner也是一个集资源编辑、释放、优化和...
// 为注入的dll文件路径分配内存大小,由于为WideChar,故要乘2 GetMem(pszLibAFilename, Length(DllFullPath) * 2 + 1); // 之所以要转换成 WideChar, 是因为当DLL位于有中文字符的路径下时不会出错 ...
系统目录下的olemdb32.dll是由感染性病毒释放出来的。系统目录下的olemdb32.dll需要自己进行删除,工具中没有实现,因为比较容易删除。该工具主要是修复其他被感染的可执行文件。
恶意软件检测器-D4 反向工程.exe和DLL文件以检测可执行文件是否可能被篡改或用于有害目的的Web应用程序会员 技术栈/依赖关系Django的设置的Python 3.9.1 的Django 3.1.6 仓库中的叉子代码在终端:pip install django...
Visual Assist X 10.8.2043 是由Whole Tomato Software...注: 使用时VisualAssist的版本信息显示试用 不影响使用 可使用VA的全部功能 时间永不过期 ">压缩包内包含VisualAssist10 8 2043原版安装文件和破解后的dll文件
能够将.exe和DLL等文件封装成一个可执行文件,运行的时候只运行生成的exe程序就可以了,并不会释放临时文件。最新版可以快照程序安装,方便你将程序打包成单文件。虽然打包压缩率不是最高的,但可以不产生缓存文件,...
Enigma Virtual Box 中文版虚拟文件打包系统可以将您的程序和配套文件打包成一个可执行文件,而没有任何效率的损失,配套文件也不会被释放至硬盘。本项功能有独立的免费应用程序,同时支持X86和X64二进制文件。 ...
Enigma Virtual Box是一款免费的单文件封包工具,他可以一个应用程序的多个文件打包成一个可执行的应用程序。Enigma Virtual Box 支持所有类型的文件格式,包括动态链接库 (*.dll), ActiveX/COM (*.dll, *.ocx), ...
适合patch尚未运行的加壳不加壳的可执行文件,需要补丁的数据较多时建议使用这个,在子程序中打补丁 .参数 文件名, 文本型, , 文件全路径 .参数 模块名, 文本型, , 如"user32.dll" .参数 API, 文本型, , 如...
注意:本程序是网上收集而来,所有权归原作者所有!... 这个可执行文件使用的DLL和函数,以及输出地函数接口 3. 支持拖拽功能,可以直接拖拽文件到界面,即可分析 4. 可以检查可执行文件是否已经数字签名了