首页
社区
课程
招聘
[旧帖] [求助]通过PE文件,如何获取其调用的DLL的完整路径?? 0.00雪花
发表于: 2011-8-7 16:42 1519

[旧帖] [求助]通过PE文件,如何获取其调用的DLL的完整路径?? 0.00雪花

2011-8-7 16:42
1519
通过使用ImageRvaToVa函数,能够获取到其引用的DLL的文件名字,但是怎么样获取到Dll文件的全部路径啊??就像Dependency Walker一样,通过点击右键显示full path的时候能显示出其全部路径

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请求帮忙!!!
2011-8-7 19:58
0
雪    币: 212
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

貌似 GetCurrentDirectory 函数就可以获取 dll 的完整路径!
2011-8-7 20:10
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个只能获取到当前的目录,比如我知道notepad.exe有kernel32.dll。那我如何获取到该dll的路径呢??
2011-8-7 20:16
0
雪    币: 212
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
GetModuleFileName(g_hInstance,strPath,MAX_PATH);   

g_hInstance是你的DLL的实例

来自csdn,你可以尝试下!

GetCurrentDirectory对于调用系统自身的dll文件还是可以用的!
其实,兄弟,这东西网上貌似很多回答过的啊,要尝试搜索!
2011-8-7 20:20
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
多谢兄弟的赐教,呵呵,我以后会注意的
2011-8-7 21:20
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我用方法如下:
	//通过PE的格式来找到引用的DLL
	HANDLE hFile=CreateFile(buff,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
	if(hFile==INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("open file fail");
		return;
	}
	HANDLE hFileMap=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
	if(hFileMap==NULL || hFileMap==INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("maping fail");
		return;
	}
	LPBYTE lpbaseAddress=(LPBYTE)MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0);
	if(lpbaseAddress==NULL)
	{
		AfxMessageBox("could not map view of file");
		return;
	}
	PIMAGE_DOS_HEADER pDosHeader=(PIMAGE_DOS_HEADER)lpbaseAddress;
	PIMAGE_NT_HEADERS pNtHeaders=(PIMAGE_NT_HEADERS)(lpbaseAddress+pDosHeader->e_lfanew);
	DWORD rva_import_table=pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
	if(rva_import_table==0)
	{
		AfxMessageBox("no import table");
		UnmapViewOfFile(lpbaseAddress);
		CloseHandle(hFileMap);
		CloseHandle(hFile);
		return;
	}
	PIMAGE_IMPORT_DESCRIPTOR pImageTable=(PIMAGE_IMPORT_DESCRIPTOR)ImageRvaToVa(
		pNtHeaders,lpbaseAddress,rva_import_table,NULL);
	IMAGE_IMPORT_DESCRIPTOR null_iid;
	IMAGE_THUNK_DATA null_thunk;
	memset(&null_iid,0,sizeof(null_iid));
	memset(&null_thunk,0,sizeof(null_thunk));
	for(int i=0;memcmp(pImageTable+i,&null_iid,sizeof(null_iid))!=0;i++)
	{
		LPCSTR szDllName=(LPCSTR)ImageRvaToVa(pNtHeaders,lpbaseAddress,pImageTable[i].Name,NULL);
//szDllName只是dll名字,但是不是全路径。
		AfxMessageBox(szDllName);
	}

如果是这种,该怎么获取全路径?
2011-8-7 22:01
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
windows下有个文件搜索路径问题。。。。。。
2011-8-8 09:10
0
雪    币: 141
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢分享技术~~
2011-8-8 09:37
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
去看看核心编程里面有说dll加载顺序的相关路径方法,你就能明白了。
2011-8-8 10:41
0
雪    币: 793
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
系统DLL的路径是:C:\windows\system32
文件自己DLL的路径是:文件的当前目录吧
不知道楼主想干嘛,PE格式里面的信息好像没有DLL的路径
2011-8-8 10:53
0
雪    币: 793
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
好像一般的EXE里面引用的DLL的路径都是:C:\WINDOWS\SYSTEM32哦 你不要纠结了
2011-8-8 11:04
0
游客
登录 | 注册 方可回帖
返回
//