Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 16:08

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

Advertisement



C++ Hilfe .. !

Discussion on C++ Hilfe .. ! within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Furkiii's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 384
Received Thanks: 137
C++ Hilfe .. !

So Leute ich arbeite an einen DLL Hack für Nos doch da gibt es ein Problem sobald ich Nostale mit der DLL injectiere steht da Nostale.exe funktioniert nichtmehr blablabla ...

Hier der Code :


Es geht hier bei um einen Lifehack in den Minigames !
Furkiii is offline  
Old 06/17/2012, 18:37   #2
 
Rorc's Avatar
 
elite*gold: 113
The Black Market: 133/2/0
Join Date: Dec 2009
Posts: 16,685
Received Thanks: 4,449
Arrow Nostale -> C/C++

#moved
Rorc is offline  
Old 06/17/2012, 19:10   #3
 
elite*gold: 0
Join Date: Apr 2010
Posts: 2,832
Received Thanks: 4,152
Geb mal aus ob deine ImageBase Addresse bzw dein Basepointer richtig ist.
DWORD ImageBase = (DWORD)GetModuleHandle(0);
Das sieht mir bischen eigenartig aus, aber okay.


if(GetAsyncKeyState(VK_F1)&1)State =! State;

Warum machst du das per AND Vergleich?
Elektrochemie is offline  
Old 06/17/2012, 19:31   #4
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Da ich "Nos" nicht kenne zähle ich einfach mal alle potentiellen Fehlerquellen auf.

Code:
DWORD BasePointer = 0;
In x64 Prozessen kann das zu Fehlern führen, da dort Arbeitsspeicher mit 8 Byte adressiert wird. Zeigt dein Pointer nun z.B. auf C00000000, dann passt das nicht in die Variable und in ihr steht dann lediglich 0.


Code:
#define Points 0x000009C4
Mal ganz davon abgesehen, dass das absolut unschön ist; bist du dir sicher, dass die Adresse stimmt?


Code:
DWORD WINAPI HackThread(LPVOID unused)
Rückgabewert definiert, aber es wird nichts zurückgegeben. Dass das überhaupt erstellt werden kann wundert mich! Welchen Compiler nutzt du?


Code:
DWORD dwBasePointer = *(DWORD*)BasePointer;  
DWORD ImageBase = (DWORD)GetModuleHandle(0);
Siehe Punkt 1.


Code:
DWORD ImageBase = (DWORD)GetModuleHandle(0);
Bist du dir sicher, dass dies das richtige Modul ist?


Code:
BasePointer = ImageBase + 0x004E6ABC;
Bist du dir sicher, dass die Adresse stimmt?


Abgesehen davon solltest du dir einen einheitlichen Coding-Style angewöhnen, das schaut gruselig aus...



Letztenendes solltest du deinen Code ein wenig Debuggen und uns mehr Infos zukommen lassen, ansonsten können wir dir nicht wirklich helfen.
Nightblizard is offline  
Old 06/18/2012, 09:35   #5
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
dein pointer offset (modul address) ist höchstwahrscheinlich falsch
also das: 0x004E6ABC

weil wenn die adresse falsch ist, erzeugt die dll injection nen overflow und deswegen stürzt nostale ab


