- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编写通用内联钩子
编写通用内联钩子
)栏目编辑gt;sOcket)
餮
前置知识:VC
关键诃编程,inlineHook,ReadProcessMemory
缩写通用内联钧
文/woosheep
如果R00tkit是一座雄伟神秘的殿堂,那么
Ring3的_nlineHook毫无疑问就是这座殿堂的大
门,虽然不似Rng0那般强大,但在简单,安全
(不至于蓝屏)方面却略胜一筹.更重要的,
不至于让和我一样的朋友望着ROOtkit这座神
殿,发出只能膜拜无法学习的感叹.无需
DDK无需虚拟机,请容我把这款通用型内联
钩子的编写慢慢道来.
InlineHook说起来也简单,就是找到指定API
函数的内存地址,放下五字节的JMP(即E9,当
然,如果有办法在短跳转的射程内腾出一片空
间,则不在此列).跳向钩子处理函数即告完
成.不过JMP的选址很讲风水.放得越深,自
然越不易被检测,但对被HOOk的API破坏也越
大,最简单的就是直接放在函数入口处,如果
是编程前就指定的API,甚至可以把覆盖的原
API汇编码直接附在钩子函数末尾.但被检测出
来的风险也最大.只能自求多福了.
我写的正是这么个钩子.唯一不同的是它
的通用性,即只要简单地传递想要Hook的APl以
及相关参数而无需另作任何修改.废话不多
说,直接奉上完整代码:
voidhook(DWORDdd,constchar*a~Name,const
char*dUName)
{intfuncSize=(int)endFunc一(int)remoteFtmc;
//计算挂入钧子函数大小
HANDLEHandle;
,f龟
FARPR0CapiAddr;
/2mInfo.mTemp;
DWORDOldProtect;
hSnapsh0tInner:CreateToolhelp32Snapshot
(TH32CS—SNAPMODULE,cId);
mlnfo.dwSize=sizeof(MODULEENTRY32);
for(bRet=Module32First(hSnapshotlnner,amp;mlnfo);
bRet;bRet=Module32Next(hSnapshotlnner,amp;mInfo))
ff(!strcmp(dllName,mlnfo.szModule))break;
,/拽旗
if(!bRet)retum;
hSnapshotInner:CreateToolhelp32Snapshot
(TH32CS—SNAPM0DuLE,GetCurrentProcessld0);
//计算地蛙
FARPROClocAddr-GetProcAddress(GetModule
HancUe(dllName),aoiName);
HMODULEhmoduie-GetModuleHandle(dllName);
LPBYTEa=(LPBYTE)b_module;
uL0NGb=(ULONG)locAddr一(ULONG)a;
ULONGc-(ULONG)mlnfo.hModule+b;
apiAddr-(FARPROC)c;
if(!VirtualProtectEx(Handle,apiAddr,5,
PAGE—EXECUTE—READWRITE.amp;oldProtect))retum;
LPVOIDfuncAddr=Virtstrdlza;
inti=0,
intlen=0;
while(1)
f
BYTEcodeBuf[1I;
ff(!ReadProcessMemory(Handle,(void?)((ULONG)
apLAddr+len),codeBuf,l,NULL))retum;
i=xde——disasm((unsignedchar*)codeBuf,adiza);
if(codeBu~0]=:0xE9)
{BYTEjmpAddr[4];
if(!ReadProcessMemory(Handle,(void*)((ULONG)
apiAddr+len41),jmpAddr,4,NULL))retum;
ULONGtempAddr:*(ULONG*)jmpAddr;
ULONGrealAddr=tempAddr+5+(ULONG)
apiAddr~len:
BYTEreAddr[4];
+(ULONG?)reAddr=rea1Addr((UL0NG)
headAddr~I)一5;
if(1WriteProcessMemory(Handle,(void*)((ULONG)
apiAddr+1),reAddr,4,NULL))retum;
if(!ReadProce~Memory(Handle,apiAddr,hookBuf,len,
NUIL))retum;
,,椿撼入口
*(ULO
您可能关注的文档
最近下载
- 佳能(Canon )PowerShot SX系列 PowerShot SX1 IS 说明书.pdf
- 苏州市吴中区小升初英语模拟试卷(三).doc VIP
- 2025新外研社版英语七年级下单词表(英译汉).docx
- 《新闻采访与写作》电子课件 第十六章 广播新闻写作.ppt
- 2025年湖南石油化工职业技术学院单招职业技能测试题库(各地真题).docx VIP
- 上海市六年级(下)数学同步讲义 第11讲 一元一次不等式(组)及其解法.doc VIP
- 人教版语文七年级下 列夫托儿斯泰课件(共45张PPT).pptx VIP
- 1.2 太空探索课件-七年级地理上学期中图版(2024).pptx VIP
- 人教版小学一年级数学课件- 两位数加一位数(不进位)、整十数.ppt
- 四人赛全真总题库(共3000题).docx VIP
文档评论(0)