View Single Post
  #4  
Old 09-30-2019, 01:26 PM
Mblake81 Mblake81 is offline
Banned


Join Date: Jan 2011
Location: Bristlebane <Reckless Fury>
Posts: 1,811
Default It's a Unix System

Quote:
Originally Posted by Rogean [You must be logged in to view images. Log in or Register.]
Frankly this argument annoys me. You guys underestimate the difficulty of client side changes. We don't have access to Client source code. We have very limited dissassembly skillsets, and occasionally we rely on pseudocode. Haynar is better than I am at finding specific memory addresses and offsets, and I'm somewhat decent at finding/following code paths for functions to hook and modify their arguments and/or return values. Secrets is better than both of us at anything related to dissassembly, but often too busy to help us.

The Client psuedocode is 468,710 lines of code long, and most of it looks a lot like this:

Now, the function I just listed above is a good example, because it handles the client's visual display of the values of skills in the skill window. In this function, it's handling a lot of processing on those values to check various caps based on class and skill ID, which it really should have no reason to do because we just want it to display what the server tells us it is.

So, we hook it. Hooking is essentially rewriting the running code in memory at the location of this function to do a JMP (Jump/Detour) to our own custom function. At which point we access the Skill Value directly, using a global client pointer to the character's data, and return it:

And this is actually one of the easier examples.
-Programmed from Rogeans SGI Crimson & Machintosh Quadra

Now we wait for the storm to steal the dino dna. [You must be logged in to view images. Log in or Register.]
Last edited by Mblake81; 09-30-2019 at 01:29 PM..