Hi, ich habe versucht einen Hook auf "CompareStringA" zu setzen leider bekomme ich immer einen "Acces violation" Fehler wenn ich die gehookte funktion aufrufe!
vll findet ihr ja den Fehler, hier der Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| library Hook;
uses windows, uallhook;
var old_CompareStringA: function(Locale:LCID; dwCmpFlags:DWORD; lpString1:PAnsiChar; cchCount1:Integer; lpString2:PAnsiChar; cchCount2:Integer): Integer; stdcall; next_CompareStringA: function(Locale:LCID; dwCmpFlags:DWORD; lpString1:PAnsiChar; cchCount1:Integer; lpString2:PAnsiChar; cchCount2:Integer): Integer; stdcall;
function my_CompareStringA(Locale:LCID; dwCmpFlags:DWORD; lpString1:PAnsiChar; cchCount1:Integer; lpString2:PAnsiChar; cchCount2:Integer): Integer; begin MessageBox(0, PChar(lpString1+' with '+lpString2), 'Compare', $00000040); Result := next_CompareStringA(Locale, dwCmpFlags, lpString1, cchCount1 ,lpString2, cchCount2); end;
procedure injectmain; var p:pointer; begin p := GetProcAddress(GetModuleHandle('kernel32.dll'),'CompareStringA'); if p <> nil then begin @old_CompareStringA := p; uallHook.HookCode(@old_CompareStringA,@my_CompareStringA,@next_CompareStringA); end; end;
procedure uninjectmain; begin uallHook.UnhookCode(@next_CompareStringA); end;
procedure dllmain(dwReason: integer); begin case dwreason of DLL_PROCESS_ATTACH: injectmain; DLL_PROCESS_DETACH: uninjectmain; end; end;
begin DLLProc := @DLLMain; DLLMain(1); end. |