Register for your free account! | Forgot your password?

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

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

Advertisement



Majong hack geht nicht [source]

Discussion on Majong hack geht nicht [source] within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2012
Posts: 88
Received Thanks: 2
Majong hack geht nicht [source]

Hey, habe einen majong hack halbwegs versucht zu machen, hier ist mal der source:
Code:
#include <windows.h>
#include <stdio.h>

#define Base 0xFF5E74D4


void injection(){


	*(int*)(0xFF29758C)= 200;
}


void TheHacks()
	{
for(;;)
{
	injection();
}}

BOOL WINAPI DllMain(HINSTANCE mod, DWORD DWORD_GRUND, LPVOID res)
{
switch(DWORD_GRUND)
{
case 1:
// -->
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)TheHacks , 0, 0, 0);
break;
case 2:
break;
}
return TRUE;
}
Was ist an dem code falsch? weil wenn ich den injecte passiert nichts :/
PS: Benutze Perx injector
hansewurst is offline  
Old 06/04/2013, 19:47   #2
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Quote:
Originally Posted by hansewurst View Post
Was ist an dem code falsch?
Was ist an dem Code richtig ?
.SkyneT. is offline  
Thanks
4 Users
Old 06/04/2013, 22:56   #3

 
xxfabbelxx's Avatar
 
elite*gold: 900
Join Date: Apr 2009
Posts: 14,981
Received Thanks: 11,403
Arrow General Coding -> C/C++

moved

Code:
BOOL WINAPI DllMain(HINSTANCE mod, DWORD DWORD_GRUND, LPVOID res)
{
switch(DWORD_GRUND)
{
case 1:
// -->
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)TheHacks , 0, 0, 0);
break;
case 2:
break;
}
return TRUE;
}
Das ist schonmal von vornherein falsch.

hier eine mögliche Verbesserung:

Code:
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
 switch(fdwReason)
 {
  case DLL_PROCESS_ATTACH:
  CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TheHacks , NULL, 0, NULL);
  break;
  case DLL_PROCESS_DETACH:
  CloseHandle(hinstDLL);
  break;
 }
return true;
}
Grundsätzlich musst du immer darauf achten, Pointer nicht mit 0, sondern mit NULL zu initialisieren. Auch auf die Benennung der Funktion selbst sowie die Parameter z.B. von fdwReason. Klar geht case 1 etc auch, aber soetwas beim Namen aufzurufen ist eindeutig besser.


Code:
void injection(){


	*(int*)(0xFF29758C)= 200;
}
Warum benutzt du C-Casts, wenn C++ seine eigenen, sichereren Funktionen dafür hat? Warum dereferenzierst du, wenn du nichtmal einen Pointer da drinne stehen hast?

Code:
void EditScore(  )
{
 *reinterpret_cast<int *>(POINTER + ADDRESS);
}

Code:
void TheHacks()
	{
for(;;)
{
	injection();
}}
Man sollte immer einen Sleep bei einer FOR-Schleife haben.

Code:
void TheHacks(  )
{
 for( ;; )
 {
  Injection(  );
  Sleep( 50 );
 }
}

-


Warum setzt du Macros, wenn du diese ganicht benutzt?
Es ist durchaus sinnvoll Makros zu setzen (bei größeren Projekten) bzw die Adressen vorher zu initialisieren.

Code:
const DWORD dwGamePointer 0x000000
const DWORD dwOfsScore 0x000000
xxfabbelxx is offline  
Thanks
1 User
Old 06/04/2013, 22:58   #4
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Ach du kacke.
Base 0xFF5E74D4
Warum nutzt du die nicht? Ich gehe mal davon aus das du einfach die Adresse aus Cheat engine genommen hast, die hilft dir aber nicht viel weil sie sich immer ändert.
Hiris is offline  
Old 06/05/2013, 11:53   #5
 
elite*gold: 0
Join Date: Mar 2012
Posts: 88
Received Thanks: 2
Ich kann cheat engine benutzen ^^ und das is der pointer nur mit den offset adressen ausgerechnet,, der pointer ist constant und zeigt auch immer auf den score, egal ob neustart oder nicht
hansewurst is offline  
Old 06/05/2013, 12:39   #6

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Quote:
Originally Posted by xxfabbelxx View Post
Grundsätzlich musst du immer darauf achten, Pointer nicht mit 0, sondern mit NULL zu initialisieren.
Naja, NULL oder 0 ist das selbe, da würde ich dann eher zu nullptr greifen, das kann nur als Zeiger oder Boolean verwendet werden.

