您现在的位置: 天下网吧 >> 网吧天地 >> 天下码农 >> 后端开发 >> PHP >> 正文

Delphi中API Hook 探秘

2010-3-10论坛收集未知
ter): Pointer;
var
Code: PImportCode;
begin
Result:= func;
if func = nil then exit;
try
Code := func;
if (Code.JumpInstruction = $25FF) then begin
Result := Code.AddressOfPointerToFunction^;
end;
except
Result := nil;
end;
end;
这样,只要用我们的函数的地址替代它就可以了。替换函数:
Procedure PermuteFunction(OldFunc:PPOinter; NewFunc:Pointer);
var
written: DWORD;
begin
WriteProcesSMemory(GetCurrentProcess, OldFunc, @NewFunc, 4, written);
end;
你新建一个Unit APIHook,把上面的函数和结构写进去并保存下来。


2.第一个程序
新建一个Application TRY1,主Form 的单元名称不妨叫TRYUnit1。把上面的Unit APIHook 加进来。再新建一个UnitMESS,添加如下代码:
unit mess;
interface
uses
Windows, Messages, SysUtils, Classes, APIHook;
procedure API_Hookup;
procedure Un_API_Hook;
var
FuncMessageboxA, FuncMessageboxW: PImportCode;
implementation
type
TMessageA = function(hwn: hwnd; lptext: pchar; lpcapion: pchar; utype: cardinal):
integer; stdcall;
TMessageW = function(hwn: hwnd; lptext: pwidechar; lpcapion: pwidechar;
utype: cardinal): integer; stdcall;
var
OldMessageBoxA: TMessageA;
OldMessageBoxW: TMessageW;
function MyBoxA(hwn:hwnd;lptext:pchar;lpcapion:pchar;utype:cardinal): integer; stdcall;
begin
result := OldMessageBoxA(hwn, 'Succes Hook A !', lpcapion, utype);
end;
function MyBoxw(hwn:hwnd;lptext:pwidechar;lpcapion:pwidechar;utype:cardinal):
integer; stdcall;
begin
result := OldMessageBoxW(hwn, '成功挂上W!', lpcapion, utype);
end;
p

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩

本文来源:论坛收集 作者:未知

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下