Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 19:41

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



"Virtuelle Klasse" - Hack - Wie verwenden?

Discussion on "Virtuelle Klasse" - Hack - Wie verwenden? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
"Virtuelle Klasse" - Hack - Wie verwenden?

Hallo, mich beschäftigt diese Frage schon seit längerem.
Ich habe eine Klasse die anscheinend der original Klasse nachgebaut wurde, und möchte diese nun in meinem GTA IV Hack verwenden.

Die Informationen über die Klasse (CWeaponInfo) habe ich von hier:


Code:
[LEFT]class CWeaponInfo // size: 0x110 (1.0.7.0) {         // weapontype (index of array element)         int weapontype;            // 0x0 | 0           // slottype (index of array element)         int slot;                  // 0x4 | 4           // firetype (index of array element)              int firetype;              // 0x8 | 8           // damagetype (index of array element)         int damagetype;            // 0xC | 12           // group (index of array element)         int group;                 // 0x10 | 16           float targetrange;         // 0x14 | 20         float weaponrange;         // 0x18 | 24         int stattype;              // 0x1C | 28           // Weaponflags stored as bitflags. Refer to corresponding array. (if n-th bit is 1, array element n is true)         DWORD weaponflags;         // 0x20 | 32         DWORD modelhash;           // 0x24 | 36           float aimaccuracy;         // 0x34 | 52         float aimaccuracyfps;      // 0x38 | 52           float offset_x;            // 0x40 | 64         float offset_y;            // 0x44 | 68         float offset_z;            // 0x48 | 72         float crouchoffset_x;      // 0x50 | 80         float crouchoffset_y;      // 0x54 | 84         float crouchoffset_z;      // 0x58 | 88         float reticule_standing;   // 0x64 | 100         float reticule_ducked;     // 0x68 | 104         float reticule_scale;      // 0x6C | 108         int rumbleduration;        // 0x70 | 112         float rumbleintensity;     // 0x74 | 116         int pickup_regentime;      // 0x78 | 120         short pickup_ammoonstreet; // 0x80 | 124            // damage:         short damage;              // 0x82 | 130         short damagefps;           // 0x84 | 132           short clipsize             // 0x86 | 132         short ammomax;             // 0x88 | 136         int timebetweenshots;      // 0x8C | 140         float physicsforce;        // 0x90 | 144         int reloadtime_normal;     // 0x94 | 150         int reloadtime_fast;       // 0x98 | 154         int reloadtime_crouch;     // 0x9C | 160         int projectiletype;        // 0xA0         int projectilefusetime;    // 0xA4           float projectilephysicsexplodeimpactthreshold // 0xD0         float projectilephysicsexplodeimpactwithvehiclethreshold // 0xD4         float projectilephysicsvehiclevelocity // 0xD8           // damage, continued:         float networkplayermod;    // 0xF0 | 240         float networkpedmod;       // 0xF4 | 244         float aimingaccuracytime;  // 0xF8         int   aimingpellets;       // 0xFC };
[/LEFT]


Es steht auch da:
Quote:
Array of CWeaponInfo's can be found at GTAIV.exe+0x1540A20 (1.0.7.0).
Somit muss ich der Klasse irgendwie die Adresse 0x1540A20 "zuweisen".

Wenn ich das richtig verstehe, kann man dann auf jeden Member, den man definiert hat, ohne deren Adresse zu wissen, zugreifen? (Nur durch die Addy der Klasse)?

Hat jemand ein Beispiel, wie soetwas funktioniert?

Lg, Head.

vwap is offline  
Old 03/05/2012, 02:03   #2
 
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
Code:
DWORD base = GetModuleHandle("GTAIV.exe");
CWeaponInfo* weapons = base + 0x1540A20;
int length = sizeof(weapons) / sizeof(weapons[0]);
for(int i = 0; i < length; i++) {
    (weapons+i)->damage = 9000;
}
Edit: So auf eine Addresse im Spielprozess zu zeigen funktioniert natürlich auch nur wenn du es vom Prozess aus machst.
SmackJew is offline  
Old 03/05/2012, 12:42   #3
 
