能力值:
( LV2,RANK:10 )
|
-
-
2 楼
希望多发这样的帖,简单明了
|
能力值:
( LV9,RANK:290 )
|
-
-
3 楼
好文章,支持一下
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
好文章,支持!学习了
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
感谢大家支持,吾将继续努力!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
好文章,支持!学习了
|
能力值:
( LV9,RANK:420 )
|
-
-
7 楼
很好,学习了,感谢楼主
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
//---------------------------------------------------------------------------
#include <windows.h>
#include <imagehlp.h>
#pragma argsused
//---------------------------------------------------------------------------
typedef void WINAPI (*SLEEPFUCTION)(DWORD dwMilliseconds);
SLEEPFUCTION P_Sleep;
void WINAPI MySleep(DWORD dwMilliseconds)
{
if(dwMilliseconds<20)
P_Sleep(1);
else
P_Sleep(dwMilliseconds/20);
}
//---------------------------------------------------------------------------
void WINAPI HookOneAPI(LPCTSTR ModuleName,LPCTSTR ApiName,PROC NewFuction,PROC &OldFuction)
{
DWORD size;
HMODULE hInstance = GetModuleHandle(NULL);
PROC HookAPIAddr = GetProcAddress(GetModuleHandle(ModuleName),ApiName);
OldFuction = HookAPIAddr;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hInstance,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&size);
if(pImportDesc == NULL)
return;
for (;pImportDesc->Name;pImportDesc++)
{
LPSTR pszDllName = (LPSTR)((PBYTE)hInstance + pImportDesc->Name);
if(lstrcmpiA(pszDllName,ModuleName) == 0)
break;
}
if(pImportDesc->Name == NULL)
return;
PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hInstance + pImportDesc->FirstThunk);//IAT
for(;pThunk->u1.Function;pThunk++)
{
PROC * ppfn= (PROC *)&pThunk->u1.Function;
if (*ppfn == HookAPIAddr)
{
MEMORY_BASIC_INFORMATION mbi;
ZeroMemory(&mbi, sizeof(MEMORY_BASIC_INFORMATION));
VirtualQuery(ppfn,&mbi,sizeof(MEMORY_BASIC_INFORMATION));
VirtualProtect(mbi.BaseAddress,mbi.RegionSize,PAGE_READWRITE,&mbi.Protect);
*ppfn = *NewFuction;
DWORD dwOldProtect;
VirtualProtect(mbi.BaseAddress,mbi.RegionSize,mbi.Protect,&dwOldProtect);
return;
}
}
}
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if(reason == DLL_PROCESS_ATTACH)
{
PROC SleepAddress = NULL;
HookOneAPI("kernel32.dll","Sleep",(PROC)MySleep,(PROC)SleepAddress);
P_Sleep = (SLEEPFUCTION)SleepAddress;
}
else if(reason == DLL_PROCESS_DETACH)
{
}
return true;
}
|
能力值:
(RANK:300 )
|
-
-
10 楼
比较崇拜 知其然,知其所以然的大侠 。
很好......
支持.....
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
 好帖
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
说得很好。。学习了
|
能力值:
( LV9,RANK:680 )
|
-
-
13 楼
不错,学习了
|
能力值:
( LV5,RANK:69 )
|
-
-
14 楼
还是看不明白
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
数据目录表第二项是 输入表的RVA:2050.将其转换成文件偏移650.该处就是输入表的开始。
怎么转的? 怎么转不了和你一样的/?
|
能力值:
( LV6,RANK:90 )
|
-
-
16 楼
哪里不明白 可以提出
|
能力值:
( LV6,RANK:90 )
|
-
-
17 楼
若用工具,可用LordPE的FLC位置计算器;
若自行计算,不妨用如下方法:
查看区段,2000的文件偏移是600那么2050就是650了 不知道你是怎么计算的呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
人家叫我用OC 我郁闷``````````
|
能力值:
(RANK:260 )
|
-
-
19 楼
你这几个图太好了。
有这几个图,直观多了。我看MSDN上的technical article看了两小时,数据结构反复试验,也还是有些懵,看完楼主给的几个图,真是豁然开朗。
不错不错。谢谢了。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
在次学习输入表,这样就记主了,谢谢楼主。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
不错,浅出。
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
学习了,谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
支持一下LZ的教程~~十分感谢
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
很好,学习了,感谢楼主
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
 这个好 初学者需要的 支持哈
|
|
|