首页
社区
课程
招聘
dll输出函数查询器(含源码)
2010-12-5 17:08 11917

dll输出函数查询器(含源码)

2010-12-5 17:08
11917
收藏
点赞6
打赏
分享
最新回复 (12)
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ddsoft 2010-12-5 17:10
2
0
问题解决。呵呵!不留下痕迹了
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ddsoft 2010-12-5 17:13
3
0
pExport=(PIMAGE_EXPORT_DIRECTORY)(dwIED);//这一步为什么出错?
得到的 PIMAGE_EXPORT_DIRECTORY 结构里所有字段均为0
三个图:左边是我软件弹出的对话框,右边是LordPE
最下面是VS2008 的调试窗口
上传的附件:
  • 1.jpg (9.19kb,373次下载)
  • 2.jpg (16.35kb,372次下载)
  • 3.jpg (43.83kb,373次下载)
雪    币: 1149
活跃值: (783)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
ycmint 5 2010-12-5 18:15
4
0
磁盘文件  映射文件  加载文件 弄清楚哈。。
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ddsoft 2010-12-5 18:20
5
0
问题已解决。谢谢楼上。
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ddsoft 2010-12-5 22:32
6
0
软件已完成
void CexportDlg::OnDropFiles(HDROP hDropInfo)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	UINT count;

	TCHAR filePath[200];

	count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);

	if(count>1) 
	{
		AfxMessageBox(L"请不要拖入多个文件!");
		return ;
	}

	//for(UINT i=0; i<count; i++)

	//{
	//	int pathLen = DragQueryFile(hDropInfo, i, filePath, sizeof(filePath));
	//	//AfxMessageBox(filePath);
	//}
	DragQueryFile(hDropInfo, 0, filePath, sizeof(filePath));
	//AfxMessageBox(filePath);
	HANDLE hFile=CreateFile(filePath,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
	if (hFile==INVALID_HANDLE_VALUE)
	{
		AfxMessageBox(L"查询失败,本文件可能正被其他程序使用!");
		return;
	}
	HANDLE hFileMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,0);
	if (hFileMapping==NULL)
	{
		AfxMessageBox(L"查询失败,本文件可能正被其他程序使用");
		return;
	}
	PVOID pImage=(PVOID)MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0); //得到dll的基址


	//判断是否为PE文件
	PIMAGE_DOS_HEADER pDH=NULL;
	PIMAGE_NT_HEADERS pNtH=NULL;
	pDH=(PIMAGE_DOS_HEADER)pImage;
	if (pDH->e_magic!=IMAGE_DOS_SIGNATURE)
	{
		AfxMessageBox(L"非PE文件!");
		return ;
	}
	pNtH=(PIMAGE_NT_HEADERS)(pDH->e_lfanew+(DWORD)pImage);
	if (pNtH->Signature!=IMAGE_NT_SIGNATURE)
	{
		AfxMessageBox(L"非PE文件!");
		return ;
	}
	////得到数据目录表第一项:输出表结构
	DWORD dwpIED=(DWORD)(pNtH)+0x78; //
	DWORD dwIEDSize=*(DWORD*)(dwpIED+4); //IED结构的大小
	if (dwIEDSize==0)
	{
		AfxMessageBox(L"没有通过名字输出的函数!");
		return ;
	}

	DWORD dwIEDRVA=*(DWORD*)dwpIED;//IED的RVA
	PVOID	pDirData=(PVOID)ImageRvaToVa(pNtH,pImage,dwIEDRVA,NULL);

	PIMAGE_EXPORT_DIRECTORY pExport=NULL;
	pExport=(PIMAGE_EXPORT_DIRECTORY)(pDirData);
	int num=pExport->NumberOfFunctions;
	PDWORD  pdwNames=NULL;
	PDWORD   pDllNameRNA=NULL;
	CHAR *  pDllName=NULL;
	pdwNames=(PDWORD)ImageRvaToVa(pNtH,pImage,pExport->AddressOfNames,NULL);
	/*pDllNameRNA=(PDWORD)ImageRvaToVa(pNtH,pImage,pExport->Name,NULL);
	pDllName=(char*)ImageRvaToVa(pNtH,pImage,pDllNameRNA,NULL);
	CHAR szBuf[MAX_PATH];*/
	CString tips;
	tips.Format(L"此dll可通过名字输出%d个函数!",num);

	MessageBox(tips,L"提示",0x20);
	CHAR * szFuncName=NULL;
	list.ResetContent();
	WCHAR szFunc[MAX_PATH]={0};
	CString str;
	for (int i=0;i<num;i++)
	{
		szFuncName=(char*)ImageRvaToVa(pNtH,pImage,pdwNames[i],NULL);
		int len=MultiByteToWideChar(0,0,szFuncName,-1,NULL,0);
		WCHAR szFunc[MAX_PATH]={0};
		MultiByteToWideChar(0,0,szFuncName,len,szFunc,len);
		str.Format(L"%s",szFuncName);
		list.AddString((LPCTSTR)(LPTSTR)szFunc);
	}
	UnmapViewOfFile(hFileMapping);
	CloseHandle(hFileMapping);
	CloseHandle(hFile);
	DragFinish(hDropInfo);

	CDialog::OnDropFiles(hDropInfo);
}
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liddd 2010-12-9 12:33
7
0
感谢楼主分享!!谢谢了!!
雪    币: 478
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
flyingayi 2010-12-15 09:38
8
0
看看。。。书藏。
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lixupeng 2010-12-23 08:57
9
0
慢慢理解!
雪    币: 22
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
houpengju 2011-2-10 23:23
10
0
下载了。谢谢了。
雪    币: 95
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
注册程式 2011-5-23 15:13
11
0
谢谢分享,下了学习!
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风逐天 2011-5-23 15:36
12
0
标记一下,有时间来分析分析!~~~
雪    币: 3017
活跃值: (1149)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
zhouws 2 2011-5-23 15:40
13
0
不够完美。你要弄可以查一个目录下的所有PE文件的导出函数。

而且支持用户输入一个函数查找。我当时也MFC了一个这样的玩具
游客
登录 | 注册 方可回帖
返回