sd333221's Avatar
 
elite*gold: 9
Join Date: Dec 2005
Posts: 621
Received Thanks: 365
Quote:
Originally Posted by SmackJew View Post
Edit: So auf eine Addresse im Spielprozess zu zeigen funktioniert natürlich auch nur wenn du es vom Prozess aus machst.
Warum versuchst du anderen zu helfen wenn man an deinem code voller fehler sieht, dass du kaum coden kannst?
sd333221 is offline  
Old 03/05/2012, 13:10   #4
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
der einzige fehler den ich grad sehe is:

Code:
CWeaponInfo* weapons = base + 0x1540A20;
in dem fall wäre das besser:
Code:
CWeaponInfo* weapons = (CWeaponInfo*)base + 0x1540A20;
Tyrar is offline  
Old 03/05/2012, 13:48   #5
 
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
Quote:
Originally Posted by sd333221 View Post
Warum versuchst du anderen zu helfen wenn man an deinem code voller fehler sieht, dass du kaum coden kannst?
Hab ich ja Glück, dass es dann doch noch zum Anwendungsentwickler gereicht hat.

Quote:
Originally Posted by HeavyHacker View Post
der einzige fehler den ich grad sehe is:

Code:
CWeaponInfo* weapons = base + 0x1540A20;
in dem fall wäre das besser:
Code:
CWeaponInfo* weapons = (CWeaponInfo*)base + 0x1540A20;
Code:
(CWeaponInfo*)(base + 0x1540A20);
Mal davon abgesehen wird die Längenberechnung so auch nicht funktionieren, bevor du dem Compiler nicht mitteilst, dass weapons als Array behandelt wird. Sollte auch eher als Anregung gelten.
SmackJew is offline  
Old 03/05/2012, 14:02   #6
 
sd333221's Avatar
 
elite*gold: 9
Join Date: Dec 2005
Posts: 621
Received Thanks: 365
Quote:
Originally Posted by SmackJew View Post
Hab ich ja Glück, dass es dann doch noch zum Anwendungsentwickler gereicht hat.
Wahrscheinlich der Grund warum es so viele Programme gibt die nicht funktionieren

Code:
DWORD base = GetModuleHandle("GTAIV.exe"); <- Casting von HModule zu dword fehlt
CWeaponInfo* weapons = base + 0x1540A20; <- Casting fehlt
int length = sizeof(weapons) / sizeof(weapons[0]); <- kompletter Unsinn
for(int i = 0; i < length; i++) {
    (weapons+i)->damage = 9000;
}
sizeof(weapons) wird 4 sein, da weapons nur ein pointer ist, weapons[0] ist die größe der Struktur, daher ist die variable length bei dir immer mit "0" belegt, die Schleife wird also nie ausgeführt.
sd333221 is offline  
Old 03/05/2012, 15:02   #7
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
Danke für eure Hilfe, ich werds jetzt gleich mal versuchen
vwap is offline  
Old 03/05/2012, 16:00   #8
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Quote:
Originally Posted by sd333221 View Post
Wahrscheinlich der Grund warum es so viele Programme gibt die nicht funktionieren

Code:
DWORD base = GetModuleHandle("GTAIV.exe"); <- Casting von HModule zu dword fehlt
CWeaponInfo* weapons = base + 0x1540A20; <- Casting fehlt
int length = sizeof(weapons) / sizeof(weapons[0]); <- kompletter Unsinn
for(int i = 0; i < length; i++) {
    (weapons+i)->damage = 9000;
}
sizeof(weapons) wird 4 sein, da weapons nur ein pointer ist, weapons[0] ist die größe der Struktur, daher ist die variable length bei dir immer mit "0" belegt, die Schleife wird also nie ausgeführt.
Schonmal daran gedacht, dass SmackJew das einfach verdammt lustig findet?
MoepMeep is offline  
Old 03/05/2012, 17:22   #9
 
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
Quote:
Originally Posted by sd333221 View Post
Wahrscheinlich der Grund warum es so viele Programme gibt die nicht funktionieren
Ich hab nun seit über einem Jahr sogut wie gar nicht aktiv mit C gearbeitet, über ein Jahr ausschließlich Java. Ich hab meine Programmiererseele für eine 20 Stunden Woche im Schlafanzug verkauft.