Quote:
Rückgabewert definiert, aber es wird nichts zurückgegeben. Dass das überhaupt erstellt werden kann wundert mich! Welchen Compiler nutzt du?
willst du mir sagen das du void HackThread(){... machst ? <- ist nähmlich das schlechteste was man tuhen kann

2.
Code:
DWORD WINAPI HackThread(LPVOID [B]unused[/B])
wie du siehst und man kann auch einen logischen schluss ziehen, verwenden wir den rückgabewert garnicht


noch zum TE:
den code copy&pasten und eigentlich nicht viel ahnung von dieser umgebung zu haben, passt nicht zusammen
XxharCs is offline  
Old 06/18/2012, 13:30   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by XxharCs View Post
dein pointer offset (modul address) ist höchstwahrscheinlich falsch
also das: 0x004E6ABC

weil wenn die adresse falsch ist, erzeugt die dll injection nen overflow und deswegen stürzt nostale ab
Das musst du mir nochmal genauer erklären.

Quote:
willst du mir sagen das du void HackThread(){... machst ? <- ist nähmlich das schlechteste was man tuhen kann
Nein, er will sagen, dass man in einer Funktion, die als DWORD definiert ist, auch einen Wert vom Typ DWORD zurückgeben muss. Ein fehlendes return Statement ist ein Fehler.
Quote:
2.
Code:
DWORD WINAPI HackThread(LPVOID [B]unused[/B])
wie du siehst und man kann auch einen logischen schluss ziehen, verwenden wir den rückgabewert garnicht
Scheiße, wenn man den Unterschied zwischen Parametern und Rückgabewerten nicht kennt.
MrSm!th is offline  
Thanks
1 User
Old 06/18/2012, 15:42   #7
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Quote:
Originally Posted by MrSm!th View Post
Scheiße, wenn man den Unterschied zwischen Parametern und Rückgabewerten nicht kennt.
Klar kenn ich den

Man kann aber parameter auch zurück geben, aber nicht immer und nicht jeden ! (paar andere vorraussetzungen spielen da natürlich auch mit..)

ein bsp in java wär:
Code:
public static int method2(String s) throws IllegalArgumentException {
		if((s.charAt(0) > 'G') && (s.charAt(s.length() -1) < 'M')) {
			throw new IllegalArgumentException("So nicht.");
		}
		return s.length();
	}

Quote:
Originally Posted by MrSm!th View Post
Das musst du mir nochmal genauer erklären.
wenn man in ein spiel injectet und die adressen sind falsch, bekommt das spiel nen dc weil die dll auf irgendeine adresse zeigt etc.
ich hoffe das ich es besser erklärt hab, weil ich kein typ der alles 1a erklären kann

deswegen sag ich das seine adresse falsch ist
XxharCs is offline  
Old 06/18/2012, 16:05   #8
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Quote:
Originally Posted by XxharCs View Post
weil wenn die adresse falsch ist, erzeugt die dll injection nen overflow und deswegen stürzt nostale ab
Nein, das erzeugt keinen Overflow. Was da passiert nennt sich Zugriffsverletzung (access violation).

Overflows:
Pufferüberlauf
Arithmetischer Überlauf

Zugriffsverletzung:
Schutzverletzung


Quote:
Originally Posted by XxharCs View Post
willst du mir sagen das du void HackThread(){... machst ? <- ist nähmlich das schlechteste was man tuhen kann
Schön, dass du meine Aussage total missverstehst und dann eine solche Aussage in den Raum stellst ohne jede Begründung. ^^

Lass mich dir das mal kurz zeigen, denn so schlimm ist das eigentlich nicht.
Code:
long __stdacall foo(long unused)
{
}

void bar()
{
     auto i = foo(0);
}

Nun in Assembly:
Code:
;long __stcall foo(long unused)
push ebp
mov ebp, esp
pop ebp
retn 4

;void bar()
push ebp
mov ebp, esp
push ecx
push 0
call foo
mov [ebp-4], eax
mov esp, ebp
pop ebp
ret

So wie er es benutzt passiert da nichts schlimmes, es wird dann irgendein Wert in deine Variable gesteckt. Das Gleiche passiert, wenn du void als Rückgabetypen wählst. Im eax Register steht dann lediglich das, was vor dem Aufruf der Funktion drinnen stand.

Klar, das ist trotzdem falsch und es kann in x64 Prozessen crashen, aber ich habe das auch so gar nicht gemeint (wie Smith bereits sagte).

Quote:
Originally Posted by XxharCs View Post
2.
Code:
DWORD WINAPI HackThread(LPVOID [B]unused[/B])
wie du siehst und man kann auch einen logischen schluss ziehen, verwenden wir den rückgabewert garnicht
Hier haust du ein paar wirklich fundamentale Dinge durcheinander! Ich rate dir nochmal ein Buch zu nehmen und das Kapitel "Funktionen/Prozeduren" durchzuarbeiten.

Quote:
Originally Posted by XxharCs View Post
noch zum TE:
den code copy&pasten und eigentlich nicht viel ahnung von dieser umgebung zu haben, passt nicht zusammen
Nehm dir ein Beispiel dran. Wenn man keine Ahnung hat, dann sollte man auch keine Tipps geben.




Quote:
Originally Posted by XxharCs View Post
Man kann aber parameter auch zurück geben, aber nicht immer und nicht jeden ! (paar andere vorraussetzungen spielen da natürlich auch mit..)
Man gibt keine Parameter zurück, das ist absoluter Unsinn!


Quote:
Originally Posted by XxharCs View Post
ein bsp in java wär:
Wo genau gibst du da nun einen Parameter zurück? Du gibst in deinem Beispiel die Länge des Parameters "String s" zurück, sofern es den vorrausgegangenen Check übersteht.


Quote:
Originally Posted by XxharCs View Post
wenn man in ein spiel injectet und die adressen sind falsch, bekommt das spiel nen dc weil die dll auf irgendeine adresse zeigt etc.
ich hoffe das ich es besser erklärt hab, weil ich kein typ der alles 1a erklären kann

deswegen sag ich das seine adresse falsch ist
Siehe Punkt 1, das ist kein Overflow.


Man gibt keine Tipps, wenn man nicht weiß wovon man spricht.
Nightblizard is offline  
Thanks
2 Users
Old 06/18/2012, 16:20   #9
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
ich zittiere einfach nur:
Quote:
Man kann aber parameter auch zurück geben, aber nicht immer und nicht jeden ! (paar andere vorraussetzungen spielen da natürlich auch mit..)
vorraussetzung wär in dem fall das ich die länge zurück gebe(.length), ein weiteres beispiel ist wenn ich zb den parameter * 2 oder was anderes im return mache, ich hoffe du verstehst was ich meine
aber das weitere diskutieren lass ich mal erspart bleiben, willst du sicher auch nicht

nur noch beim:
Quote:
Rückgabewert definiert, aber es wird nichts zurückgegeben.
hab ich deine aussage falsch intepretiert, nimms nicht böse, aber durch Sm!ths post hab ich dich schon verstanden was du meintest

Quote:
Siehe Punkt 1, das ist kein Overflow.
als ich damals logs erstellt habe bei den probs die ich hatte, sagten die logs das es sich um einen overflow handelte da die adresse auf wichtige threads gezeigt hat und ich dann irgendwas verändert hab und deswegen stürzte es ab
aber Zugriffsverletzungen in diesem fall, würd ichs nicht nennen, da bei der zugriffsverletzung schon was anderes passiert
XxharCs is offline  
Old 06/18/2012, 16:57   #10
 
2n0w's Avatar
 
elite*gold: 0
Join Date: Feb 2012
Posts: 115
Received Thanks: 18
Quote:
Originally Posted by XxharCs View Post
aber Zugriffsverletzungen in diesem fall, würd ichs nicht nennen, da bei der zugriffsverletzung schon was anderes passiert
Du kannst es nennen wie du willst, an einen "bad pointer" zu schreiben bringt dir wahrscheinlich eine Access violation ein.
Was, wenn nicht das hier, sollte sonst eine Access violation auslösen o.0 ?
2n0w is offline  
Old 06/18/2012, 18:25   #11


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by XxharCs View Post
ich zittiere einfach nur:

vorraussetzung wär in dem fall das ich die länge zurück gebe(.length), ein weiteres beispiel ist wenn ich zb den parameter * 2 oder was anderes im return mache, ich hoffe du verstehst was ich meine
aber das weitere diskutieren lass ich mal erspart bleiben, willst du sicher auch nicht

nur noch beim:

hab ich deine aussage falsch intepretiert, nimms nicht böse, aber durch Sm!ths post hab ich dich schon verstanden was du meintest


als ich damals logs erstellt habe bei den probs die ich hatte, sagten die logs das es sich um einen overflow handelte da die adresse auf wichtige threads gezeigt hat und ich dann irgendwas verändert hab und deswegen stürzte es ab
aber Zugriffsverletzungen in diesem fall, würd ichs nicht nennen, da bei der zugriffsverletzung schon was anderes passiert
Darauf lässt sich nur noch
Quote:
Man gibt keine Tipps, wenn man nicht weiß wovon man spricht.
erwidern.
MrSm!th is offline  
Reply




All times are GMT +2. The time now is 16:08.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.