写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 }