Code:
void injection(){


	*(int*)(0xFF29758C)= 200;
}
Hier evtl. lieber direkt DWORD_PTR verwenden. Auch würde ich die Anweisung nicht in eine extra Funktion hauen, da geht ja mehr Zeit für den Aufruf drauf als für das Modifizieren des Speichers.

Quote:
Originally Posted by xxfabbelxx View Post
Code:
void TheHacks()
	{
for(;;)
{
	injection();
}}
Man sollte immer einen Sleep bei einer FOR-Schleife haben.
Hier würde ich den Funktions-Prototypen vor allem noch anpassen, das ist hier jetzt nicht so tragisch, aber je nach Calling Convention des Prototypen kann hier einiges schief gehen. Der Return Wert ist natürlich auch recht wichtig.

Quote:
Originally Posted by xxfabbelxx View Post
Code:
const DWORD dwGamePointer 0x000000
const DWORD dwOfsScore 0x000000
Kompiliert das bei dir? Hau noch Klammern vor und nach den Wert und es passt, aber das sind dann keine Makros mehr.

@TE: wat? Das ist dann kein Pointer mehr, ist dir das bewusst? Du musst schon die Werte jedes Mal aufs neue auslesen, da sich das ja durchaus ändert.
snow is offline  
Thanks
1 User
Old 06/05/2013, 12:40   #7
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Quote:
Originally Posted by xxfabbelxx View Post
Grundsätzlich musst du immer darauf achten, Pointer nicht mit 0, sondern mit NULL zu initialisieren.
Das ist Käse, da "#define NULL 0". Richtig wäre nullptr!

Quote:
Originally Posted by xxfabbelxx View Post
Warum dereferenzierst du, wenn du nichtmal einen Pointer da drinne stehen hast?
Wenn die Adresse statisch ist, dann passt das.

Quote:
Originally Posted by xxfabbelxx View Post
Man sollte immer einen Sleep bei einer FOR-Schleife haben.

Code:
void TheHacks(  )
{
 for( ;; )
 {
  Injection(  );
  Sleep( 50 );
 }
}
Das Sleep(50) ist Käse. Wenn man es richtig machen will, dann nutzt man Sleep(1). Siehe:


Quote:
Originally Posted by xxfabbelxx View Post
Warum setzt du Macros, wenn du diese ganicht benutzt?
Es ist durchaus sinnvoll Makros zu setzen (bei größeren Projekten) bzw die Adressen vorher zu initialisieren.

Code:
const DWORD dwGamePointer 0x000000
const DWORD dwOfsScore 0x000000
Nein, Macros sind in diesem Kontext falsch. Außerdem erstellst du in dem Beispiel keine Macros, sondern Fehler beim compilen. Abgesehen davon ist die ungarische Notation total unschön und veraltet und DWORD ist der falsche Datentyp für Pointer.
Richtig wären konstante UINT_PTR:

Code:
const UINT_PTR SOME_PTR = 0xBAADF00D;
const UINT_PTR ANOTHER_PTR = 0xC00FFEE;
Nightblizard is offline  
Thanks
2 Users
Old 06/06/2013, 01:11   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Quote:
Das ist Käse, da "#define NULL 0". Richtig wäre nullptr!
Naja, 100%iger Käse ist es nicht, eher so 90%iger. Immerhin ist nullptr eine C++11 Neuerung und davor gab es nunmal nur die Äquivalenz von 0 und einem Zeiger ins Nichts. Da macht es durchaus Sinn, NULL zu verwenden, so als Verdeutlichung der Pointer-Operation. Zudem kann man so alle Verwendungen von NULL leicht durch nullptr ersetzen, während du bei Verwendung von 0 jeden Fall selbst ansehen und ggf. anpassen müsstest.
Wäre C++ nicht dazu verdammt, zu C abwärtskompatibel zu sein, hätte man mit C++11 auch einfach die Anweisung int *ptr = 0; ungültig machen können, wenn es doch jetzt den schönen nullptr gibt :<
Naja, ich schweife ab..

