写Ring0 inline hook的时候正好需要一个Opcode Length Engine
不想用Ms-Rem大牛的OLD的~因为总是一大堆错误。。许多东西都不能判断。无奈之下。。。
自己找一个成熟的引擎吧。。。
关于反汇编引擎的设计以后将会专门开篇描述。。。这里就单纯说说
Hook Api library吧。。。
感谢z0mbie[前29A]牛!
关于Hook Api相比也有许多了。。。这里完全用Delphi写了一个。。。通用Hook库
与其他的不一样的地方是
说明:
1.利用堆栈跳转
没有使用传统的jmp xxxx 长跳转,使用容易理解的push xxxx+ret
仔细看代码容易理解...封装完好.
2.内存补丁结构:
补丁1:|push xxx--钩子处理过程|ret|
补丁2:|保存原始补丁地址|保存原始地址代码长度|原始地址的代码|push xxxxxx|ret|
代码:
{
Hook Api Library 0.2 [Ring3] By Anskya
Email:Anskya@Gmail.com
ring3 inline hook For Api
Thank:
前29A高手也一直都是我的偶像...z0mbie大牛...这里膜拜一下
使用的LDE32引擎是翻译他老人家的...C->Delphi...
说明:
1.利用堆栈跳转
没有使用传统的jmp xxxx 长跳转,使用容易理解的push xxxx+ret
仔细看代码容易理解...封装完好.
2.内存补丁结构:
补丁1:|push xxx--钩子处理过程|ret|
补丁2:|保存原始补丁地址|保存原始地址代码长度|原始地址的代码|push xxxxxx|ret|
更新说明:
0.2:
支持Ring0 Inline Hook
0.1:
Ring3 Inline Hook
}
由于LDE32没什么明显的BUG虽然支持的指令集不是很多。但是基本上足够用了
想必SDK和DDK中使用MMX,SSE....等指令估计很少见吧...
所以LDE32就派上用场了....
代码:
{
LDE32.pas: Z0MBiE DISASM ENGINE[LDE32]
LDE32 Delphi Coded By Anskya
Email: Anskya@Gmail.com
更新说明:
procedure GetInstLenght(myiptr0: Pointer; osizeptr: PULONG);
function GetProcLength(myiptr0: Pointer): ULONG;
0.2:
增加 GetProcLength函数.用于获取一个函数过程的长度.
0.1:
翻译
Thank: z0mbie
}