能力值:
( LV2,RANK:10 )
|
-
-
2 楼
界面做得不好看,右面用列表控件整齐一些了。
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
楼主附上源码啊!!! 顶一个!!
|
能力值:
( LV9,RANK:140 )
|
-
-
4 楼
遍历进程, 枚举导入表加载的模块然后调用下面我的这个函数就可以打印出API的地址了,
ULONG FindApiImportAddr ( ULONG dwBaseImage, char* pModuleName, char* pFuncName )
{
PIMAGE_DOS_HEADER pDosHeader;
PIMAGE_NT_HEADERS pNtHeader;
PIMAGE_OPTIONAL_HEADER32 pOptionalHeader;
PIMAGE_SECTION_HEADER pSectionHeader;
PIMAGE_THUNK_DATA pThunk, pIAT;
PIMAGE_IMPORT_DESCRIPTOR pIID;
ULONG dwThunkValue = 0;
ULONG test;
__asm int 3
// 检查参数是否合法
if ( 0==dwBaseImage || 0==pModuleName || 0==pFuncName )
return 0 ;
// pDosHeader指向DOS头结构
pDosHeader = (PIMAGE_DOS_HEADER)dwBaseImage ;
//pNtHeader指向PE文件头结构
pNtHeader = (PIMAGE_NT_HEADERS)(dwBaseImage + (pDosHeader->e_lfanew)) ;
if ( 0 == pNtHeader )
return 0;
//pOptionalHeader指向可选头结构
pOptionalHeader = &(pNtHeader->OptionalHeader) ;
if ( 0 == pOptionalHeader )
return 0;
//pSectionHeader指向第一个段头部结构
pSectionHeader = (PIMAGE_SECTION_HEADER)
((ULONG)pNtHeader + 0x18 +
pNtHeader->FileHeader.SizeOfOptionalHeader ) ;
if ( 0 == pSectionHeader )
return 0;
// 遍历导入表
KdPrint(( "pOptionalHeader->DataDirectory[1].VirtualAddress@@@%X\n", pOptionalHeader->DataDirectory[1].VirtualAddress ));
//pIID指向第一个导入DLL目录结构
pIID = (PIMAGE_IMPORT_DESCRIPTOR) \
(dwBaseImage + pOptionalHeader->DataDirectory[1].VirtualAddress ) ;
__try {
test = pIID->FirstThunk;
} __except( GetExceptionCode() ) {
return 0;
}
while ( pIID->FirstThunk )
{
__asm int 3
// 找到指定的DLL导入目录
if ( strcmp ( (char*)(dwBaseImage+pIID->Name), pModuleName ) )
{
pIID++ ;
continue ;
}
//pIAT指向该导入DLL的IAT表
pIAT = (PIMAGE_THUNK_DATA)( dwBaseImage + pIID->FirstThunk ) ;
//pThunk指向INT表导入(即导入名称表)
if ( pIID->OriginalFirstThunk )
pThunk = (PIMAGE_THUNK_DATA)( dwBaseImage +
pIID->OriginalFirstThunk ) ;
else
pThunk = pIAT ; // pIAT在一开始时保存了名称表
if ( 0 == pThunk )
return 0;
// 遍历IAT
//dwThunkValue存放原始的IAT表中函数的虚拟地址
while ( ( dwThunkValue = *((ULONG*)pThunk) ) != 0 )
{
if ( ( dwThunkValue & IMAGE_ORDINAL_FLAG32 ) == 0 )
{
// 寻找指定的函数在IAT表中的项
if ( strcmp ( (char*) (dwBaseImage+dwThunkValue + 2 ),
pFuncName ) == 0 )
{
return (ULONG)pIAT ;
}
}
pThunk ++ ;
pIAT ++ ;
}
pIID ++ ;
}
return 0 ;
}
|
能力值:
( LV3,RANK:30 )
|
-
-
5 楼
太空步滑过咯~~~~~~~~~~~~~~~~ 咦哈~
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
有用的就要顶一下
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
不错不错哈……
|
|
|