Quote:
Warum dereferenzierst du, wenn du nichtmal einen Pointer da drinne stehen hast?
Weil er doch an die Adresse schreiben will ;O Ein Pointer ist es ja trotzdem, nur halt nur ein Level, ohne Offset und nicht in Form einer Variablen, sondern direkt als hardcoded Adresse.
Du würdest doch auch schreiben:
Code:
int x = 0;
int *ptr = &x;
*ptr = 1; //dereferenzierung
//äquivalent im pösen c-stil:
*(int*)(0xDEADBEEF) = 1;
//und nicht
0xDEADBEEF = 1; //ergibt keinen sinn
MrSm!th is offline  
Old 06/06/2013, 08:21   #9
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Quote:
Originally Posted by MrSm!th View Post
Naja, 100%iger Käse ist es nicht, eher so 90%iger. Immerhin ist nullptr eine C++11 Neuerung und davor gab es nunmal nur die Äquivalenz von 0 und einem Zeiger ins Nichts. Da macht es durchaus Sinn, NULL zu verwenden, so als Verdeutlichung der Pointer-Operation. Zudem kann man so alle Verwendungen von NULL leicht durch nullptr ersetzen, während du bei Verwendung von 0 jeden Fall selbst ansehen und ggf. anpassen müsstest.
Wäre C++ nicht dazu verdammt, zu C abwärtskompatibel zu sein, hätte man mit C++11 auch einfach die Anweisung int *ptr = 0; ungültig machen können, wenn es doch jetzt den schönen nullptr gibt :<
Naja, ich schweife ab..

Der Grund dafür ist weniger die Abwärtskompatibilität zu C, sondern viel eher die Kompatibilität zu bereits bestehendem Code. In einem der C++11 Videos auf Channel9 wurde das mal kurz erwähnt. Die wollten "#define NULL 0" mit "#define NULL nullptr" ersetzen und bekamen tausende Fehler beim erstellen ihrer Office Produkte. Die haben NULL also beispielsweise auch so genutzt:

Code:
int foo = NULL;
Und weil nicht abzusehen ist wie viele andere Leute das so nutzen und in wie vielen millionen Zeilen von Code das so genutzt wird, haben sie NULL nicht geändert.

Abgesehen davon ist "das ist aber C++11" kein Grund es nicht zu benutzen. Wer noch immer C++03 nutzt hat entweder den Knall nicht gehört oder arbeitet bei einer miesen Firma. Das bietet so viele gute Neuerungen, das muss man einfach nutzen!
Nightblizard is offline  
Old 06/06/2013, 12:12   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Msvc10 unterstützt nur verdammt wenig C++11 :<
Ich wollte damit auch nicht sagen, dass man es nicht nutzen soll, sondern dass es vorher mit nullptr in Aussicht durchaus Sinn gemacht hat, NULL für Pointer, aber nur für Pointer, zu verwenden.
MrSm!th is offline  
Old 06/06/2013, 13:04   #11
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Nightblizard View Post
Der Grund dafür ist weniger die Abwärtskompatibilität zu C, sondern viel eher die Kompatibilität zu bereits bestehendem Code. In einem der C++11 Videos auf Channel9 wurde das mal kurz erwähnt. Die wollten "#define NULL 0" mit "#define NULL nullptr" ersetzen und bekamen tausende Fehler beim erstellen ihrer Office Produkte. Die haben NULL also beispielsweise auch so genutzt:

Code:
int foo = NULL;
Und weil nicht abzusehen ist wie viele andere Leute das so nutzen und in wie vielen millionen Zeilen von Code das so genutzt wird, haben sie NULL nicht geändert.

Abgesehen davon ist "das ist aber C++11" kein Grund es nicht zu benutzen. Wer noch immer C++03 nutzt hat entweder den Knall nicht gehört oder arbeitet bei einer miesen Firma. Das bietet so viele gute Neuerungen, das muss man einfach nutzen!
Das versteh ich nicht so ganz. Die Leute haben sich an den Standard zu halten und nicht anders herum.

Wenns nach mir ginge wäre nie irgend etwas deprecated. Es wäre einfach schlichtweg nicht mehr vorhanden, um den Benutzern guten Stil aufzuzwingen.
Master674b is offline  
Old 06/06/2013, 15:04   #12


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Das ist nicht praktikabel. Der Standard muss sich auch an der Nutzerschaft orientieren und abwägen, was sinnvoll ist. Wer definiert denn guten Stil? Ist doch ebenso eine Mehrheitssache, das kann das Standardkomitee nicht diktieren.
Du kannst nicht einfach große Projekte (die eventuell sogar die Weiterentwicklung von C++ finanziell fördern ;O) mit einer Änderung nicht mehr kompilierbar machen.
Mit so einem bevormundenden Verhalten und so einer Einstellung wird deine Sprache sehr bald gar keine Nutzer mehr haben.
Außerdem ist ein Grund für den Erfolg von C++ die Kompatibilität mit C, die damit ebenfalls zerstört würde.
MrSm!th is offline  
Thanks
1 User
Old 06/06/2013, 16:07   #13
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by Master674b View Post
Das versteh ich nicht so ganz. Die Leute haben sich an den Standard zu halten und nicht anders herum.

