Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. The Criminal Enterprises
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

      1. Blood Money
      2. Frontier Pursuits
      3. Find Lobbies & Outlaws
      4. Help & Support
    3. Crews

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Support

    3. Suggestions

*DO NOT* SHARE MEDIA OR LINKS TO LEAKED COPYRIGHTED MATERIAL. Discussion is allowed.

[c++ & assembly]hooking health


roby65
 Share

Recommended Posts

here the code:

 

void _declspec(naked) HealthHook(){_asm{ push ecx push ebx mov ebx, 0x0B6F3B8 mov ecx, dword ptr[ebx] cmp esi,ecx je exit mov [esi+00000540],edx exit: pop ebx pop ecx ret}}void _declspec(naked) HealthHookEnd(){}void _declspec(naked) HealthHooker(){_asm{ call HealthHook}}void HookHealth(){DWORD a,b;char c=0x90;LPVOID address=(LPVOID)0x4B331F;LPVOID address2=(LPVOID)(0x4B331F+5);VirtualProtect(address,6,PAGE_EXECUTE_READWRITE,&a);memcpy(address,HealthHooker,5);memcpy(address2,&c,1);VirtualProtect(address,6,a,&b);}

 

 

the code should work, i tryed in a cheat tool and it's ok, but the "call HealthHook" points to a different point in memory than the HealthHook function...why????? ???

 

edit: the code is in a dll injected in the gta process :-)

Link to comment
Share on other sites

Another way is to calculate the new destination address of the call.

This should do the job:

 

void HookHealth(){DWORD a,b;char c=0x90;LPVOID address=(LPVOID)0x4B331F;LPVOID address2=(LPVOID)(0x4B331F+5);VirtualProtect(address,6,PAGE_EXECUTE_READWRITE,&a);// ----*((char *)address) = 0xe8;   // place CALL instructionunsigned long dwDest = (unsigned long)HealthHooker - (unsigned long)address - 5;memcpy((char *)address+1,&dwDest,4);// -------memcpy(address2,&c,1);VirtualProtect(address,6,a,&b);}

 

Edited by INT 03
Link to comment
Share on other sites

the code seems ok, but it seems not working confused.gif

in the disassembled code i can see "call healthhook" but where it's address?? bored.gif

 

edit: new code

result: nothing

 

 

void HookHealth();void _declspec(naked) HealthHooker(){_asm{mov [esi+00000540],edxret}}void HookHealth(){DWORD a,b;char c=0x90;LPVOID address=(LPVOID)0x4B331F;LPVOID address2=(LPVOID)(0x4B331F+5);VirtualProtect(address,6,PAGE_EXECUTE_READWRITE,&a);// ----*((char *)address) = 0xe8;   // place CALL instructionunsigned long dwDest = (unsigned long)HealthHooker - (unsigned long)address - 5;memcpy((char *)address+1,&dwDest,4);// -------memcpy(address2,&c,1);VirtualProtect(address,6,a,&b);

 

Edited by roby65
Link to comment
Share on other sites

Hmm I just saw that I seem to have mixed up the functions accidently. monocle.gif

It should be

 

unsigned long dwDest = (unsigned long)HealthHook - (unsigned long)address - 5;

 

HealthHooker is not needed anymore.

Link to comment
Share on other sites

the problem is the same:

 

the call seems to be ok, but this code ( mov [esi+00000540],edx) changes players health when is hitted, but it's like this line isn't there....so you are invincible confused.gif

what's the error??? it should be all ok! cry.gif

 

edit: this code also messes up the game, so if i alt-tab, i can't rejoin back into the game (gta freezes...) sneaky2.gif

 

edit2: the "call healthhook" points there:

user posted image

 

sneaky2.gifsneaky2.gifsneaky2.gifsneaky2.gifsneaky2.gif

 

why this?!?!?!?!?!?

i can't understand why barf8bd.gifbarf8bd.gifbarf8bd.gif

Edited by roby65
Link to comment
Share on other sites

 

mov [esi+0x00000540],edx

 

You have to prefix the value with 0x or the inline assembler will interpret it as decimal value.

 

Additionally you should change the label in HealthHook to something different than exit.

exit is a CRT function and as such it could lead to conflicts.

Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.