Quote:
Originally Posted by sd333221 View Post
Code:
DWORD base = GetModuleHandle("GTAIV.exe"); <- Casting von HModule zu dword fehlt
CWeaponInfo* weapons = base + 0x1540A20; <- Casting fehlt
int length = sizeof(weapons) / sizeof(weapons[0]); <- kompletter Unsinn
for(int i = 0; i < length; i++) {
    (weapons+i)->damage = 9000;
}
sizeof(weapons) wird 4 sein, da weapons nur ein pointer ist, weapons[0] ist die größe der Struktur, daher ist die variable length bei dir immer mit "0" belegt, die Schleife wird also nie ausgeführt.
Mir ist wie geschrieben schon klar was da nicht funktioniert, aber ich erwarte vom OP schon, dass er es hinkriegt nen HMODULE nach DWORD und ne Summe aus zwei DWORDS in ein CWeaponInfo* zu casten. Das mit der Array Länge ist zugegeben ein Lapsus meinerseits (Hello Java, array.length), nur hat die ohnehin nur etwas mit der Schleife zu tun, der Zugriff, und wie die Zuweisung aussieht, das geht aus dem Code wunderbar hervor.
SmackJew is offline  
Old 03/05/2012, 17:43   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,909
Received Thanks: 25,409
Quote:
Originally Posted by SmackJew View Post
Hab ich ja Glück, dass es dann doch noch zum Anwendungsentwickler gereicht hat.



Code:
(CWeaponInfo*)(base + 0x1540A20);
Mal davon abgesehen wird die Längenberechnung so auch nicht funktionieren, bevor du dem Compiler nicht mitteilst, dass weapons als Array behandelt wird. Sollte auch eher als Anregung gelten.
Wird nur leider nicht gehen, einem Array kannst du keine Adresse zuweisen :<
Der Compiler wüsste ja auch gar nicht, wie viele Elemente es haben soll.
Du musst wohl oder übel wissen, wie viele Elemente das Array hat.
MrSm!th is offline  
Old 03/06/2012, 21:20   #11
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
Quote:
Originally Posted by MrSm!th View Post
Wird nur leider nicht gehen, einem Array kannst du keine Adresse zuweisen :<
Der Compiler wüsste ja auch gar nicht, wie viele Elemente es haben soll.
Du musst wohl oder übel wissen, wie viele Elemente das Array hat.
Ja ich habe die Größe des Arrays.
Die ist 0x110.
Wie sieht es denn nun aus, wenn ich die Größe habe?
vwap is offline  
Old 03/06/2012, 23:52   #12
 
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
Quote:
Originally Posted by Headpuster View Post
Ja ich habe die Größe des Arrays.
Die ist 0x110.
Wie sieht es denn nun aus, wenn ich die Größe habe?
Das ist die Summe der Größen der Datentypen der CWeaponInfo Member, nicht die Länge des Arrays.

Quote:
CWeaponInfo g_weaponInfos[60];
->

Code:
DWORD base = (DWORD)GetModuleHandle("GTAIV.exe");
CWeaponInfo* weapons = (CWeaponInfo*)(base + 0x1540A20);
for(int i = 0; i < 60; i++) {
    (weapons+i)->damage = 9000;
}
Bezweifle allerdings anhand deiner Frage nach einer Seite voller Rumgequatsche leicht, dass dies deine letzte Frage im Thread ist.
SmackJew is offline  
Thanks
1 User
Reply




All times are GMT +1. The time now is 19:42.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.