msvcrt
Użytkownik
- Dołączył
- Październik 15, 2011
- Posty
- 71
Siemanko
Mam pewien komponent do delphi, który ma ograniczenie czasowe. Po zainstalowaniu komponentu w delphi należało jeszcze zarejestrować kontrolkę ocx za pomocą regsrv32. Programy pisane przy pomocy tego komponentu korzystają właśnie z tej kontrolki ocx. Oprócz ograniczenia czasowego wyświetlany jest tzw. NagScreen informujący że to trial. Nigdzie nie mogę znaleźć pełnej wersji tego komponentu więc postanowiłem go "zcrackować" tzn.
Zakładam Hooka na MessageBoxA (ten NagScreen) tak żęby program go nie wyświetlał i myślał że użytkownik kliknął na OK. To mi działa. Do zakładania hooka korzystam z komponentu afxcodehook. Oto kod:
...
newMessageBoxA: function (hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: Cardinal): Integer; stdcall;
...
function callbackMessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: Cardinal): Integer; stdcall;
begin
Result := 1;
end;
...
HookCode(GetProcAddress(GetModuleHandle('user32'), 'MessageBoxA'), @callbackMessageBoxA, @newMessageBoxA);
Teraz chciałbym oszukać komponent co do czasu jaki jest ustawiony w komputerze ale tak by niezmieniać czasu w kompie tylko zhookować tą funkcję za pomocą której komponent odczytuje sobie czas systemowy. Wrzuciłem na virustotal.com tą kontrolkę ocx i pokazało że korzysta ona m.in z funkcji time z biblioteki msvcrt.dll. I rzeczywiście tak jest. Nawet 3 razy z niej korzysta - ciekawe po co aż 3 razy?
Napisałem coś takiego:
newTime: function (timer: PCardinal): Cardinal ; stdcall;
...
function callbackTime(timer: PCardinal): Cardinal ; stdcall;
begin
// showmessage( 'Hello World' );
Result:=newTime(timer);
end;
...
HookCode(GetProcAddress(GetModuleHandle('msvcrt'), 'time'), @callbackTime, @newTime);
Problem w tym, że nie do końca działa mi ten hook na tą funkcję time. Hook się zakłada ale wywala mi pod delphi bład : Access violation at address 00000000. Read of address 00000000 i klapa. Zamiast Result:=newTime(timer); podstawił bym jakąs stałą wartość. Taki miałem plan ale mi to nie działa. Help.
Tutaj jest troche informacji na temat tej funkcji time:
http://www.cplusplus.com/reference/clibrary/ctime/time/
http://msdn.microsoft.com/en-us/library/1f4c8f33%28v=vs.80%29.aspx Tam jest napisane pod kątem programowania w C i nie wiem czy dobrze zadeklarowałęm tą funkcję pod delphi.
Mam pewien komponent do delphi, który ma ograniczenie czasowe. Po zainstalowaniu komponentu w delphi należało jeszcze zarejestrować kontrolkę ocx za pomocą regsrv32. Programy pisane przy pomocy tego komponentu korzystają właśnie z tej kontrolki ocx. Oprócz ograniczenia czasowego wyświetlany jest tzw. NagScreen informujący że to trial. Nigdzie nie mogę znaleźć pełnej wersji tego komponentu więc postanowiłem go "zcrackować" tzn.
Zakładam Hooka na MessageBoxA (ten NagScreen) tak żęby program go nie wyświetlał i myślał że użytkownik kliknął na OK. To mi działa. Do zakładania hooka korzystam z komponentu afxcodehook. Oto kod:
...
newMessageBoxA: function (hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: Cardinal): Integer; stdcall;
...
function callbackMessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: Cardinal): Integer; stdcall;
begin
Result := 1;
end;
...
HookCode(GetProcAddress(GetModuleHandle('user32'), 'MessageBoxA'), @callbackMessageBoxA, @newMessageBoxA);
Teraz chciałbym oszukać komponent co do czasu jaki jest ustawiony w komputerze ale tak by niezmieniać czasu w kompie tylko zhookować tą funkcję za pomocą której komponent odczytuje sobie czas systemowy. Wrzuciłem na virustotal.com tą kontrolkę ocx i pokazało że korzysta ona m.in z funkcji time z biblioteki msvcrt.dll. I rzeczywiście tak jest. Nawet 3 razy z niej korzysta - ciekawe po co aż 3 razy?
Napisałem coś takiego:
newTime: function (timer: PCardinal): Cardinal ; stdcall;
...
function callbackTime(timer: PCardinal): Cardinal ; stdcall;
begin
// showmessage( 'Hello World' );
Result:=newTime(timer);
end;
...
HookCode(GetProcAddress(GetModuleHandle('msvcrt'), 'time'), @callbackTime, @newTime);
Problem w tym, że nie do końca działa mi ten hook na tą funkcję time. Hook się zakłada ale wywala mi pod delphi bład : Access violation at address 00000000. Read of address 00000000 i klapa. Zamiast Result:=newTime(timer); podstawił bym jakąs stałą wartość. Taki miałem plan ale mi to nie działa. Help.
Tutaj jest troche informacji na temat tej funkcji time:
http://www.cplusplus.com/reference/clibrary/ctime/time/
http://msdn.microsoft.com/en-us/library/1f4c8f33%28v=vs.80%29.aspx Tam jest napisane pod kątem programowania w C i nie wiem czy dobrze zadeklarowałęm tą funkcję pod delphi.