Wenns nach mir ginge wäre nie irgend etwas deprecated. Es wäre einfach schlichtweg nicht mehr vorhanden, um den Benutzern guten Stil aufzuzwingen.
was dann darin resultiert, dass viele leute uralte compiler benutzen, weil neue compiler ihren alten code nicht mehr kompilieren können.

EDIT:
ich sollte die seite mal öfter updaten, smitty war eine ganze stunde schneller als ich :/
Dr. Coxxy is offline  
Old 06/06/2013, 19:59   #14
 
elite*gold: 0
Join Date: Mar 2012
Posts: 88
Received Thanks: 2
Ist das jetzt so besser?:
Code:
#include <windows.h>
#include <stdio.h>

#define Base 0x0723BB74



void injection(){

	

*(int*)(Base)= 3000;
}


void TheHacks()
	{
for(;;)
{
	injection();
	Sleep (50);
}}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
 switch(fdwReason)
 {
  case DLL_PROCESS_ATTACH:
  CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TheHacks , NULL, 0, NULL);
  break;
  case DLL_PROCESS_DETACH:
  CloseHandle(hinstDLL);
  break;
 }
return true;
}
hansewurst is offline  
Old 06/06/2013, 20:22   #15

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Naja, du hast keinen Thread-Prototypen und der Aufruf von injection dürfte länger dauern als die eigentliche Ausführung der Funktion, aber evtl. ist der Compiler nett und inlined das.
Konstanten mit const deklarieren und nicht als Makro & zum Casten die Casts von C++ nutzen (reinterpret_cast<> in dem Falle).

@Master674b: Es ist nicht so, dass man sich da nicht dran halten will, aber vor allem in Unternehmen gibt es da 2 Faktoren:
1) ein neuer Standard bedeutet, dass die Mitarbeiter geschult werden müssen, was Kosten bedeutet. Erklär mal nem Zahlenschubser, dass der neue Standard notwendig ist, wenn seine Zahlen zeigen, dass es bisher auch ging.
2) je nach Branche ist nicht nur ein Standard ausschlaggebend, hier geht es in erster Linie um Normen und was weiß ich der Branche. Ich kann das nur von meinem Arbeitgeber berichten, aber es gibt genaue Richtlinien, was erlaubt ist - teilweise gesetzlich / branchenweit. Bis da C++11 übernommen wird, vergehen noch 2-3 Jährchen. :/ Wenn da der Compiler nicht mehr den alten Standard unterstützt, wird C++ halt fallen gelassen und das ist ja auch nicht im Sinne der Entwickler.
snow is offline  
Reply


Similar Threads Similar Threads
nach Source geht Neuz.exe nicht mehr
06/27/2013 - Flyff Private Server - 6 Replies
Hallo Community... Ich habe mich mal daran versucht Source einzurichten. Alles hat einwandfrei und ohne große Probleme geklappt.. Gab auch keine Errors. Nur wenn ich compiled habe und dann die neu erstellten exen in den Programm Ordner und Resource Ordner verschoben habe und die Neuz in den Clienten, stuerzt die Neuz nach kurzem laden ab. Ja, ich habe auch die Version in der Neuz geaendert. Hier noch die Error.txt 2011/ 8/14 02:02:29 CEnvironment::LoadScript - Script Load Failed
WarRock 5th Slot source geht nicht was falsch? Oo
07/05/2011 - WarRock - 4 Replies
Hi, ich habe mal versucht einen 5th slot hack zu coden (nur 5th slot) aber irgentwie geht das nicht... im injektor steht dan immer "failed to injekt" hier mal der source code: was ist da falsch Ô.ô kann mir einer da helfen? ^^
Mein Source geht nicht richtig
04/02/2011 - Flyff Private Server - 13 Replies
hi ich habe sedricka files und will da den source den sedrika realiesirt hat einfügen ich habe ihn kompleet und habe die Ordner AccountServer CacheServer Certifier CoreServer LoginServer
[Help]Steam geht nicht und Counter Strike Source auch nicht
06/18/2010 - Counter-Strike - 6 Replies
Hallo, Ich wollte ma fragen ob bei euch Steam Funkt denn bei mir steht "Update: Steam ist derzeit nicht verfügbar" aber andere kommen in Steam und Counter Strike Source rein bitte um Hilfe!



All times are GMT +1. The time now is 00:20.


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.